From b552f589dac91d92227dc36aa481dd5a17b70595 Mon Sep 17 00:00:00 2001 From: Marc Vilanova Date: Tue, 25 Jan 2022 11:19:58 -0800 Subject: [PATCH] Returns HTTP 409 if an organization exists on organization create --- src/dispatch/organization/views.py | 21 +++++++++---------- src/dispatch/static/dispatch/src/api.js | 13 ++++++++++++ .../src/organization/OrganizationBanner.vue | 2 +- 3 files changed, 24 insertions(+), 12 deletions(-) diff --git a/src/dispatch/organization/views.py b/src/dispatch/organization/views.py index d69f83055489..913f3b0f2b46 100644 --- a/src/dispatch/organization/views.py +++ b/src/dispatch/organization/views.py @@ -24,7 +24,8 @@ OrganizationUpdate, OrganizationPagination, ) -from .service import create, get, update, add_user +from .service import create, get, get_by_name, update, add_user + router = APIRouter() @@ -46,18 +47,16 @@ def create_organization( current_user: DispatchUser = Depends(get_current_user), ): """Create a new organization.""" - try: - organization = create(db_session=db_session, organization_in=organization_in) - except IntegrityError: - raise ValidationError( - [ - ErrorWrapper( - ExistsError(msg="An organization with this name already exists."), loc="name" - ) - ], - model=OrganizationCreate, + organization = get_by_name(db_session=db_session, name=organization_in.name) + if organization: + raise HTTPException( + status_code=status.HTTP_409_CONFLICT, + detail=[{"msg": "An organization with this name already exists."}], ) + # create organization + organization = create(db_session=db_session, organization_in=organization_in) + # add creator as organization owner add_user( db_session=db_session, organization=organization, user=current_user, role=UserRoles.owner diff --git a/src/dispatch/static/dispatch/src/api.js b/src/dispatch/static/dispatch/src/api.js index 2d0c0d4735a6..56733b3c5230 100644 --- a/src/dispatch/static/dispatch/src/api.js +++ b/src/dispatch/static/dispatch/src/api.js @@ -62,6 +62,19 @@ instance.interceptors.response.use( ) { return Promise.reject(err) } + + if (err.response.status == 409) { + let errorText = err.response.data.detail.map(({ msg }) => msg).join(" ") + store.commit( + "notification_backend/addBeNotification", + { + text: errorText, + type: "error", + }, + { root: true } + ) + } + if (err.response.status == 422) { let errorText = err.response.data.detail.map(({ msg }) => msg).join(" ") store.commit( diff --git a/src/dispatch/static/dispatch/src/organization/OrganizationBanner.vue b/src/dispatch/static/dispatch/src/organization/OrganizationBanner.vue index 465e866847d8..1a62ec6b77d4 100644 --- a/src/dispatch/static/dispatch/src/organization/OrganizationBanner.vue +++ b/src/dispatch/static/dispatch/src/organization/OrganizationBanner.vue @@ -1,6 +1,6 @@