Merged PR 103: DBのユーザIDではなくAzureのIDを条件に取得できるよう修正

## 概要
[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を実行し、ユーザ一覧が取得できることを確認。

## 補足
なし
This commit is contained in:
x.sunamoto.k 2023-05-15 06:37:33 +00:00 committed by oura.a
parent c5ebd6ec50
commit 3ebfe4a585
3 changed files with 19 additions and 9 deletions

View File

@ -20,6 +20,7 @@ export type UsersRepositoryMockValue = {
findUserById: User | Error; findUserById: User | Error;
createNormalUser: User | Error; createNormalUser: User | Error;
findSameAccountUsers: User[] | Error; findSameAccountUsers: User[] | Error;
findUserByExternalId: User | Error;
}; };
export type AdB2cMockValue = { export type AdB2cMockValue = {
@ -186,6 +187,7 @@ export const makeUsersRepositoryMock = (value: UsersRepositoryMockValue) => {
findUserById, findUserById,
createNormalUser, createNormalUser,
findSameAccountUsers, findSameAccountUsers,
findUserByExternalId,
} = value; } = value;
const aIdError = new authorIdError('ER_DUP_ENTRY'); const aIdError = new authorIdError('ER_DUP_ENTRY');
@ -213,6 +215,10 @@ export const makeUsersRepositoryMock = (value: UsersRepositoryMockValue) => {
: jest : jest
.fn<Promise<User[] | undefined>, []>() .fn<Promise<User[] | undefined>, []>()
.mockResolvedValue(findSameAccountUsers), .mockResolvedValue(findSameAccountUsers),
findUserByExternalId:
findUserByExternalId instanceof Error
? jest.fn<Promise<void>, []>().mockRejectedValue(findUserByExternalId)
: jest.fn<Promise<User>, []>().mockResolvedValue(findUserByExternalId),
}; };
}; };
@ -325,5 +331,6 @@ export const makeDefaultUsersRepositoryMockValue =
findUserById: newUser, findUserById: newUser,
createNormalUser: newUser, createNormalUser: newUser,
findSameAccountUsers: [user1, user2], findSameAccountUsers: [user1, user2],
findUserByExternalId: newUser,
}; };
}; };

View File

@ -98,12 +98,13 @@ export class UsersService {
//アクセストークンからユーザーIDを取得する //アクセストークンからユーザーIDを取得する
// TODO アクセストークンの中身が具体的に確定したら、型変換を取り払う必要があるかも // TODO アクセストークンの中身が具体的に確定したら、型変換を取り払う必要があるかも
this.logger.log(`[IN] ${this.createUser.name}`); this.logger.log(`[IN] ${this.createUser.name}`);
const userId = Number(accessToken.userId);
//DBよりアクセス者の所属するアカウントIDを取得する //DBよりアクセス者の所属するアカウントIDを取得する
let adminUser: EntityUser; let adminUser: EntityUser;
try { try {
adminUser = await this.usersRepository.findUserById(userId); adminUser = await this.usersRepository.findUserByExternalId(
accessToken.userId,
);
} catch (e) { } catch (e) {
throw new HttpException( throw new HttpException(
makeErrorResponse('E009999'), makeErrorResponse('E009999'),
@ -281,7 +282,7 @@ export class UsersService {
// DBから同一アカウントのユーザ一覧を取得する // DBから同一アカウントのユーザ一覧を取得する
const dbUsers = await this.usersRepository.findSameAccountUsers( const dbUsers = await this.usersRepository.findSameAccountUsers(
Number(payload.userId), payload.userId,
); );
// 値をマージして定義されたレスポンス通りに返す // 値をマージして定義されたレスポンス通りに返す

View File

@ -165,17 +165,19 @@ export class UsersRepositoryService {
/** /**
* IDを持つユーザーを探す * IDを持つユーザーを探す
* @param userId * @param criteria
* @returns User[] * @returns User[]
*/ */
async findSameAccountUsers(userId: number): Promise<User[]> { async findSameAccountUsers(criteria: string): Promise<User[]> {
const dbUser = await this.dataSource const dbUser = await this.dataSource.getRepository(User).findOne({
.getRepository(User) where: {
.findOne({ where: [{ id: userId }] }); external_id: criteria,
},
});
const dbUsers = await this.dataSource const dbUsers = await this.dataSource
.getRepository(User) .getRepository(User)
.find({ where: [{ account_id: dbUser.account_id }] }); .find({ where: { account_id: dbUser.account_id } });
return dbUsers; return dbUsers;
} }