diff --git a/packages/revisions/src/Domain/UseCase/Transition/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser.spec.ts b/packages/revisions/src/Domain/UseCase/Transition/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser.spec.ts index 322cdc4b0..4e6195499 100644 --- a/packages/revisions/src/Domain/UseCase/Transition/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser.spec.ts +++ b/packages/revisions/src/Domain/UseCase/Transition/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser.spec.ts @@ -175,7 +175,7 @@ describe('TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser', () => { expect(logger.error).toHaveBeenCalledTimes(1) expect(logger.error).toHaveBeenCalledWith( - 'Failed to clean up primary database revisions for user 00000000-0000-0000-0000-000000000000: error', + 'Failed to clean up primary database revisions for user 00000000-0000-0000-0000-000000000000: Errored when deleting revisions for user 00000000-0000-0000-0000-000000000000: error', ) }) }) @@ -220,12 +220,32 @@ describe('TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser', () => { }) expect(result.isFailed()).toBeTruthy() - expect(result.getError()).toEqual('error') + expect(result.getError()).toEqual( + 'Errored when migrating revisions for user 00000000-0000-0000-0000-000000000000: error', + ) expect((secondaryRevisionRepository as RevisionRepositoryInterface).removeByUserUuid).toHaveBeenCalledTimes(1) expect(primaryRevisionRepository.removeByUserUuid).not.toHaveBeenCalled() }) + it('should return an error for a specific revision if it errors when saving to secondary database', async () => { + ;(secondaryRevisionRepository as RevisionRepositoryInterface).save = jest + .fn() + .mockResolvedValueOnce(true) + .mockRejectedValueOnce(new Error('error')) + + const useCase = createUseCase() + + const result = await useCase.execute({ + userUuid: '84c0f8e8-544a-4c7e-9adf-26209303bc1d', + }) + + expect(result.isFailed()).toBeTruthy() + expect(result.getError()).toEqual( + 'Errored when saving revision 00000000-0000-0000-0000-000000000001 to secondary database: error', + ) + }) + it('should log an error if deleting Revisions from secondary database fails upon migration failure', async () => { primaryRevisionRepository.findByUserUuid = jest .fn() @@ -245,7 +265,7 @@ describe('TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser', () => { expect(logger.error).toHaveBeenCalledTimes(1) expect(logger.error).toHaveBeenCalledWith( - 'Failed to clean up secondary database revisions for user 00000000-0000-0000-0000-000000000000: error', + 'Failed to clean up secondary database revisions for user 00000000-0000-0000-0000-000000000000: Errored when deleting revisions for user 00000000-0000-0000-0000-000000000000: error', ) }) @@ -273,7 +293,7 @@ describe('TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser', () => { expect(logger.error).toHaveBeenCalledTimes(1) expect(logger.error).toHaveBeenCalledWith( - 'Failed to clean up secondary database revisions for user 00000000-0000-0000-0000-000000000000: error', + 'Failed to clean up secondary database revisions for user 00000000-0000-0000-0000-000000000000: Errored when deleting revisions for user 00000000-0000-0000-0000-000000000000: error', ) }) @@ -368,7 +388,7 @@ describe('TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser', () => { }) expect(result.isFailed()).toBeTruthy() - expect(result.getError()).toEqual('error') + expect(result.getError()).toEqual('Errored when checking integrity between primary and secondary database: error') expect(primaryRevisionRepository.removeByUserUuid).not.toHaveBeenCalled() expect((secondaryRevisionRepository as RevisionRepositoryInterface).removeByUserUuid).toHaveBeenCalledTimes(1) diff --git a/packages/revisions/src/Domain/UseCase/Transition/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser.ts b/packages/revisions/src/Domain/UseCase/Transition/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser.ts index c9c7e1b9b..a52d55b50 100644 --- a/packages/revisions/src/Domain/UseCase/Transition/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser.ts +++ b/packages/revisions/src/Domain/UseCase/Transition/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser/TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser.ts @@ -86,16 +86,24 @@ export class TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser implements const revisions = await this.primaryRevisionsRepository.findByUserUuid(query) for (const revision of revisions) { - const didSave = await (this.secondRevisionsRepository as RevisionRepositoryInterface).save(revision) - if (!didSave) { - return Result.fail(`Failed to save revision ${revision.id.toString()} to secondary database`) + try { + const didSave = await (this.secondRevisionsRepository as RevisionRepositoryInterface).save(revision) + if (!didSave) { + return Result.fail(`Failed to save revision ${revision.id.toString()} to secondary database`) + } + } catch (error) { + return Result.fail( + `Errored when saving revision ${revision.id.toString()} to secondary database: ${ + (error as Error).message + }`, + ) } } } return Result.ok() } catch (error) { - return Result.fail((error as Error).message) + return Result.fail(`Errored when migrating revisions for user ${userUuid.value}: ${(error as Error).message}`) } } @@ -108,7 +116,7 @@ export class TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser implements return Result.ok() } catch (error) { - return Result.fail((error as Error).message) + return Result.fail(`Errored when deleting revisions for user ${userUuid.value}: ${(error as Error).message}`) } } @@ -165,7 +173,9 @@ export class TransitionRevisionsFromPrimaryToSecondaryDatabaseForUser implements return Result.ok() } catch (error) { - return Result.fail((error as Error).message) + return Result.fail( + `Errored when checking integrity between primary and secondary database: ${(error as Error).message}`, + ) } } }