RevisionsService: Throw NotInDBError on empty DB result

This adds error handling to various getters, so they throw a
NotInDBError instead of (illegally, according to the type) returning
null.

Signed-off-by: David Mehren <git@herrmehren.de>
This commit is contained in:
David Mehren 2021-04-29 15:03:44 +02:00
parent 3861d4beb4
commit a6e245c551
No known key found for this signature in database
GPG key ID: 185982BA4C42B7C3
2 changed files with 40 additions and 5 deletions

View file

@ -13,6 +13,7 @@ import { RevisionMetadataDto } from './revision-metadata.dto';
import { RevisionDto } from './revision.dto';
import { Revision } from './revision.entity';
import { Note } from '../notes/note.entity';
import { NotInDBError } from '../errors/errors';
@Injectable()
export class RevisionsService {
@ -34,16 +35,22 @@ export class RevisionsService {
}
async getRevision(note: Note, revisionId: number): Promise<Revision> {
return await this.revisionRepository.findOne({
const revision = await this.revisionRepository.findOne({
where: {
id: revisionId,
note: note,
},
});
if (revision === undefined) {
throw new NotInDBError(
`Revision with ID ${revisionId} for note ${note.id} not found.`,
);
}
return revision;
}
async getLatestRevision(noteId: string): Promise<Revision> {
return await this.revisionRepository.findOne({
const revision = await this.revisionRepository.findOne({
where: {
note: noteId,
},
@ -52,10 +59,14 @@ export class RevisionsService {
id: 'DESC',
},
});
if (revision === undefined) {
throw new NotInDBError(`Revision for note ${noteId} not found.`);
}
return revision;
}
async getFirstRevision(noteId: string): Promise<Revision> {
return await this.revisionRepository.findOne({
const revision = await this.revisionRepository.findOne({
where: {
note: noteId,
},
@ -63,6 +74,10 @@ export class RevisionsService {
createdAt: 'ASC',
},
});
if (revision === undefined) {
throw new NotInDBError(`Revision for note ${noteId} not found.`);
}
return revision;
}
toRevisionMetadataDto(revision: Revision): RevisionMetadataDto {