diff --git a/dictation_server/src/gateways/blobstorage/blobstorage.service.ts b/dictation_server/src/gateways/blobstorage/blobstorage.service.ts index a66395d..0c5d6af 100644 --- a/dictation_server/src/gateways/blobstorage/blobstorage.service.ts +++ b/dictation_server/src/gateways/blobstorage/blobstorage.service.ts @@ -83,6 +83,49 @@ export class BlobstorageService { ); } } + + /** + * 指定されたコンテナを削除します。(コンテナが存在しない場合、何もせず終了します) + * @param context + * @param accountId + * @param country + */ + async deleteContainer( + context: Context, + accountId: number, + country: string, + ): Promise { + this.logger.log( + `[IN] [${context.trackingId}] ${this.deleteContainer.name}`, + ); + + try { + // 国に応じたリージョンでコンテナ名を指定してClientを取得 + const containerClient = this.getContainerClient(accountId, country); + const { succeeded, errorCode, date } = + await containerClient.deleteIfExists(); + this.logger.log( + `succeeded: ${succeeded}, errorCode: ${errorCode}, date: ${date}`, + ); + + // 失敗時、コンテナが存在しない場合以外はエラーとして例外をスローする + // コンテナ不在の場合のエラーコードは「ContainerNotFound」以下を参照 + // https://learn.microsoft.com/ja-jp/rest/api/storageservices/blob-service-error-codes + if (!succeeded && errorCode !== 'ContainerNotFound') { + throw new Error( + `delete blob container failed. succeeded: ${succeeded}, errorCode: ${errorCode}, date: ${date}`, + ); + } + } catch (e) { + this.logger.error(`error=${e}`); + throw e; + } finally { + this.logger.log( + `[OUT] [${context.trackingId}] ${this.deleteContainer.name}`, + ); + } + } + /** * Containers exists * @param country