From ee979594a7f8a0be8eab0d123ebc58d4cc64e389 Mon Sep 17 00:00:00 2001 From: James Brooks <12275865+jamesobrooks@users.noreply.github.com> Date: Wed, 16 Oct 2024 11:55:38 -0500 Subject: [PATCH] Handle errors from Cosmos better Co-authored-by: Fritz Madden <96319835+fmaddenflx@users.noreply.github.com> Co-authored-by: Arthur Morrow <133667008+amorrow-flexion@users.noreply.github.com> --- .../user-session-cache.cosmosdb.repository.ts | 11 ++++++++++- .../lib/use-cases/user-session/user-session.ts | 15 +++++++++------ 2 files changed, 19 insertions(+), 7 deletions(-) diff --git a/backend/functions/lib/adapters/gateways/user-session-cache.cosmosdb.repository.ts b/backend/functions/lib/adapters/gateways/user-session-cache.cosmosdb.repository.ts index 51b06bd34..ad152c917 100644 --- a/backend/functions/lib/adapters/gateways/user-session-cache.cosmosdb.repository.ts +++ b/backend/functions/lib/adapters/gateways/user-session-cache.cosmosdb.repository.ts @@ -5,6 +5,8 @@ import { CamsSession } from '../../../../../common/src/cams/session'; import { UserSessionCacheRepository } from './user-session-cache.repository'; import { UnauthorizedError } from '../../common-errors/unauthorized-error'; import { CamsJwtClaims } from '../../../../../common/src/cams/jwt'; +import { getCamsError } from '../../common-errors/error-utilities'; +import { isConflictError } from '../../use-cases/user-session/user-session'; const MODULE_NAME: string = 'COSMOS_DB_REPOSITORY_USER_SESSION_CACHE'; const CONTAINER_NAME: string = 'user-session-cache'; @@ -38,7 +40,14 @@ export class UserSessionCacheCosmosDbRepository implements UserSessionCacheRepos ], }; - const cached = await this.repo.query(context, querySpec); + let cached; + try { + cached = await this.repo.query(context, querySpec); + } catch (error) { + if (isConflictError(error)) throw error; + throw getCamsError(error, MODULE_NAME); + } + if (cached && cached.length === 1) { return toCamsSession(cached[0]); } else { diff --git a/backend/functions/lib/use-cases/user-session/user-session.ts b/backend/functions/lib/use-cases/user-session/user-session.ts index 456cc67e9..3926e768e 100644 --- a/backend/functions/lib/use-cases/user-session/user-session.ts +++ b/backend/functions/lib/use-cases/user-session/user-session.ts @@ -85,16 +85,19 @@ export class UserSessionUseCase { await sessionCacheRepository.put(context, session); return session; - } catch (originalError) { - if (isConflictError(originalError)) { + } catch (error) { + const isConflict = error.originalError + ? isConflictError(error.originalError) + : isConflictError(error); + if (isConflict) { return await sessionCacheRepository.get(context, token); } - throw isCamsError(originalError) - ? originalError + throw isCamsError(error) + ? error : new UnauthorizedError(MODULE_NAME, { - message: originalError.message, - originalError, + message: error.message, + originalError: error, }); } }