From 3523c1f7cf8af95e655bda2cb789a2bf67f90c09 Mon Sep 17 00:00:00 2001 From: Fernando Chavez Date: Thu, 14 Mar 2024 16:16:00 +0100 Subject: [PATCH] create custom error for release actions --- .../server/src/controllers/release-action.ts | 8 +++----- .../content-releases/server/src/services/validation.ts | 9 ++++++++- 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/packages/core/content-releases/server/src/controllers/release-action.ts b/packages/core/content-releases/server/src/controllers/release-action.ts index 7179a73145..89a51b3c47 100644 --- a/packages/core/content-releases/server/src/controllers/release-action.ts +++ b/packages/core/content-releases/server/src/controllers/release-action.ts @@ -14,6 +14,7 @@ import type { } from '../../../shared/contracts/release-actions'; import { getService } from '../utils'; import { RELEASE_ACTION_MODEL_UID } from '../constants'; +import { AlreadyOnReleaseError } from '../services/validation'; const releaseActionController = { async create(ctx: Koa.Context) { @@ -48,11 +49,8 @@ const releaseActionController = { return action; } catch (error) { - if ( - error instanceof errors.ValidationError && - error.message === - `Entry with id ${releaseActionArgs.entry.id} and contentType ${releaseActionArgs.entry.contentType} already exists in release with id ${releaseId}` - ) { + // If the entry is already in the release, we don't want to throw an error, so we catch and ignore it + if (error instanceof AlreadyOnReleaseError) { return null; } diff --git a/packages/core/content-releases/server/src/services/validation.ts b/packages/core/content-releases/server/src/services/validation.ts index 293fa84cf1..a0abf55e9b 100644 --- a/packages/core/content-releases/server/src/services/validation.ts +++ b/packages/core/content-releases/server/src/services/validation.ts @@ -5,6 +5,13 @@ import type { Release, CreateRelease, UpdateRelease } from '../../../shared/cont import type { CreateReleaseAction } from '../../../shared/contracts/release-actions'; import { RELEASE_MODEL_UID } from '../constants'; +export class AlreadyOnReleaseError extends errors.ApplicationError<'AlreadyOnReleaseError'> { + constructor(message: string) { + super(message); + this.name = 'AlreadyOnReleaseError'; + } +} + const createReleaseValidationService = ({ strapi }: { strapi: LoadedStrapi }) => ({ async validateUniqueEntry( releaseId: CreateReleaseAction.Request['params']['releaseId'], @@ -29,7 +36,7 @@ const createReleaseValidationService = ({ strapi }: { strapi: LoadedStrapi }) => ); if (isEntryInRelease) { - throw new errors.ValidationError( + throw new AlreadyOnReleaseError( `Entry with id ${releaseActionArgs.entry.id} and contentType ${releaseActionArgs.entry.contentType} already exists in release with id ${releaseId}` ); }