From 5a45ff2d0be19649270d1c0b7598600f288113ec Mon Sep 17 00:00:00 2001 From: Philip Molares Date: Tue, 30 Nov 2021 22:26:55 +0100 Subject: [PATCH] feat: add request note decorator This extracts the note inserted with the get note interceptor into the request to be used by the controller service. Signed-off-by: Philip Molares --- src/api/utils/request-note.decorator.ts | 32 +++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 src/api/utils/request-note.decorator.ts diff --git a/src/api/utils/request-note.decorator.ts b/src/api/utils/request-note.decorator.ts new file mode 100644 index 000000000..f10370abe --- /dev/null +++ b/src/api/utils/request-note.decorator.ts @@ -0,0 +1,32 @@ +/* + * SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file) + * + * SPDX-License-Identifier: AGPL-3.0-only + */ +import { + createParamDecorator, + ExecutionContext, + InternalServerErrorException, +} from '@nestjs/common'; +import { Request } from 'express'; + +import { Note } from '../../notes/note.entity'; + +/** + * Extracts the {@link Note} object from a request + * + * Will throw an {@link InternalServerErrorException} if no note is present + */ +// eslint-disable-next-line @typescript-eslint/naming-convention +export const RequestNote = createParamDecorator( + (data: unknown, ctx: ExecutionContext) => { + const request: Request & { note: Note } = ctx.switchToHttp().getRequest(); + if (!request.note) { + // We should have a note here, otherwise something is wrong + throw new InternalServerErrorException( + 'Request is missing a note object', + ); + } + return request.note; + }, +);