Artifex/control_plane/knowledge/models.py
2026-08-15 13:50:24 +07:00

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")]