from sqlalchemy import Column, Date, DateTime, ForeignKey, String, Text, UniqueConstraint, Index, text from sqlalchemy.dialects.postgresql import UUID from sqlalchemy.sql import func from backend.app.db.base import Base class ScheduleItem(Base): __tablename__ = "schedule_items" __table_args__ = ( UniqueConstraint("dept_id", "date", "shift_id", "staff_id", name="uq_schedule_unique"), Index("idx_schedule_dept_date", "dept_id", "date"), Index("idx_schedule_staff_date", "staff_id", "date"), ) id = Column(UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()")) dept_id = Column(UUID(as_uuid=True), ForeignKey("departments.id", ondelete="RESTRICT"), nullable=False) date = Column(Date, nullable=False) shift_id = Column(UUID(as_uuid=True), ForeignKey("shifts.id", ondelete="RESTRICT"), nullable=True) staff_id = Column(UUID(as_uuid=True), ForeignKey("users.id", ondelete="RESTRICT"), nullable=False) tag = Column(String, nullable=False, server_default="normal") note = Column(Text) original_staff_id = Column(UUID(as_uuid=True), ForeignKey("users.id", ondelete="SET NULL")) substitute_for_id = Column(UUID(as_uuid=True), ForeignKey("schedule_items.id", ondelete="SET NULL")) reason = Column(Text) created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False) updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False)