import uuid from sqlalchemy import Column, String, Text, DateTime, ForeignKey, UniqueConstraint from sqlalchemy.sql import func from sqlalchemy.orm import relationship from app.core.database import Base class TaskCustomValue(Base): __tablename__ = "pjctrl_task_custom_values" id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) task_id = Column(String(36), ForeignKey("pjctrl_tasks.id", ondelete="CASCADE"), nullable=False) field_id = Column(String(36), ForeignKey("pjctrl_custom_fields.id", ondelete="CASCADE"), nullable=False) value = Column(Text, nullable=True) # Stored as text, parsed based on field_type updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), nullable=False) # Unique constraint: one value per task-field combination __table_args__ = ( UniqueConstraint('task_id', 'field_id', name='uq_task_field'), ) # Relationships task = relationship("Task", back_populates="custom_values") field = relationship("CustomField", back_populates="values")