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