From a068c4d318dadc1860b796b231dafd3e2cf53714 Mon Sep 17 00:00:00 2001 From: Nicolai Ort Date: Wed, 9 Dec 2020 19:34:49 +0100 Subject: [PATCH] Deletes now return 204 instead of 404 (better rest compatability) ref #13 --- src/controllers/RunnerController.ts | 6 ++++-- src/controllers/RunnerOrganisationController.ts | 6 ++++-- src/controllers/RunnerTeamController.ts | 6 ++++-- src/controllers/TrackController.ts | 6 ++++-- src/controllers/UserController.ts | 6 ++++-- src/controllers/UserGroupController.ts | 6 ++++-- src/models/responses/ResponseEmpty.ts | 6 ++++++ 7 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 src/models/responses/ResponseEmpty.ts diff --git a/src/controllers/RunnerController.ts b/src/controllers/RunnerController.ts index 0a6ea34..1d61eba 100644 --- a/src/controllers/RunnerController.ts +++ b/src/controllers/RunnerController.ts @@ -6,6 +6,7 @@ import { RunnerGroupNeededError, RunnerIdsNotMatchingError, RunnerNotFoundError import { RunnerGroupNotFoundError } from '../errors/RunnerGroupErrors'; import { CreateRunner } from '../models/actions/CreateRunner'; import { Runner } from '../models/entities/Runner'; +import { ResponseEmpty } from '../models/responses/ResponseEmpty'; import { ResponseRunner } from '../models/responses/ResponseRunner'; @JsonController('/runners') @@ -83,10 +84,11 @@ export class RunnerController { @Delete('/:id') @ResponseSchema(ResponseRunner) - @ResponseSchema(RunnerNotFoundError, { statusCode: 404 }) + @ResponseSchema(ResponseEmpty, { statusCode: 204 }) + @OnUndefined(204) @OpenAPI({ description: 'Delete a specified runner (if it exists).' }) async remove(@EntityFromParam('id') runner: Runner, @QueryParam("force") force: boolean) { - if (!runner) { throw new RunnerNotFoundError(); } + if (!runner) { return null; } const responseRunner = await this.runnerRepository.findOne(runner, { relations: ['scans', 'group'] }); if (!runner) { diff --git a/src/controllers/RunnerOrganisationController.ts b/src/controllers/RunnerOrganisationController.ts index a0914e3..f9733d5 100644 --- a/src/controllers/RunnerOrganisationController.ts +++ b/src/controllers/RunnerOrganisationController.ts @@ -5,6 +5,7 @@ import { EntityFromBody, EntityFromParam } from 'typeorm-routing-controllers-ext import { RunnerOrganisationHasRunnersError, RunnerOrganisationHasTeamsError, RunnerOrganisationIdsNotMatchingError, RunnerOrganisationNotFoundError } from '../errors/RunnerOrganisationErrors'; import { CreateRunnerOrganisation } from '../models/actions/CreateRunnerOrganisation'; import { RunnerOrganisation } from '../models/entities/RunnerOrganisation'; +import { ResponseEmpty } from '../models/responses/ResponseEmpty'; import { ResponseRunnerOrganisation } from '../models/responses/ResponseRunnerOrganisation'; import { RunnerController } from './RunnerController'; import { RunnerTeamController } from './RunnerTeamController'; @@ -86,12 +87,13 @@ export class RunnerOrganisationController { @Delete('/:id') @ResponseSchema(ResponseRunnerOrganisation) - @ResponseSchema(RunnerOrganisationNotFoundError, { statusCode: 404 }) + @ResponseSchema(ResponseEmpty, { statusCode: 204 }) @ResponseSchema(RunnerOrganisationHasTeamsError, { statusCode: 406 }) @ResponseSchema(RunnerOrganisationHasRunnersError, { statusCode: 406 }) + @OnUndefined(204) @OpenAPI({ description: 'Delete a specified runnerOrganisation (if it exists).' }) async remove(@EntityFromParam('id') organisation: RunnerOrganisation, @QueryParam("force") force: boolean) { - if (!organisation) { throw new RunnerOrganisationNotFoundError() } + if (!organisation) { return null; } let runnerOrganisation = await this.runnerOrganisationRepository.findOne(organisation, { relations: ['address', 'contact', 'runners', 'teams'] }); if (!force) { diff --git a/src/controllers/RunnerTeamController.ts b/src/controllers/RunnerTeamController.ts index be44aac..4f69c36 100644 --- a/src/controllers/RunnerTeamController.ts +++ b/src/controllers/RunnerTeamController.ts @@ -5,6 +5,7 @@ import { EntityFromBody, EntityFromParam } from 'typeorm-routing-controllers-ext import { RunnerTeamHasRunnersError, RunnerTeamIdsNotMatchingError, RunnerTeamNotFoundError } from '../errors/RunnerTeamErrors'; import { CreateRunnerTeam } from '../models/actions/CreateRunnerTeam'; import { RunnerTeam } from '../models/entities/RunnerTeam'; +import { ResponseEmpty } from '../models/responses/ResponseEmpty'; import { ResponseRunnerTeam } from '../models/responses/ResponseRunnerTeam'; import { RunnerController } from './RunnerController'; @@ -86,11 +87,12 @@ export class RunnerTeamController { @Delete('/:id') @ResponseSchema(ResponseRunnerTeam) - @ResponseSchema(RunnerTeamNotFoundError, { statusCode: 404 }) + @ResponseSchema(ResponseEmpty, { statusCode: 204 }) @ResponseSchema(RunnerTeamHasRunnersError, { statusCode: 406 }) + @OnUndefined(204) @OpenAPI({ description: 'Delete a specified runnerTeam (if it exists).' }) async remove(@EntityFromParam('id') team: RunnerTeam, @QueryParam("force") force: boolean) { - if (!team) { throw new RunnerTeamNotFoundError(); } + if (!team) { return null; } let runnerTeam = await this.runnerTeamRepository.findOne(team, { relations: ['parentGroup', 'contact', 'runners'] }); if (!force) { diff --git a/src/controllers/TrackController.ts b/src/controllers/TrackController.ts index bf5fb71..d5fa9b6 100644 --- a/src/controllers/TrackController.ts +++ b/src/controllers/TrackController.ts @@ -5,6 +5,7 @@ import { EntityFromBody, EntityFromParam } from 'typeorm-routing-controllers-ext import { TrackIdsNotMatchingError, TrackNotFoundError } from "../errors/TrackErrors"; import { CreateTrack } from '../models/actions/CreateTrack'; import { Track } from '../models/entities/Track'; +import { ResponseEmpty } from '../models/responses/ResponseEmpty'; import { ResponseTrack } from '../models/responses/ResponseTrack'; @JsonController('/tracks') @@ -74,10 +75,11 @@ export class TrackController { @Delete('/:id') @ResponseSchema(ResponseTrack) - @ResponseSchema(TrackNotFoundError, { statusCode: 404 }) + @ResponseSchema(ResponseEmpty, { statusCode: 204 }) + @OnUndefined(204) @OpenAPI({ description: "Delete a specified track (if it exists)." }) async remove(@EntityFromParam('id') track: Track) { - if (!track) { throw new TrackNotFoundError(); } + if (!track) { return null; } await this.trackRepository.delete(track); return new ResponseTrack(track); diff --git a/src/controllers/UserController.ts b/src/controllers/UserController.ts index b5550a2..a5b3cdd 100644 --- a/src/controllers/UserController.ts +++ b/src/controllers/UserController.ts @@ -6,6 +6,7 @@ import { UserIdsNotMatchingError, UserNotFoundError } from '../errors/UserErrors import { UserGroupNotFoundError } from '../errors/UserGroupErrors'; import { CreateUser } from '../models/actions/CreateUser'; import { User } from '../models/entities/User'; +import { ResponseEmpty } from '../models/responses/ResponseEmpty'; @JsonController('/users') @@ -72,11 +73,12 @@ export class UserController { @Delete('/:id') @ResponseSchema(User) - @ResponseSchema(UserNotFoundError, { statusCode: 404 }) + @ResponseSchema(ResponseEmpty, { statusCode: 204 }) + @OnUndefined(204) @OpenAPI({ description: 'Delete a specified runner (if it exists).' }) async remove(@EntityFromParam('id') user: User) { if (!user) { - throw new UserNotFoundError(); + return null; } await this.userRepository.delete(user); diff --git a/src/controllers/UserGroupController.ts b/src/controllers/UserGroupController.ts index 89ef3b9..1d4bc38 100644 --- a/src/controllers/UserGroupController.ts +++ b/src/controllers/UserGroupController.ts @@ -5,6 +5,7 @@ import { EntityFromBody, EntityFromParam } from 'typeorm-routing-controllers-ext import { UserGroupIdsNotMatchingError, UserGroupNotFoundError } from '../errors/UserGroupErrors'; import { CreateUserGroup } from '../models/actions/CreateUserGroup'; import { UserGroup } from '../models/entities/UserGroup'; +import { ResponseEmpty } from '../models/responses/ResponseEmpty'; @JsonController('/usergroups') @@ -71,11 +72,12 @@ export class UserGroupController { @Delete('/:id') @ResponseSchema(UserGroup) - @ResponseSchema(UserGroupNotFoundError, { statusCode: 404 }) + @ResponseSchema(ResponseEmpty, { statusCode: 204 }) + @OnUndefined(204) @OpenAPI({ description: 'Delete a specified usergroup (if it exists).' }) async remove(@EntityFromParam('id') group: UserGroup) { if (!group) { - throw new UserGroupNotFoundError(); + return null; } await this.userGroupsRepository.delete(group); diff --git a/src/models/responses/ResponseEmpty.ts b/src/models/responses/ResponseEmpty.ts new file mode 100644 index 0000000..e1e3b41 --- /dev/null +++ b/src/models/responses/ResponseEmpty.ts @@ -0,0 +1,6 @@ + +/** + * Defines a empty response object +*/ +export class ResponseEmpty { +}