"""Table candidatures — candidatures volontaires et nominations.""" import uuid from datetime import datetime, timezone from sqlalchemy import String, Boolean, DateTime, Text, ForeignKey, Enum as SAEnum from sqlalchemy.orm import Mapped, mapped_column from app.core.database import Base class Candidature(Base): __tablename__ = "candidatures" id: Mapped[uuid.UUID] = mapped_column(primary_key=True, default=uuid.uuid4) groupe_id: Mapped[uuid.UUID] = mapped_column(ForeignKey("groupes.id"), nullable=False) poste_id: Mapped[uuid.UUID] = mapped_column(ForeignKey("postes.id"), nullable=False) membre_id: Mapped[uuid.UUID] = mapped_column(ForeignKey("membres.id"), nullable=False) type: Mapped[str] = mapped_column( SAEnum("candidature", "nomination", name="type_candidature"), default="candidature", ) statut: Mapped[str] = mapped_column( SAEnum("proposee", "acceptee", "refusee", "retiree", name="statut_candidature"), default="proposee", ) motivation: Mapped[str | None] = mapped_column(Text) nomme_par: Mapped[uuid.UUID | None] = mapped_column(ForeignKey("membres.id")) acceptee_par_membre: Mapped[bool | None] = mapped_column(Boolean) # le nominé accepte/refuse proposition_id: Mapped[uuid.UUID | None] = mapped_column(ForeignKey("propositions.id")) cree_le: Mapped[datetime] = mapped_column( DateTime(timezone=True), default=lambda: datetime.now(timezone.utc) )