""" Felles feiloversettelse: Postgres-constraint-brudd -> rene HTTP-feil. Mønsteret (unik nøkkel, fremmednøkkel, CHECK) gjentar seg på tvers av routerne (lag-navn, roster, sesjons-rekkefølge, lås). Meldingene er generiske og lekker aldri rå Postgres-tekst (constraint-/tabellnavn) til klienten. """ from contextlib import asynccontextmanager import asyncpg from fastapi import HTTPException, status # async (ikke bare @contextmanager) slik at den kan stå i samme # "async with org_connection(...) as conn, translate_db_errors():"-setning som # org_connection — Python krever at ALLE ledd i én async with er async # context managers. Kroppen selv gjør ingenting async, den bare venter på at # koden inni with-blokken (som awaiter) kaster. @asynccontextmanager async def translate_db_errors(): try: yield except asyncpg.UniqueViolationError as e: raise HTTPException( status_code=status.HTTP_409_CONFLICT, detail="Raden finnes allerede (dupliserer noe som skal være unikt).", ) from e except asyncpg.ForeignKeyViolationError as e: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Refererer til noe som ikke finnes.", ) from e except asyncpg.CheckViolationError as e: raise HTTPException( status_code=status.HTTP_400_BAD_REQUEST, detail="Verdien bryter en regel for feltet.", ) from e