schedule.py 1.5 KB

1234567891011121314151617181920212223242526
  1. from sqlalchemy import Column, Date, DateTime, ForeignKey, String, Text, UniqueConstraint, Index, text
  2. from sqlalchemy.dialects.postgresql import UUID
  3. from sqlalchemy.sql import func
  4. from backend.app.db.base import Base
  5. class ScheduleItem(Base):
  6. __tablename__ = "schedule_items"
  7. __table_args__ = (
  8. UniqueConstraint("dept_id", "date", "shift_id", "staff_id", name="uq_schedule_unique"),
  9. Index("idx_schedule_dept_date", "dept_id", "date"),
  10. Index("idx_schedule_staff_date", "staff_id", "date"),
  11. )
  12. id = Column(UUID(as_uuid=True), primary_key=True, server_default=text("gen_random_uuid()"))
  13. dept_id = Column(UUID(as_uuid=True), ForeignKey("departments.id", ondelete="RESTRICT"), nullable=False)
  14. date = Column(Date, nullable=False)
  15. shift_id = Column(UUID(as_uuid=True), ForeignKey("shifts.id", ondelete="RESTRICT"), nullable=True)
  16. staff_id = Column(UUID(as_uuid=True), ForeignKey("users.id", ondelete="RESTRICT"), nullable=False)
  17. tag = Column(String, nullable=False, server_default="normal")
  18. note = Column(Text)
  19. original_staff_id = Column(UUID(as_uuid=True), ForeignKey("users.id", ondelete="SET NULL"))
  20. substitute_for_id = Column(UUID(as_uuid=True), ForeignKey("schedule_items.id", ondelete="SET NULL"))
  21. reason = Column(Text)
  22. created_at = Column(DateTime(timezone=True), server_default=func.now(), nullable=False)
  23. updated_at = Column(DateTime(timezone=True), server_default=func.now(), onupdate=func.now(), nullable=False)