Files
benevoles/backend/app/api/editions.py
T
AdamThomasandClaude Sonnet 5 e0a0c56307 Édition éditable (dates) + robustesse de l'écran Postes & créneaux
Back-end :
- GET /editions/{id} (tout compte de l'édition) et PATCH /editions/{id}
  (COORDINATION) : name, year, start_date, end_date, retention_days.
  Refus si end_date < start_date (edition.dates_inconsistent). Tests.

Front-end :
- api : EditionRead/Update, editions.get/update (http + mock), hooks
  useEdition / useUpdateEdition.
- ConfigGrid : le bouton « ajouter un poste » sélectionne le poste créé et
  affiche l'état (pending) + les erreurs (ErrorNote) — avant, un échec ou
  même un succès passaient inaperçus. Renommage du poste + choix de la
  catégorie + suppression dans l'en-tête. Une colonne par jour de l'édition
  (même vide) → on peut ajouter un créneau n'importe quel jour.
- ConfigRules : formulaire d'édition (nom + dates) → c'est là qu'on ajoute
  ou retire des jours ; compteur de jours ; retour d'enregistrement.
- i18n mis à jour.

144 tests back OK ; typecheck + lint + build + smoke front OK.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_017uUsRg7XzopkCPWimwg9ZM
2026-09-10 20:02:50 +02:00

40 lines
1.3 KiB
Python

"""Lecture et mise à jour d'une édition (dates, nom, rétention)."""
from fastapi import APIRouter, Depends, HTTPException
from sqlmodel import Session
from app.api.deps import get_edition
from app.api.schemas import EditionRead, EditionUpdate
from app.auth.deps import current_account_in_edition, require_coordinator
from app.db import get_session
from app.models import Account, Edition
router = APIRouter(prefix="/editions", tags=["editions"])
@router.get("/{edition_id}", response_model=EditionRead)
def read_edition(
edition: Edition = Depends(get_edition),
_account: Account = Depends(current_account_in_edition),
) -> Edition:
return edition
@router.patch("/{edition_id}", response_model=EditionRead)
def update_edition(
payload: EditionUpdate,
edition: Edition = Depends(get_edition),
_guard: Account = Depends(require_coordinator),
session: Session = Depends(get_session),
) -> Edition:
for field, value in payload.model_dump(exclude_unset=True).items():
setattr(edition, field, value)
if edition.end_date < edition.start_date:
raise HTTPException(
status_code=422, detail={"code": "edition.dates_inconsistent"}
)
session.add(edition)
session.commit()
session.refresh(edition)
return edition