groupe-meditation/backend/app/schemas/phase6.py
Daniel Allaire 6677b0f57b Ajouter historique métier et protection concurrente
Ajoute modifie_le aux objets sensibles et fait transmettre la version affichée par le frontend pour refuser les écritures périmées avec un message HTTP 409.

Ajoute une table historique_modifications et un service d'historique métier afin de journaliser automatiquement les raisons des changements importants sans intervention de l'utilisateur.

Expose l'historique métier dans le module Journal, distinct du journal technique, et documente les processus utilisateurs ainsi qu'une présentation sobre aux membres.
2026-05-31 10:59:41 -04:00

65 lines
1.6 KiB
Python

"""Schémas Phase 6 — Littérature : inventaire, vente, ajustement."""
from pydantic import BaseModel
from datetime import date, datetime
from uuid import UUID
from typing import Optional
# ── Littérature (inventaire) ──
class LitteratureCreate(BaseModel):
titre: str
categorie: str # livre, brochure, depliant, pamphlet
prix_coutant: Optional[float] = None
quantite_stock: int = 0
seuil_commande: int = 2
code_bsg: Optional[str] = None
class LitteratureOut(BaseModel):
id: UUID
titre: str
categorie: str
prix_coutant: Optional[float] = None
quantite_stock: int
seuil_commande: int
code_bsg: Optional[str] = None
stock_bas: bool = False
modifie_le: datetime
model_config = {"from_attributes": True}
class LitteratureUpdate(BaseModel):
titre: Optional[str] = None
categorie: Optional[str] = None
prix_coutant: Optional[float] = None
seuil_commande: Optional[int] = None
code_bsg: Optional[str] = None
# ── M5 Ajuster inventaire ──
class AjustementStock(BaseModel):
quantite: int # positif = ajout, négatif = retrait
# ── S3 Vente littérature ──
class VenteCreate(BaseModel):
litterature_id: UUID
reunion_id: Optional[UUID] = None
quantite: int
montant: float
date_vente: date
vendu_par_id: Optional[UUID] = None
class VenteOut(BaseModel):
id: UUID
litterature_titre: str
quantite: int
montant: float
date_vente: date
vendu_par_prenom: Optional[str] = None
remis_tresorier: bool = False
cree_le: datetime
model_config = {"from_attributes": True}