HistoryService: Throw NotInDBError on empty DB result

This adds error handling to getEntryByNote, so it throws 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 16:16:30 +02:00
parent 1a72e3c727
commit 8357f3072c
No known key found for this signature in database
GPG key ID: 185982BA4C42B7C3

View file

@ -69,13 +69,19 @@ export class HistoryService {
* @return {HistoryEntry} the requested history entry * @return {HistoryEntry} the requested history entry
*/ */
private async getEntryByNote(note: Note, user: User): Promise<HistoryEntry> { private async getEntryByNote(note: Note, user: User): Promise<HistoryEntry> {
return await this.historyEntryRepository.findOne({ const entry = await this.historyEntryRepository.findOne({
where: { where: {
note: note, note: note,
user: user, user: user,
}, },
relations: ['note', 'user'], relations: ['note', 'user'],
}); });
if (!entry) {
throw new NotInDBError(
`User '${user.userName}' has no HistoryEntry for Note with id '${note.id}'`,
);
}
return entry;
} }
/** /**
@ -89,13 +95,17 @@ export class HistoryService {
note: Note, note: Note,
user: User, user: User,
): Promise<HistoryEntry> { ): Promise<HistoryEntry> {
let entry = await this.getEntryByNote(note, user); try {
if (!entry) { const entry = await this.getEntryByNote(note, user);
entry = HistoryEntry.create(user, note);
} else {
entry.updatedAt = new Date(); entry.updatedAt = new Date();
}
return await this.historyEntryRepository.save(entry); return await this.historyEntryRepository.save(entry);
} catch (e) {
if (e instanceof NotInDBError) {
const entry = HistoryEntry.create(user, note);
return await this.historyEntryRepository.save(entry);
}
throw e;
}
} }
/** /**
@ -112,11 +122,6 @@ export class HistoryService {
updateDto: HistoryEntryUpdateDto, updateDto: HistoryEntryUpdateDto,
): Promise<HistoryEntry> { ): Promise<HistoryEntry> {
const entry = await this.getEntryByNoteIdOrAlias(noteIdOrAlias, user); const entry = await this.getEntryByNoteIdOrAlias(noteIdOrAlias, user);
if (!entry) {
throw new NotInDBError(
`User '${user.userName}' has no HistoryEntry for Note with id '${noteIdOrAlias}'`,
);
}
entry.pinStatus = updateDto.pinStatus; entry.pinStatus = updateDto.pinStatus;
return await this.historyEntryRepository.save(entry); return await this.historyEntryRepository.save(entry);
} }
@ -130,11 +135,6 @@ export class HistoryService {
*/ */
async deleteHistoryEntry(noteIdOrAlias: string, user: User): Promise<void> { async deleteHistoryEntry(noteIdOrAlias: string, user: User): Promise<void> {
const entry = await this.getEntryByNoteIdOrAlias(noteIdOrAlias, user); const entry = await this.getEntryByNoteIdOrAlias(noteIdOrAlias, user);
if (!entry) {
throw new NotInDBError(
`User '${user.userName}' has no HistoryEntry for Note with id '${noteIdOrAlias}'`,
);
}
await this.historyEntryRepository.remove(entry); await this.historyEntryRepository.remove(entry);
return; return;
} }