30 lines
1.4 KiB
Python
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)
|
|
)
|