35 lines
1.3 KiB
Python
35 lines
1.3 KiB
Python
"""Artifact model - task deliverables with versioning."""
|
|
from sqlalchemy import Column, String, Integer, Text, ForeignKey
|
|
from app.models.base import Base, TimestampMixin, TenantMixin
|
|
|
|
|
|
class Artifact(Base, TimestampMixin, TenantMixin):
|
|
"""An artifact is a deliverable produced by a task.
|
|
|
|
Supports versioning: each task can have multiple artifact versions.
|
|
Type: text, code, document, data, image, mixed
|
|
"""
|
|
__tablename__ = "artifacts"
|
|
|
|
id = Column(Integer, primary_key=True, autoincrement=True)
|
|
task_id = Column(Integer, ForeignKey("tasks.id"), nullable=False, index=True)
|
|
project_id = Column(Integer, ForeignKey("projects.id"), nullable=False)
|
|
|
|
title = Column(String(500), nullable=False)
|
|
content = Column(Text, default="")
|
|
artifact_type = Column(String(50), default="text")
|
|
|
|
# Versioning
|
|
version = Column(Integer, default=1)
|
|
is_latest = Column(String(10), default="true")
|
|
|
|
# Source attribution
|
|
created_by_user_id = Column(Integer, ForeignKey("users.id"), nullable=True)
|
|
created_by_worker_id = Column(Integer, ForeignKey("ai_workers.id"), nullable=True)
|
|
|
|
# Source references (for traceability - JSON array of source citations)
|
|
sources = Column(Text, default="[]")
|
|
|
|
def __repr__(self):
|
|
return f"<Artifact {self.title} v{self.version}>"
|