diff --git a/src/notes/get-note.pipe.ts b/src/notes/get-note.pipe.ts new file mode 100644 index 000000000..c8cdd4cd5 --- /dev/null +++ b/src/notes/get-note.pipe.ts @@ -0,0 +1,43 @@ +/* + * SPDX-FileCopyrightText: 2021 The HedgeDoc developers (see AUTHORS file) + * + * SPDX-License-Identifier: AGPL-3.0-only + */ +import { + ArgumentMetadata, + BadRequestException, + Injectable, + NotFoundException, + PipeTransform, +} from '@nestjs/common'; + +import { ForbiddenIdError, NotInDBError } from '../errors/errors'; +import { ConsoleLoggerService } from '../logger/console-logger.service'; +import { Note } from './note.entity'; +import { NotesService } from './notes.service'; + +@Injectable() +export class GetNotePipe implements PipeTransform> { + constructor( + private readonly logger: ConsoleLoggerService, + private noteService: NotesService, + ) { + this.logger.setContext(GetNotePipe.name); + } + + async transform(noteIdOrAlias: string, _: ArgumentMetadata): Promise { + let note: Note; + try { + note = await this.noteService.getNoteByIdOrAlias(noteIdOrAlias); + } catch (e) { + if (e instanceof NotInDBError) { + throw new NotFoundException(e.message); + } + if (e instanceof ForbiddenIdError) { + throw new BadRequestException(e.message); + } + throw e; + } + return note; + } +}