27 lines
1.2 KiB
Python
27 lines
1.2 KiB
Python
from __future__ import annotations
|
|
|
|
from django.db import models
|
|
|
|
from control_plane.common import TimestampedModel
|
|
|
|
|
|
class KnowledgeNode(TimestampedModel):
|
|
project = models.ForeignKey("projects.Project", on_delete=models.CASCADE, related_name="knowledge_nodes")
|
|
node_type = models.CharField(max_length=80)
|
|
external_id = models.CharField(max_length=500)
|
|
title = models.CharField(max_length=500, blank=True)
|
|
properties = models.JSONField(default=dict, blank=True)
|
|
|
|
class Meta:
|
|
constraints = [models.UniqueConstraint(fields=["project", "node_type", "external_id"], name="unique_knowledge_node")]
|
|
|
|
|
|
class KnowledgeEdge(TimestampedModel):
|
|
project = models.ForeignKey("projects.Project", on_delete=models.CASCADE, related_name="knowledge_edges")
|
|
source = models.ForeignKey(KnowledgeNode, on_delete=models.CASCADE, related_name="outgoing_edges")
|
|
target = models.ForeignKey(KnowledgeNode, on_delete=models.CASCADE, related_name="incoming_edges")
|
|
edge_type = models.CharField(max_length=80)
|
|
evidence = models.JSONField(default=list, blank=True)
|
|
|
|
class Meta:
|
|
constraints = [models.UniqueConstraint(fields=["source", "target", "edge_type"], name="unique_knowledge_edge")]
|