import uuid from sqlalchemy import Column, String, ForeignKey, Date, Integer, Numeric, DateTime, UniqueConstraint, Index from sqlalchemy.sql import func from sqlalchemy.orm import relationship from app.core.database import Base class WorkloadSnapshot(Base): """Stores historical workload snapshots for trend analysis.""" __tablename__ = "pjctrl_workload_snapshots" id = Column(String(36), primary_key=True, default=lambda: str(uuid.uuid4())) user_id = Column(String(36), ForeignKey("pjctrl_users.id", ondelete="CASCADE"), nullable=False) week_start = Column(Date, nullable=False) allocated_hours = Column(Numeric(8, 2), nullable=False, default=0) capacity_hours = Column(Numeric(8, 2), nullable=False, default=40) load_percentage = Column(Numeric(5, 2), nullable=False, default=0) task_count = Column(Integer, nullable=False, default=0) created_at = Column(DateTime, server_default=func.now(), nullable=False) updated_at = Column(DateTime, server_default=func.now(), onupdate=func.now(), nullable=False) # Relationships user = relationship("User", backref="workload_snapshots") # Constraints __table_args__ = ( UniqueConstraint('user_id', 'week_start', name='uk_user_week'), Index('idx_workload_week_start', 'week_start'), )