From f47a686bac1b678f1433e3d5db38cb70675abd92 Mon Sep 17 00:00:00 2001 From: Kentaro Fukunaga Date: Fri, 30 Jun 2023 08:30:29 +0000 Subject: [PATCH] =?UTF-8?q?Merged=20PR=20196:=20=E9=9F=B3=E5=A3=B0?= =?UTF-8?q?=E3=83=95=E3=82=A1=E3=82=A4=E3=83=AB=E3=82=A2=E3=83=83=E3=83=97?= =?UTF-8?q?=E3=83=AD=E3=83=BC=E3=83=89=E6=99=82=E3=81=AE=E3=82=A2=E3=83=83?= =?UTF-8?q?=E3=83=97=E3=83=AD=E3=83=BC=E3=83=89=E5=85=88URL=E3=81=AB?= =?UTF-8?q?=E3=83=A6=E3=83=BC=E3=82=B6=E3=83=BCID=E3=82=92=E8=BF=BD?= =?UTF-8?q?=E5=8A=A0=E3=81=99=E3=82=8B?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit ## 概要 [Task2101: 音声ファイルアップロード時のアップロード先URLにユーザーIDを追加する](https://paruru.nds-tyo.co.jp:8443/tfs/ReciproCollection/fa4924a4-d079-4fab-9fb5-a9a11eb205f0/_workitems/edit/2101) - 音声ファイルアップロード先URLにユーザーIDを含めるのを、ODMSCloud側で実施するよう修正しました - URLの構築はURLオブジェクトを利用するのが安全であるため、リファクタしました。 ## レビューポイント - 修正方針は妥当か ## 動作確認状況 - ローカルで確認 - 返却されたURLをもとに、ODMSCloudツールから音声ファイルアップロードできるところまで確認しました --- .../src/features/files/files.service.ts | 11 ++++++----- .../gateways/blobstorage/blobstorage.service.ts | 14 +++++++++++--- 2 files changed, 17 insertions(+), 8 deletions(-) diff --git a/dictation_server/src/features/files/files.service.ts b/dictation_server/src/features/files/files.service.ts index 7cc1de7..6ddd5b3 100644 --- a/dictation_server/src/features/files/files.service.ts +++ b/dictation_server/src/features/files/files.service.ts @@ -151,14 +151,14 @@ export class FilesService { //DBから国情報とアカウントIDを取得する let accountId: number; let country: string; + let userId: number; try { const user = await this.usersRepository.findUserByExternalId( token.userId, ); - if (user.account) { - accountId = user.account.id; - country = user.account.country; - } + accountId = user.account.id; + userId = user.id; + country = user.account.country; } catch (e) { this.logger.error(`error=${e}`); throw new HttpException( @@ -173,7 +173,7 @@ export class FilesService { accountId, country, ); - //TODO コンテナが無ければ作成 + //TODO コンテナが無ければ作成しているが、アカウント登録時に作成するので本処理は削除予定。 if (!isContainerExist) { await this.blobStorageService.createContainer(accountId, country); } @@ -189,6 +189,7 @@ export class FilesService { // SASトークン発行 const url = await this.blobStorageService.publishUploadSas( accountId, + userId, country, ); return url; diff --git a/dictation_server/src/gateways/blobstorage/blobstorage.service.ts b/dictation_server/src/gateways/blobstorage/blobstorage.service.ts index 32081f5..824ce13 100644 --- a/dictation_server/src/gateways/blobstorage/blobstorage.service.ts +++ b/dictation_server/src/gateways/blobstorage/blobstorage.service.ts @@ -84,12 +84,17 @@ export class BlobstorageService { } /** - * Publishs upload sas + * SASトークン付きのBlobStorageアップロードURLを生成し返却します * @param accountId + * @param userId * @param country * @returns upload sas */ - async publishUploadSas(accountId: number, country: string): Promise { + async publishUploadSas( + accountId: number, + userId: number, + country: string, + ): Promise { this.logger.log(`[IN] ${this.publishUploadSas.name}`); let containerClient: ContainerClient; let sharedKeyCredential: StorageSharedKeyCredential; @@ -126,7 +131,10 @@ export class BlobstorageService { sharedKeyCredential, ); - return `${containerClient.url}?${sasToken}`; + const url = new URL(containerClient.url); + url.pathname += `/${userId}`; + url.search = `${sasToken}`; + return url.toString(); } /**