transfer from private server/git server
This commit is contained in:
42
web/services/evenement_service.py
Normal file
42
web/services/evenement_service.py
Normal file
@@ -0,0 +1,42 @@
|
||||
"""evenement_service.py — Logique métier du module Planning (EXF-09, EXF-10)."""
|
||||
|
||||
from datetime import datetime
|
||||
|
||||
from models import evenement_model
|
||||
from services import audit_service
|
||||
|
||||
|
||||
class ValidationError(Exception):
|
||||
pass
|
||||
|
||||
|
||||
def _parse(dt_str):
|
||||
try:
|
||||
return datetime.fromisoformat(dt_str)
|
||||
except (TypeError, ValueError) as exc:
|
||||
raise ValidationError(f"Date invalide : {dt_str!r}") from exc
|
||||
|
||||
|
||||
def list_evenements(db):
|
||||
return evenement_model.fetch_all(db)
|
||||
|
||||
|
||||
def create_evenement(db, titre, description, date_debut, date_fin, createur_sub, ip=None):
|
||||
if not titre or not titre.strip():
|
||||
raise ValidationError("Le titre est obligatoire.")
|
||||
debut = _parse(date_debut)
|
||||
fin = _parse(date_fin)
|
||||
if fin < debut:
|
||||
raise ValidationError("La date de fin doit être postérieure à la date de début.")
|
||||
new_id = evenement_model.insert(db, titre.strip(), description, debut, fin, createur_sub)
|
||||
audit_service.log(db, "CREATE_EVENEMENT", f"evenement:{new_id}", "SUCCESS", createur_sub, ip)
|
||||
return new_id
|
||||
|
||||
|
||||
def delete_evenement(db, evenement_id, createur_sub, ip=None):
|
||||
existing = evenement_model.get(db, evenement_id)
|
||||
if not existing:
|
||||
raise LookupError(f"Événement {evenement_id} introuvable")
|
||||
rows = evenement_model.delete(db, evenement_id)
|
||||
audit_service.log(db, "DELETE_EVENEMENT", f"evenement:{evenement_id}", "SUCCESS", createur_sub, ip)
|
||||
return rows
|
||||
Reference in New Issue
Block a user