From f4369c010de0a15254ef09e90d78fe114da396a6 Mon Sep 17 00:00:00 2001 From: Marc Vilanova Date: Mon, 19 May 2025 15:06:46 -0700 Subject: [PATCH] fix(oncall service): return correct message if we encounter an integrity error on delete --- src/dispatch/service/views.py | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/src/dispatch/service/views.py b/src/dispatch/service/views.py index 7f24aa5aec61..e8d7da9aa83f 100644 --- a/src/dispatch/service/views.py +++ b/src/dispatch/service/views.py @@ -1,6 +1,5 @@ -from fastapi import APIRouter, Body, HTTPException, status, Query +from fastapi import APIRouter, Body, HTTPException, Query, status from pydantic import ValidationError - from sqlalchemy.exc import IntegrityError from dispatch.database.core import DbSession @@ -9,15 +8,14 @@ from .models import ServiceCreate, ServicePagination, ServiceRead, ServiceUpdate from .service import ( - get, create, - update, delete, - get_by_external_id_and_project_name, + get, get_all_by_external_ids, + get_by_external_id_and_project_name, + update, ) - router = APIRouter() @@ -59,7 +57,7 @@ def create_service( raise ValidationError( [ { - "msg": "A service with this external id already exists.", + "msg": "An oncall service with this external id already exists.", "loc": "external_id", } ], @@ -75,7 +73,7 @@ def update_service(db_session: DbSession, service_id: PrimaryKey, service_in: Se if not service: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, - detail=[{"msg": "A service with this id does not exist."}], + detail=[{"msg": "An oncall service with this id does not exist."}], ) try: @@ -84,7 +82,7 @@ def update_service(db_session: DbSession, service_id: PrimaryKey, service_in: Se raise ValidationError( [ { - "msg": "A service with this name already exists.", + "msg": "An oncall service with this name already exists.", "loc": "name", } ], @@ -100,7 +98,7 @@ def get_service(db_session: DbSession, service_id: PrimaryKey): if not service: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, - detail=[{"msg": "A service with this id does not exist."}], + detail=[{"msg": "An oncall service with this id does not exist."}], ) return service @@ -112,8 +110,9 @@ def delete_service(db_session: DbSession, service_id: PrimaryKey): if not service: raise HTTPException( status_code=status.HTTP_404_NOT_FOUND, - detail=[{"msg": "A service with this id does not exist."}], + detail=[{"msg": "An oncall service with this id does not exist."}], ) + try: delete(db_session=db_session, service_id=service_id) except IntegrityError: @@ -121,7 +120,8 @@ def delete_service(db_session: DbSession, service_id: PrimaryKey): status_code=status.HTTP_409_CONFLICT, detail=[ { - "msg": "Unable to delete service because it is referenced by an incident `Role`. Remove this reference before deletion." + "msg": f"Unable to delete oncall service {service.name} with id {service.id}. Contact your administrator", + "loc": "service_id", } ], ) from None