import { HttpException, HttpStatus, Injectable, Logger } from "@nestjs/common"; import { DeleteRepositoryService } from "../../repositories/delete/delete.repository.service"; import { makeErrorResponse } from "../../common/errors/makeErrorResponse"; import { AdB2cService } from "../../gateways/adb2c/adb2c.service"; import { BlobstorageService } from "../../gateways/blobstorage/blobstorage.service"; @Injectable() export class DeleteService { private readonly logger = new Logger(DeleteService.name); constructor( private readonly deleteRepositoryService: DeleteRepositoryService, private readonly blobstorageService: BlobstorageService, private readonly adB2cService: AdB2cService ) {} /** * データを削除する * @returns data */ async deleteData(): Promise { this.logger.log(`[IN] ${this.deleteData.name}`); try { // BlobStorageからデータを削除する await this.blobstorageService.deleteContainers(); // ADB2Cからユーザ情報を取得する const users = await this.adB2cService.getUsers(); const externalIds = users.map((user) => user.id); await this.adB2cService.deleteUsers(externalIds); // データベースからデータを削除する await this.deleteRepositoryService.deleteData(); // AutoIncrementの値をリセットする await this.deleteRepositoryService.resetAutoIncrement(); } catch (e) { this.logger.error(`error=${e}`); if (e instanceof Error) { switch (e.constructor) { default: throw new HttpException( makeErrorResponse("E009999"), HttpStatus.INTERNAL_SERVER_ERROR ); } } throw new HttpException( makeErrorResponse("E009999"), HttpStatus.INTERNAL_SERVER_ERROR ); } finally { this.logger.log(`[OUT] ${this.deleteData.name}`); } } }