import uuid from datetime import datetime from enum import Enum from typing import Optional, List from sqlalchemy.dialects.postgresql import UUID, JSON from sqlalchemy import Column from sqlmodel import SQLModel, Field, ForeignKey class PayslipStatus(str, Enum): PENDING = "Pending" SENT = "Sent" FAILED = "Failed" class RequestType(str, Enum): PAYSLIP = "payslip" LUNCH = "lunch" class PayslipRequest(SQLModel, table=True): __tablename__ = "payslip_requests" id: uuid.UUID = Field(default_factory=uuid.uuid4, primary_key=True) user_id: uuid.UUID = Field( sa_column=Column( UUID(as_uuid=True), ForeignKey("users.id", ondelete="CASCADE"), nullable=False, ) ) requested_at: datetime = Field(default_factory=datetime.now) status: PayslipStatus = Field(default=PayslipStatus.PENDING) refresh_token: Optional[str] = None error_message: Optional[str] = None request_type: str = Field(default=RequestType.PAYSLIP) # Stores list of dates like ["2024-01-01", "2024-01-02"] # We use JSON type to store arrays in Postgres target_dates: Optional[List[str]] = Field(default=None, sa_column=Column(JSON))