From cfb7bdb4dc32ce8f7cbb7a26e0015811ea96b56e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E6=B9=AF=E6=9C=AC=20=E9=96=8B?= Date: Fri, 21 Jul 2023 03:06:12 +0000 Subject: [PATCH] =?UTF-8?q?Merged=20PR=20250:=20[Sp13-1=E5=AE=8C=E4=BA=86]?= =?UTF-8?q?Todo=E3=82=92=E4=B8=80=E6=96=89=E9=A7=86=E9=80=90=E3=81=99?= =?UTF-8?q?=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task1774: [Sp13-1完了]Todoを一斉駆逐する](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/1774) - TODOコメントに修正予定Taskを追加 - cors関連の不要な実装を削除 ## レビューポイント - 作業方針は問題ないか - client側は軽微なTODOのみだったので今回対処しなかったが問題ないか ## 動作確認状況 - テストとビルドが通ることを確認 --- .../src/features/accounts/accounts.service.ts | 21 +++++++++---------- .../src/features/files/files.service.ts | 2 +- .../src/features/tasks/tasks.controller.ts | 2 +- .../src/features/tasks/tasks.service.ts | 5 +++-- .../src/features/users/users.service.ts | 8 +++---- .../src/gateways/adb2c/adb2c.service.ts | 5 +++-- .../blobstorage/blobstorage.service.ts | 1 - .../notificationhub.service.ts | 2 +- .../src/gateways/sendgrid/sendgrid.service.ts | 2 +- dictation_server/src/main.ts | 7 +------ .../tasks/tasks.repository.service.ts | 8 +++---- 11 files changed, 29 insertions(+), 34 deletions(-) diff --git a/dictation_server/src/features/accounts/accounts.service.ts b/dictation_server/src/features/accounts/accounts.service.ts index 63c67bb..cad660a 100644 --- a/dictation_server/src/features/accounts/accounts.service.ts +++ b/dictation_server/src/features/accounts/accounts.service.ts @@ -10,7 +10,11 @@ import { } from '../../gateways/adb2c/adb2c.service'; import { Account } from '../../repositories/accounts/entity/account.entity'; import { User } from '../../repositories/users/entity/user.entity'; -import { LICENSE_EXPIRATION_THRESHOLD_DAYS, TIERS, USER_ROLES } from '../../constants'; +import { + LICENSE_EXPIRATION_THRESHOLD_DAYS, + TIERS, + USER_ROLES, +} from '../../constants'; import { makeErrorResponse } from '../../common/error/makeErrorResponse'; import { TypistGroup } from './types/types'; import { GetLicenseSummaryResponse, Typist } from './types/types'; @@ -313,7 +317,8 @@ export class AccountsService { try { // アクセストークンからユーザーIDを取得する - myAccountId = (await this.usersRepository.findUserByExternalId(userId)).account_id; + myAccountId = (await this.usersRepository.findUserByExternalId(userId)) + .account_id; } catch (e) { this.logger.error(`error=${e}`); if (e instanceof UserNotFoundError) { @@ -328,7 +333,7 @@ export class AccountsService { ); } } - + const ramdomPassword = makePassword(); let externalUser: { sub: string } | ConflictError; @@ -367,7 +372,7 @@ export class AccountsService { USER_ROLES.NONE, null, ); - + const from = this.configService.get('MAIL_FROM') || ''; const { subject, text, html } = await this.sendgridService.createMailContentFromEmailConfirmForNormalUser( @@ -375,13 +380,7 @@ export class AccountsService { adminUser.id, email, ); - await this.sendgridService.sendMail( - email, - from, - subject, - text, - html, - ); + await this.sendgridService.sendMail(email, from, subject, text, html); } catch (e) { this.logger.error(`error=${e}`); this.logger.error('create partner account failed'); diff --git a/dictation_server/src/features/files/files.service.ts b/dictation_server/src/features/files/files.service.ts index 92f79c7..188e5a1 100644 --- a/dictation_server/src/features/files/files.service.ts +++ b/dictation_server/src/features/files/files.service.ts @@ -195,7 +195,7 @@ export class FilesService { accountId, country, ); - //TODO コンテナが無ければ作成しているが、アカウント登録時に作成するので本処理は削除予定。 + //TODO [Task2241] コンテナが無ければ作成しているが、アカウント登録時に作成するので本処理は削除予定。 if (!isContainerExist) { await this.blobStorageService.createContainer(accountId, country); } diff --git a/dictation_server/src/features/tasks/tasks.controller.ts b/dictation_server/src/features/tasks/tasks.controller.ts index e71fa42..bbfe15d 100644 --- a/dictation_server/src/features/tasks/tasks.controller.ts +++ b/dictation_server/src/features/tasks/tasks.controller.ts @@ -480,7 +480,7 @@ export class TasksController { ) async changeCheckoutPermission( @Req() req: Request, - //TODOcheckoutやcheckinと同じパスパラメータなので記述方法を統一したい + //TODO [Task2243] checkoutやcheckinと同じパスパラメータなので記述方法を統一したい @Param(`audioFileId`, ParseIntPipe) audioFileId: number, @Body() body: PostCheckoutPermissionRequest, diff --git a/dictation_server/src/features/tasks/tasks.service.ts b/dictation_server/src/features/tasks/tasks.service.ts index 5584860..3207d48 100644 --- a/dictation_server/src/features/tasks/tasks.service.ts +++ b/dictation_server/src/features/tasks/tasks.service.ts @@ -39,7 +39,7 @@ export class TasksService { private readonly adB2cService: AdB2cService, ) {} - // TODO: 引数にAccessTokenがあるのは不適切なのでController側で分解したい + // TODO [Task2244] 引数にAccessTokenがあるのは不適切なのでController側で分解したい async getTasks( accessToken: AccessToken, offset: number, @@ -49,7 +49,8 @@ export class TasksService { direction?: SortDirection, ): Promise<{ tasks: Task[]; total: number }> { const { role, userId } = accessToken; - const roles = role.split(' '); // TODO: Roleを型で定義されているものに修正する + // TODO [Task2244] Roleに型で定義されている値が入っているかをチェックして異常値を弾く実装に修正する + const roles = role.split(' '); // パラメータが省略された場合のデフォルト値: 保存するソート条件の値の初期値と揃える const defaultParamName: TaskListSortableAttribute = 'JOB_NUMBER'; diff --git a/dictation_server/src/features/users/users.service.ts b/dictation_server/src/features/users/users.service.ts index 604ea93..7176bd9 100644 --- a/dictation_server/src/features/users/users.service.ts +++ b/dictation_server/src/features/users/users.service.ts @@ -168,7 +168,7 @@ export class UsersService { //Azure AD B2Cに登録したユーザー情報のID(sub)と受け取った情報を使ってDBにユーザーを登録する let newUser: EntityUser; - // TODO 本来はNULLだが、テーブル定義に誤ってNOTNULLが付いているため、一時的に適当な値を設定 + // TODO [Task2246] 本来はNULLだが、テーブル定義に誤ってNOTNULLが付いているため、一時的に適当な値を設定 const accepted_terms_version = 'xxx'; try { // ユーザ作成 @@ -260,7 +260,7 @@ export class UsersService { await this.usersRepository.updateUserVerified(userId); // メールの送信元を取得 const from = this.configService.get('MAIL_FROM') ?? ''; - // XXX ODMS側が正式にメッセージを決めるまで仮のメール内容とする + // TODO [Task2163] ODMS側が正式にメッセージを決めるまで仮のメール内容とする const subject = 'A temporary password has been issued.'; const text = 'temporary password: ' + ramdomPassword; const domains = this.configService.get('APP_DOMAIN'); @@ -303,7 +303,7 @@ export class UsersService { // 値をマージして定義されたレスポンス通りに返す const users: User[] = []; - // TODO 膨大なループが発生することが見込まれ商用には耐えないので、本実装時に修正予定 + // TODO [Task2002] 膨大なループが発生することが見込まれ商用には耐えないので、本実装時に修正予定 for (let i = 0; i < dbUsers.length; i++) { // Azure AD B2Cからユーザーを取得する const aadb2cUser = await this.adB2cService.getUser( @@ -314,7 +314,7 @@ export class UsersService { user.name = aadb2cUser.displayName; user.role = dbUsers[i].role; user.authorId = dbUsers[i].author_id; - // TODO DBから取得できるようになるため暫定 + // TODO [Task2247] 将来的にはDBから取得できるようになる想定のため暫定的にtypistGroupNameに仮の値を設定 user.typistGroupName = ''; user.email = aadb2cUser.mail; user.emailVerified = dbUsers[i].email_verified; diff --git a/dictation_server/src/gateways/adb2c/adb2c.service.ts b/dictation_server/src/gateways/adb2c/adb2c.service.ts index 75c96db..634fa7e 100644 --- a/dictation_server/src/gateways/adb2c/adb2c.service.ts +++ b/dictation_server/src/gateways/adb2c/adb2c.service.ts @@ -194,7 +194,7 @@ export class AdB2cService { ); /* - TODO 現状の実装だと1リクエストで最大15パラメータまでしか設定できないため、 + TODO [Task2002] 現状の実装だと1リクエストで最大15パラメータまでしか設定できないため、 別タスクでアカウント単位の検索用パラメータを用いて取得するように修正する。 タスク 2002: B2Cからの名前取得をより低コストで行えるように修正する */ @@ -226,7 +226,8 @@ export class AdB2cService { } } } -// TODO 文字列の配列を15要素ずつ区切る(この処理も別タスクで削除予定) + +// TODO [Task2002] 文字列の配列を15要素ずつ区切る(この処理も別タスクで削除予定) const splitArrayInChunksOfFifteen = (arr: string[]): string[][] => { const result: string[][] = []; const chunkSize = 15; // SDKの制限数 diff --git a/dictation_server/src/gateways/blobstorage/blobstorage.service.ts b/dictation_server/src/gateways/blobstorage/blobstorage.service.ts index b7e92b6..7f9181d 100644 --- a/dictation_server/src/gateways/blobstorage/blobstorage.service.ts +++ b/dictation_server/src/gateways/blobstorage/blobstorage.service.ts @@ -25,7 +25,6 @@ export class BlobstorageService { private readonly sharedKeyCredentialAU: StorageSharedKeyCredential; private readonly sharedKeyCredentialEU: StorageSharedKeyCredential; constructor(private readonly configService: ConfigService) { - // TODO リソース作成後に接続情報をKeyVaultに格納し、そこから取得するように修正する this.sharedKeyCredentialUS = new StorageSharedKeyCredential( this.configService.get('STORAGE_ACCOUNT_NAME_US'), this.configService.get('STORAGE_ACCOUNT_KEY_US'), diff --git a/dictation_server/src/gateways/notificationhub/notificationhub.service.ts b/dictation_server/src/gateways/notificationhub/notificationhub.service.ts index 76f251e..8136f88 100644 --- a/dictation_server/src/gateways/notificationhub/notificationhub.service.ts +++ b/dictation_server/src/gateways/notificationhub/notificationhub.service.ts @@ -32,7 +32,7 @@ export class NotificationhubService { reg = createWindowsRegistrationDescription({ channelUri: pnsHandler, tags: [], - // XXX 登録の有効期限を設定したい場合 + // XXX [Task2218] 登録の有効期限を設定したい場合等、本実装を別途Taskで行う //expirationTime: '', }); } else if (pns === 'apns') { diff --git a/dictation_server/src/gateways/sendgrid/sendgrid.service.ts b/dictation_server/src/gateways/sendgrid/sendgrid.service.ts index b64e42b..12d864e 100644 --- a/dictation_server/src/gateways/sendgrid/sendgrid.service.ts +++ b/dictation_server/src/gateways/sendgrid/sendgrid.service.ts @@ -53,7 +53,7 @@ export class SendGridService { * @param email 認証対象のユーザーのメールアドレス * @returns メールのサブジェクトとコンテンツ */ - //TODO 中身が管理ユーザ向けのままなので、修正の必要あり + //TODO [Task2163] 中身が管理ユーザ向けのままなので、修正の必要あり async createMailContentFromEmailConfirmForNormalUser( accountId: number, userId: number, diff --git a/dictation_server/src/main.ts b/dictation_server/src/main.ts index 5bcba7f..21795db 100644 --- a/dictation_server/src/main.ts +++ b/dictation_server/src/main.ts @@ -15,12 +15,7 @@ helmetDirectives['style-src'] = ["'self'", 'https:']; helmetDirectives['report-uri'] = ["'self'"]; async function bootstrap() { const app = await NestFactory.create(AppModule); - //XXX 特定のオリジンからのリクエストは許可する - app.enableCors({ - origin: 'http://localhost:8180', - methods: 'GET,PUT,POST,DELETE,OPTION', - allowedHeaders: 'Origin,Content-Type,Accept,Authorization', - }); + app.use( helmet({ contentSecurityPolicy: { diff --git a/dictation_server/src/repositories/tasks/tasks.repository.service.ts b/dictation_server/src/repositories/tasks/tasks.repository.service.ts index 01809d6..1e207ca 100644 --- a/dictation_server/src/repositories/tasks/tasks.repository.service.ts +++ b/dictation_server/src/repositories/tasks/tasks.repository.service.ts @@ -449,8 +449,8 @@ export class TasksRepositoryService { skip: offset, }); - // TODO: Task内にCheckoutPermissionを含める方法が上手くいかなかった(複雑になりすぎた? 原因未調査)ため、 - // 確実に上手くいく方法としてQueryの分割を行ったが、本来はオブジェクトの構築はTypeORMに一任したい + // TODO [Task2249] Task内にCheckoutPermissionを含める方法が上手くいかなかった(複雑になりすぎた? 原因未調査)ため、 + // 確実に上手くいく方法としてQueryの分割を行ったが、本来はオブジェクトの構築はTypeORMに一任したい const checkoutRepo = entityManager.getRepository(CheckoutPermission); const taskIds = tasks.map((x) => x.id); @@ -638,8 +638,8 @@ export class TasksRepositoryService { skip: offset, }); - // TODO: Task内にCheckoutPermissionを含める方法が上手くいかなかった(複雑になりすぎた? 原因未調査)ため、 - // 確実に上手くいく方法としてQueryの分割を行ったが、本来はオブジェクトの構築はTypeORMに一任したい + // TODO [Task2249] Task内にCheckoutPermissionを含める方法が上手くいかなかった(複雑になりすぎた? 原因未調査)ため、 + // 確実に上手くいく方法としてQueryの分割を行ったが、本来はオブジェクトの構築はTypeORMに一任したい const taskIds = tasks.map((x) => x.id); const permissions = await checkoutRepo.find({ relations: {