diff --git a/src/modules/season-related/season-type/domain/usecases/managers/batch-delete-season-type.manager.ts b/src/modules/season-related/season-type/domain/usecases/managers/batch-delete-season-type.manager.ts index c046507..d000785 100644 --- a/src/modules/season-related/season-type/domain/usecases/managers/batch-delete-season-type.manager.ts +++ b/src/modules/season-related/season-type/domain/usecases/managers/batch-delete-season-type.manager.ts @@ -7,7 +7,11 @@ import { import { SeasonTypeModel } from '../../../data/models/season-type.model'; import { SeasonTypeDeletedEvent } from '../../entities/event/season-type-deleted.event'; import { BatchResult } from 'src/core/response/domain/ok-response.interface'; -import { Injectable } from '@nestjs/common'; +import { + HttpStatus, + Injectable, + UnprocessableEntityException, +} from '@nestjs/common'; @Injectable() export class BatchDeleteSeasonTypeManager extends BaseBatchDeleteManager { @@ -16,6 +20,19 @@ export class BatchDeleteSeasonTypeManager extends BaseBatchDeleteManager { + const relationData = await this.dataServiceFirstOpt.getOneByOptions({ + where: { + season_type_id: data.id, + }, + }); + + if (relationData) { + throw new UnprocessableEntityException({ + statusCode: HttpStatus.UNPROCESSABLE_ENTITY, + message: `Gagagl! data sudah berelasi dengen season period.`, + error: 'Unprocessable Entity', + }); + } return; } diff --git a/src/modules/season-related/season-type/domain/usecases/managers/batch-inactive-season-type.manager.ts b/src/modules/season-related/season-type/domain/usecases/managers/batch-inactive-season-type.manager.ts index 6d6ea72..5bd5248 100644 --- a/src/modules/season-related/season-type/domain/usecases/managers/batch-inactive-season-type.manager.ts +++ b/src/modules/season-related/season-type/domain/usecases/managers/batch-inactive-season-type.manager.ts @@ -7,11 +7,28 @@ import { import { SeasonTypeModel } from '../../../data/models/season-type.model'; import { SeasonTypeChangeStatusEvent } from '../../entities/event/season-type-change-status.event'; import { BatchResult } from 'src/core/response/domain/ok-response.interface'; -import { Injectable } from '@nestjs/common'; +import { + HttpStatus, + Injectable, + UnprocessableEntityException, +} from '@nestjs/common'; @Injectable() export class BatchInactiveSeasonTypeManager extends BaseBatchUpdateStatusManager { - validateData(data: SeasonTypeEntity): Promise { + async validateData(data: SeasonTypeEntity): Promise { + const relationData = await this.dataServiceFirstOpt.getOneByOptions({ + where: { + season_type_id: data.id, + }, + }); + + if (relationData) { + throw new UnprocessableEntityException({ + statusCode: HttpStatus.UNPROCESSABLE_ENTITY, + message: `Gagagl! data sudah berelasi dengen season period.`, + error: 'Unprocessable Entity', + }); + } return; } diff --git a/src/modules/season-related/season-type/domain/usecases/managers/delete-season-type.manager.ts b/src/modules/season-related/season-type/domain/usecases/managers/delete-season-type.manager.ts index deffb5c..b392efc 100644 --- a/src/modules/season-related/season-type/domain/usecases/managers/delete-season-type.manager.ts +++ b/src/modules/season-related/season-type/domain/usecases/managers/delete-season-type.manager.ts @@ -1,4 +1,8 @@ -import { Injectable } from '@nestjs/common'; +import { + HttpStatus, + Injectable, + UnprocessableEntityException, +} from '@nestjs/common'; import { BaseDeleteManager } from 'src/core/modules/domain/usecase/managers/base-delete.manager'; import { SeasonTypeEntity } from '../../entities/season-type.entity'; import { @@ -15,6 +19,19 @@ export class DeleteSeasonTypeManager extends BaseDeleteManager } async validateProcess(): Promise { + const relationData = await this.dataServiceFirstOpt.getOneByOptions({ + where: { + season_type_id: this.dataId, + }, + }); + + if (relationData) { + throw new UnprocessableEntityException({ + statusCode: HttpStatus.UNPROCESSABLE_ENTITY, + message: `Gagagl! data sudah berelasi dengen season period.`, + error: 'Unprocessable Entity', + }); + } return; } diff --git a/src/modules/season-related/season-type/domain/usecases/managers/inactive-season-type.manager.ts b/src/modules/season-related/season-type/domain/usecases/managers/inactive-season-type.manager.ts index a5a1c05..ea2ead8 100644 --- a/src/modules/season-related/season-type/domain/usecases/managers/inactive-season-type.manager.ts +++ b/src/modules/season-related/season-type/domain/usecases/managers/inactive-season-type.manager.ts @@ -1,4 +1,8 @@ -import { Injectable } from '@nestjs/common'; +import { + HttpStatus, + Injectable, + UnprocessableEntityException, +} from '@nestjs/common'; import { BaseUpdateStatusManager } from 'src/core/modules/domain/usecase/managers/base-update-status.manager'; import { SeasonTypeEntity } from '../../entities/season-type.entity'; import { @@ -15,6 +19,20 @@ export class InactiveSeasonTypeManager extends BaseUpdateStatusManager { + const relationData = await this.dataServiceFirstOpt.getOneByOptions({ + where: { + season_type_id: this.dataId, + }, + }); + + if (relationData) { + throw new UnprocessableEntityException({ + statusCode: HttpStatus.UNPROCESSABLE_ENTITY, + message: `Gagagl! data sudah berelasi dengen season period.`, + error: 'Unprocessable Entity', + }); + } + return; } diff --git a/src/modules/season-related/season-type/domain/usecases/season-type-data.orchestrator.ts b/src/modules/season-related/season-type/domain/usecases/season-type-data.orchestrator.ts index 52a07fa..5477cb0 100644 --- a/src/modules/season-related/season-type/domain/usecases/season-type-data.orchestrator.ts +++ b/src/modules/season-related/season-type/domain/usecases/season-type-data.orchestrator.ts @@ -15,6 +15,7 @@ import { BatchInactiveSeasonTypeManager } from './managers/batch-inactive-season import { BatchActiveSeasonTypeManager } from './managers/batch-active-season-type.manager'; import { BatchDeleteSeasonTypeManager } from './managers/batch-delete-season-type.manager'; import { TABLE_NAME } from 'src/core/strings/constants/table.constants'; +import { SeasonPeriodDataService } from 'src/modules/season-related/season-period/data/services/season-period-data.service'; @Injectable() export class SeasonTypeDataOrchestrator extends BaseDataTransactionOrchestrator { @@ -30,6 +31,7 @@ export class SeasonTypeDataOrchestrator extends BaseDataTransactionOrchestrator< private batchConfirmManager: BatchConfirmSeasonTypeManager, private batchInactiveManager: BatchInactiveSeasonTypeManager, private serviceData: SeasonTypeDataService, + private servicePeriodData: SeasonPeriodDataService, ) { super(); } @@ -50,7 +52,11 @@ export class SeasonTypeDataOrchestrator extends BaseDataTransactionOrchestrator< async delete(dataId): Promise { this.deleteManager.setData(dataId); - this.deleteManager.setService(this.serviceData, TABLE_NAME.SEASON_TYPE); + this.deleteManager.setService( + this.serviceData, + TABLE_NAME.SEASON_TYPE, + this.servicePeriodData, + ); await this.deleteManager.execute(); return this.deleteManager.getResult(); } @@ -60,6 +66,7 @@ export class SeasonTypeDataOrchestrator extends BaseDataTransactionOrchestrator< this.batchDeleteManager.setService( this.serviceData, TABLE_NAME.SEASON_TYPE, + this.servicePeriodData, ); await this.batchDeleteManager.execute(); return this.batchDeleteManager.getResult(); @@ -101,7 +108,11 @@ export class SeasonTypeDataOrchestrator extends BaseDataTransactionOrchestrator< async inactive(dataId): Promise { this.inactiveManager.setData(dataId, STATUS.INACTIVE); - this.inactiveManager.setService(this.serviceData, TABLE_NAME.SEASON_TYPE); + this.inactiveManager.setService( + this.serviceData, + TABLE_NAME.SEASON_TYPE, + this.servicePeriodData, + ); await this.inactiveManager.execute(); return this.inactiveManager.getResult(); } @@ -111,6 +122,7 @@ export class SeasonTypeDataOrchestrator extends BaseDataTransactionOrchestrator< this.batchInactiveManager.setService( this.serviceData, TABLE_NAME.SEASON_TYPE, + this.servicePeriodData, ); await this.batchInactiveManager.execute(); return this.batchInactiveManager.getResult(); diff --git a/src/modules/season-related/season-type/season-type.module.ts b/src/modules/season-related/season-type/season-type.module.ts index 5ae1ef3..185e30a 100644 --- a/src/modules/season-related/season-type/season-type.module.ts +++ b/src/modules/season-related/season-type/season-type.module.ts @@ -22,11 +22,16 @@ import { BatchActiveSeasonTypeManager } from './domain/usecases/managers/batch-a import { BatchConfirmSeasonTypeManager } from './domain/usecases/managers/batch-confirm-season-type.manager'; import { BatchInactiveSeasonTypeManager } from './domain/usecases/managers/batch-inactive-season-type.manager'; import { SeasonTypeModel } from './data/models/season-type.model'; +import { SeasonPeriodDataService } from '../season-period/data/services/season-period-data.service'; +import { SeasonPeriodModel } from '../season-period/data/models/season-period.model'; @Module({ imports: [ ConfigModule.forRoot(), - TypeOrmModule.forFeature([SeasonTypeModel], CONNECTION_NAME.DEFAULT), + TypeOrmModule.forFeature( + [SeasonTypeModel, SeasonPeriodModel], + CONNECTION_NAME.DEFAULT, + ), CqrsModule, ], controllers: [SeasonTypeDataController, SeasonTypeReadController], @@ -49,6 +54,7 @@ import { SeasonTypeModel } from './data/models/season-type.model'; SeasonTypeDataOrchestrator, SeasonTypeReadOrchestrator, + SeasonPeriodDataService, ], }) export class SeasonTypeModule {}