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