From 3ebfe4a585b7390837b9b798fa62edb7bae82d1c Mon Sep 17 00:00:00 2001 From: "x.sunamoto.k" Date: Mon, 15 May 2023 06:37:33 +0000 Subject: [PATCH] =?UTF-8?q?Merged=20PR=20103:=20DB=E3=81=AE=E3=83=A6?= =?UTF-8?q?=E3=83=BC=E3=82=B6ID=E3=81=A7=E3=81=AF=E3=81=AA=E3=81=8FAzure?= =?UTF-8?q?=E3=81=AEID=E3=82=92=E6=9D=A1=E4=BB=B6=E3=81=AB=E5=8F=96?= =?UTF-8?q?=E5=BE=97=E3=81=A7=E3=81=8D=E3=82=8B=E3=82=88=E3=81=86=E4=BF=AE?= =?UTF-8?q?=E6=AD=A3?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task1744: DBのユーザIDではなくAzureのIDを条件に取得できるよう修正](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/1744) タスク 1744: DBのユーザIDではなくAzureのIDを条件に取得できるよう修正 ・アクセストークンのIDからアカウントIDを取得する際に使用する関数を「findUserById」から「findUserByExternalId」に変更。 ・ユーザ一覧取得時のDB処理を修正。 ## レビューポイント ・アクセストークンのIDからアカウントIDを取得する際に、斎藤さんがPR93で作成している「findUserByExternalId」を使用しているが問題ないか? ・ユーザ一覧取得時の処理に問題がないか? ## UIの変更 なし ## 動作確認状況 ローカルでのユニットテスト実施済み。 ユーザ作成APIを実行し、ユーザ作成ができることを確認。 ユーザ一覧取得APIを実行し、ユーザ一覧が取得できることを確認。 ## 補足 なし --- .../src/features/users/test/users.service.mock.ts | 7 +++++++ .../src/features/users/users.service.ts | 7 ++++--- .../repositories/users/users.repository.service.ts | 14 ++++++++------ 3 files changed, 19 insertions(+), 9 deletions(-) diff --git a/dictation_server/src/features/users/test/users.service.mock.ts b/dictation_server/src/features/users/test/users.service.mock.ts index a59284a..803014e 100644 --- a/dictation_server/src/features/users/test/users.service.mock.ts +++ b/dictation_server/src/features/users/test/users.service.mock.ts @@ -20,6 +20,7 @@ export type UsersRepositoryMockValue = { findUserById: User | Error; createNormalUser: User | Error; findSameAccountUsers: User[] | Error; + findUserByExternalId: User | Error; }; export type AdB2cMockValue = { @@ -186,6 +187,7 @@ export const makeUsersRepositoryMock = (value: UsersRepositoryMockValue) => { findUserById, createNormalUser, findSameAccountUsers, + findUserByExternalId, } = value; const aIdError = new authorIdError('ER_DUP_ENTRY'); @@ -213,6 +215,10 @@ export const makeUsersRepositoryMock = (value: UsersRepositoryMockValue) => { : jest .fn, []>() .mockResolvedValue(findSameAccountUsers), + findUserByExternalId: + findUserByExternalId instanceof Error + ? jest.fn, []>().mockRejectedValue(findUserByExternalId) + : jest.fn, []>().mockResolvedValue(findUserByExternalId), }; }; @@ -325,5 +331,6 @@ export const makeDefaultUsersRepositoryMockValue = findUserById: newUser, createNormalUser: newUser, findSameAccountUsers: [user1, user2], + findUserByExternalId: newUser, }; }; diff --git a/dictation_server/src/features/users/users.service.ts b/dictation_server/src/features/users/users.service.ts index 317a006..4c96728 100644 --- a/dictation_server/src/features/users/users.service.ts +++ b/dictation_server/src/features/users/users.service.ts @@ -98,12 +98,13 @@ export class UsersService { //アクセストークンからユーザーIDを取得する // TODO アクセストークンの中身が具体的に確定したら、型変換を取り払う必要があるかも this.logger.log(`[IN] ${this.createUser.name}`); - const userId = Number(accessToken.userId); //DBよりアクセス者の所属するアカウントIDを取得する let adminUser: EntityUser; try { - adminUser = await this.usersRepository.findUserById(userId); + adminUser = await this.usersRepository.findUserByExternalId( + accessToken.userId, + ); } catch (e) { throw new HttpException( makeErrorResponse('E009999'), @@ -281,7 +282,7 @@ export class UsersService { // DBから同一アカウントのユーザ一覧を取得する const dbUsers = await this.usersRepository.findSameAccountUsers( - Number(payload.userId), + payload.userId, ); // 値をマージして定義されたレスポンス通りに返す diff --git a/dictation_server/src/repositories/users/users.repository.service.ts b/dictation_server/src/repositories/users/users.repository.service.ts index 8617df0..6e7bdb5 100644 --- a/dictation_server/src/repositories/users/users.repository.service.ts +++ b/dictation_server/src/repositories/users/users.repository.service.ts @@ -165,17 +165,19 @@ export class UsersRepositoryService { /** * 同じアカウントIDを持つユーザーを探す - * @param userId + * @param criteria * @returns User[] */ - async findSameAccountUsers(userId: number): Promise { - const dbUser = await this.dataSource - .getRepository(User) - .findOne({ where: [{ id: userId }] }); + async findSameAccountUsers(criteria: string): Promise { + const dbUser = await this.dataSource.getRepository(User).findOne({ + where: { + external_id: criteria, + }, + }); const dbUsers = await this.dataSource .getRepository(User) - .find({ where: [{ account_id: dbUser.account_id }] }); + .find({ where: { account_id: dbUser.account_id } }); return dbUsers; }