diff --git a/src/modules/item-related/item-rate/domain/usecases/handlers/item-created.handler.ts b/src/modules/item-related/item-rate/domain/usecases/handlers/item-created.handler.ts new file mode 100644 index 0000000..1193c03 --- /dev/null +++ b/src/modules/item-related/item-rate/domain/usecases/handlers/item-created.handler.ts @@ -0,0 +1,43 @@ +import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; +import { EMPTY_UUID } from 'src/core/strings/constants/base.constants'; +import { ItemCreatedEvent } from 'src/modules/item-related/item/domain/entities/event/item-created.event'; +import { SeasonPeriodDataService } from 'src/modules/season-related/season-period/data/services/season-period-data.service'; +import { Not } from 'typeorm'; +import { ItemRateModel } from '../../../data/models/item-rate.model'; +import { ItemRateDataService } from '../../../data/services/item-rate-data.service'; + +@EventsHandler(ItemCreatedEvent) +export class SeasonPeriodHolidayHandler + implements IEventHandler +{ + constructor( + private seasonService: SeasonPeriodDataService, + private dataService: ItemRateDataService, + ) {} + + async handle(event: ItemCreatedEvent) { + const rates = []; + const seasons = await this.seasonService.getManyByOptions({ + where: { + id: Not(EMPTY_UUID), + }, + }); + + const queryRunner = this.dataService + .getRepository() + .manager.connection.createQueryRunner(); + + if (seasons.length) { + for (const season of seasons) { + const rate = new ItemRateModel(); + rate.item_id = event.data.id; + rate.season_period_id = season.id; + + rates.push(rate); + } + } + + // create batch + await this.dataService.createBatch(queryRunner, ItemRateModel, rates); + } +} diff --git a/src/modules/item-related/item-rate/item-rate.module.ts b/src/modules/item-related/item-rate/item-rate.module.ts index 5270a03..c0012e3 100644 --- a/src/modules/item-related/item-rate/item-rate.module.ts +++ b/src/modules/item-related/item-rate/item-rate.module.ts @@ -16,16 +16,24 @@ import { UpdateItemRateManager } from './domain/usecases/managers/update-item-ra import { DetailItemRateManager } from './domain/usecases/managers/detail-item-rate.manager'; import { BatchDeleteItemRateManager } from './domain/usecases/managers/batch-delete-item-rate.manager'; import { ItemRateModel } from './data/models/item-rate.model'; +import { SeasonPeriodHolidayHandler } from './domain/usecases/handlers/item-created.handler'; +import { SeasonPeriodDataService } from 'src/modules/season-related/season-period/data/services/season-period-data.service'; +import { SeasonPeriodModel } from 'src/modules/season-related/season-period/data/models/season-period.model'; @Global() @Module({ imports: [ ConfigModule.forRoot(), - TypeOrmModule.forFeature([ItemRateModel], CONNECTION_NAME.DEFAULT), + TypeOrmModule.forFeature( + [ItemRateModel, SeasonPeriodModel], + CONNECTION_NAME.DEFAULT, + ), CqrsModule, ], controllers: [ItemRateDataController, ItemRateReadController], providers: [ + SeasonPeriodHolidayHandler, + IndexItemRateManager, DetailItemRateManager, CreateItemRateManager, @@ -33,6 +41,7 @@ import { ItemRateModel } from './data/models/item-rate.model'; UpdateItemRateManager, BatchDeleteItemRateManager, + SeasonPeriodDataService, ItemRateDataService, ItemRateReadService, diff --git a/src/modules/season-related/season-period/domain/usecases/season-period-data.orchestrator.ts b/src/modules/season-related/season-period/domain/usecases/season-period-data.orchestrator.ts index d525a16..3c25ef5 100644 --- a/src/modules/season-related/season-period/domain/usecases/season-period-data.orchestrator.ts +++ b/src/modules/season-related/season-period/domain/usecases/season-period-data.orchestrator.ts @@ -46,7 +46,7 @@ export class SeasonPeriodDataOrchestrator extends BaseDataTransactionOrchestrato async update(dataId, data, updatePrice = false): Promise { this.updateManager.setData(dataId, { ...data, - isUpdatePrice: updatePrice + isUpdatePrice: updatePrice, }); this.updateManager.setService(this.serviceData, TABLE_NAME.SEASON_PERIOD); await this.updateManager.execute();