78 lines
1.7 KiB
Python
78 lines
1.7 KiB
Python
"""Schémas Phase 8 — Votes (sondages) et parrainage (jumelages)."""
|
|
from pydantic import BaseModel
|
|
from datetime import date, datetime
|
|
from uuid import UUID
|
|
from typing import Optional
|
|
|
|
|
|
# ── G6 Lancer un sondage ──
|
|
class OptionCreate(BaseModel):
|
|
texte: str
|
|
|
|
|
|
class SondageCreate(BaseModel):
|
|
titre: str
|
|
description: Optional[str] = None
|
|
type: str = "oui_non" # oui_non, choix_multiple, unanimite
|
|
date_ouverture: datetime
|
|
date_fermeture: datetime
|
|
options: list[OptionCreate] = []
|
|
|
|
|
|
class OptionOut(BaseModel):
|
|
id: UUID
|
|
texte: str
|
|
ordre: int
|
|
nb_votes: int = 0
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class SondageOut(BaseModel):
|
|
id: UUID
|
|
titre: str
|
|
description: Optional[str] = None
|
|
type: str
|
|
cree_par_prenom: Optional[str] = None
|
|
date_ouverture: datetime
|
|
date_fermeture: datetime
|
|
statut: str
|
|
options: list[OptionOut] = []
|
|
total_votes: int = 0
|
|
a_vote: bool = False # le membre courant a-t-il voté?
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class SondageUpdate(BaseModel):
|
|
statut: Optional[str] = None # ouvert, ferme
|
|
|
|
|
|
# ── C6 Voter ──
|
|
class VoteCreate(BaseModel):
|
|
option_id: UUID
|
|
|
|
|
|
# ── G7 Jumelage parrain/filleul ──
|
|
class JumelageCreate(BaseModel):
|
|
parrain_id: UUID
|
|
filleul_id: UUID
|
|
date_jumelage: date
|
|
note: Optional[str] = None
|
|
|
|
|
|
class JumelageOut(BaseModel):
|
|
id: UUID
|
|
parrain_prenom: str
|
|
filleul_prenom: str
|
|
date_jumelage: date
|
|
statut: str
|
|
note: Optional[str] = None
|
|
cree_par_prenom: Optional[str] = None
|
|
|
|
model_config = {"from_attributes": True}
|
|
|
|
|
|
class JumelageUpdate(BaseModel):
|
|
statut: Optional[str] = None # actif, termine
|
|
note: Optional[str] = None
|