From 917396c97676d29afdc3b21e442ad0e31f2e0093 Mon Sep 17 00:00:00 2001 From: Hongbo Wu Date: Fri, 11 Nov 2022 16:11:09 +0800 Subject: [PATCH] Upsert user personalization in db --- packages/api/src/generated/graphql.ts | 1 + packages/api/src/generated/schema.graphql | 1 + .../resolvers/user_personalization/index.ts | 37 +++++++++++++------ packages/api/src/schema.ts | 1 + 4 files changed, 28 insertions(+), 12 deletions(-) diff --git a/packages/api/src/generated/graphql.ts b/packages/api/src/generated/graphql.ts index edf334694..1eb7b5843 100644 --- a/packages/api/src/generated/graphql.ts +++ b/packages/api/src/generated/graphql.ts @@ -1936,6 +1936,7 @@ export type SetUserPersonalizationError = { }; export enum SetUserPersonalizationErrorCode { + NotFound = 'NOT_FOUND', Unauthorized = 'UNAUTHORIZED' } diff --git a/packages/api/src/generated/schema.graphql b/packages/api/src/generated/schema.graphql index 20658c344..51f50f0a5 100644 --- a/packages/api/src/generated/schema.graphql +++ b/packages/api/src/generated/schema.graphql @@ -1432,6 +1432,7 @@ type SetUserPersonalizationError { } enum SetUserPersonalizationErrorCode { + NOT_FOUND UNAUTHORIZED } diff --git a/packages/api/src/resolvers/user_personalization/index.ts b/packages/api/src/resolvers/user_personalization/index.ts index 54d526012..955dc16d4 100644 --- a/packages/api/src/resolvers/user_personalization/index.ts +++ b/packages/api/src/resolvers/user_personalization/index.ts @@ -3,33 +3,46 @@ import { GetUserPersonalizationResult, MutationSetUserPersonalizationArgs, SetUserPersonalizationError, + SetUserPersonalizationErrorCode, SetUserPersonalizationSuccess, SortOrder, } from '../../generated/graphql' import { authorized } from '../../utils/helpers' import { UserPersonalization } from '../../entity/user_personalization' import { AppDataSource } from '../../server' -import { setClaims } from '../../entity/utils' +import { getRepository, setClaims } from '../../entity/utils' export const setUserPersonalizationResolver = authorized< SetUserPersonalizationSuccess, SetUserPersonalizationError, MutationSetUserPersonalizationArgs ->(async (_, { input }, { claims: { uid } }) => { - const updatedUserPersonalization = - await AppDataSource.transaction( - async (entityManager) => { - await setClaims(entityManager, uid) +>(async (_, { input }, { claims: { uid }, log }) => { + log.info('setUserPersonalizationResolver', { uid, input }) - return entityManager.getRepository(UserPersonalization).save({ - user: { id: uid }, - ...input, - }) - } + const result = await AppDataSource.transaction(async (entityManager) => { + await setClaims(entityManager, uid) + + return entityManager.getRepository(UserPersonalization).upsert( + { + user: { id: uid }, + ...input, + }, + ['user'] ) + }) + + if (result.identifiers.length === 0) { + return { + errorCodes: [SetUserPersonalizationErrorCode.NotFound], + } + } + + const updatedUserPersonalization = await getRepository( + UserPersonalization + ).findOneBy({ id: result.identifiers[0].id as string }) // Cast SortOrder from string to enum - const librarySortOrder = updatedUserPersonalization.librarySortOrder as + const librarySortOrder = updatedUserPersonalization?.librarySortOrder as | SortOrder | null | undefined diff --git a/packages/api/src/schema.ts b/packages/api/src/schema.ts index 74acad69b..1f089b7b4 100755 --- a/packages/api/src/schema.ts +++ b/packages/api/src/schema.ts @@ -989,6 +989,7 @@ const schema = gql` | SetUserPersonalizationError enum SetUserPersonalizationErrorCode { UNAUTHORIZED + NOT_FOUND } type SetUserPersonalizationError { errorCodes: [SetUserPersonalizationErrorCode!]!