43 lines
1.4 KiB
Python
43 lines
1.4 KiB
Python
"""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
|