Skip to content

Commit 1e3f24b

Browse files
Added 409 error handling for nominee deletion
1 parent 17955c4 commit 1e3f24b

1 file changed

Lines changed: 13 additions & 2 deletions

File tree

src/nominees/urls.py

Lines changed: 13 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
from fastapi import APIRouter, Depends, HTTPException, status
22
from fastapi.responses import JSONResponse
3+
from sqlalchemy.exc import IntegrityError
34

45
import database
56
import nominees.crud
@@ -77,12 +78,22 @@ async def get_nominee_info(db_session: database.DBSession, computing_id: str):
7778
"/{computing_id}",
7879
description="Delete a nominee",
7980
response_model=SuccessResponse,
81+
responses={
82+
409: {"description": "Nominee is still referenced by election applications.", "model": DetailModel},
83+
},
8084
operation_id="delete_nominee",
8185
dependencies=[Depends(perm_election)],
8286
)
8387
async def delete_nominee_info(db_session: database.DBSession, computing_id: str):
84-
await nominees.crud.delete_nominee_info(db_session, computing_id)
85-
await db_session.commit()
88+
try:
89+
await nominees.crud.delete_nominee_info(db_session, computing_id)
90+
await db_session.commit()
91+
except IntegrityError as err:
92+
await db_session.rollback()
93+
raise HTTPException(
94+
status_code=status.HTTP_409_CONFLICT,
95+
detail=f"{computing_id} is still referenced by election applications.",
96+
) from err
8697

8798
return SuccessResponse(success=True)
8899

0 commit comments

Comments
 (0)