groupe-meditation/backend/app/models/candidature.py
2026-04-17 04:04:04 -04:00

30 lines
1.4 KiB
Python

"""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)
)