from sqlalchemy import Column, String, Integer, Boolean, DateTime, ForeignKey, UniqueConstraint from sqlalchemy.orm import relationship from sqlalchemy.sql import func from app.core.database import Base class TaskStatus(Base): __tablename__ = "pjctrl_task_statuses" id = Column(String(36), primary_key=True) project_id = Column(String(36), ForeignKey("pjctrl_projects.id", ondelete="CASCADE"), nullable=False) name = Column(String(50), nullable=False) color = Column(String(7), default="#808080", nullable=False) position = Column(Integer, default=0, nullable=False) is_done = Column(Boolean, default=False, nullable=False) created_at = Column(DateTime, server_default=func.now(), nullable=False) __table_args__ = ( UniqueConstraint('project_id', 'name', name='uk_status_name'), ) # Relationships project = relationship("Project", back_populates="task_statuses") tasks = relationship("Task", back_populates="status") # Default statuses to create for new projects DEFAULT_STATUSES = [ {"name": "To Do", "color": "#808080", "position": 0, "is_done": False}, {"name": "In Progress", "color": "#0066cc", "position": 1, "is_done": False}, {"name": "Blocked", "color": "#cc0000", "position": 2, "is_done": False}, {"name": "Done", "color": "#00cc66", "position": 3, "is_done": True}, ]