From 40c92dacd1e03fd596a83c73f0922785d4c882c6 Mon Sep 17 00:00:00 2001 From: Aswin Ashar Abdullah Date: Mon, 8 Jul 2024 11:58:48 +0700 Subject: [PATCH] fix(SPG-595) Pemesanan - Penyesuaian flow booking --- .../managers/get-current-period.manager.ts | 81 +++++++++++++++++++ .../season-period-read.orchestrator.ts | 13 ++- .../season-period-read.controller.ts | 5 ++ .../season-period/season-period.module.ts | 2 + 4 files changed, 100 insertions(+), 1 deletion(-) create mode 100644 src/modules/season-related/season-period/domain/usecases/managers/get-current-period.manager.ts diff --git a/src/modules/season-related/season-period/domain/usecases/managers/get-current-period.manager.ts b/src/modules/season-related/season-period/domain/usecases/managers/get-current-period.manager.ts new file mode 100644 index 0000000..cdf852b --- /dev/null +++ b/src/modules/season-related/season-period/domain/usecases/managers/get-current-period.manager.ts @@ -0,0 +1,81 @@ +import { Injectable } from '@nestjs/common'; +import { BaseIndexManager } from 'src/core/modules/domain/usecase/managers/base-index.manager'; +import { SeasonPeriodEntity } from '../../entities/season-period.entity'; +import { SelectQueryBuilder } from 'typeorm'; +import { + Param, + RelationParam, +} from 'src/core/modules/domain/entities/base-filter.entity'; + +@Injectable() +export class CurrentSeasonPeriodManager extends BaseIndexManager { + async prepareData(): Promise { + return; + } + + async beforeProcess(): Promise { + return; + } + + async afterProcess(): Promise { + Object.assign(this.result, { + data: this.result.data.sort((a, b) => a.priority - b.priority) + }) + return; + } + + get relations(): RelationParam { + return { + // relation only join (for query purpose) + joinRelations: ['season_type'], + + // relation join and select (relasi yang ingin ditampilkan), + selectRelations: [], + + // relation yang hanya ingin dihitung (akan return number) + countRelations: [], + }; + } + + get selects(): string[] { + return [ + `${ this.tableName }.id`, + `${ this.tableName }.priority`, + `${ this.tableName }.created_at`, + `${ this.tableName }.creator_name`, + `${ this.tableName }.editor_name`, + `${ this.tableName }.updated_at`, + `${ this.tableName }.status`, + `${ this.tableName }.start_date`, + `${ this.tableName }.end_date`, + `${ this.tableName }.days`, + `${ this.tableName }.holiday_name`, + + 'season_type.id', + 'season_type.name', + ]; + } + + get specificFilter(): Param[] { + return [ + { + cols: `${ this.tableName }.holiday_name`, + data: this.filterParam.holiday_names, + }, + ]; + } + + setQueryFilter( + queryBuilder: SelectQueryBuilder, + ): SelectQueryBuilder { + queryBuilder.andWhere( + `${ this.tableName }.start_date BETWEEN :from AND :to`, + { + from: new Date().toLocaleDateString(), + to: new Date().toLocaleDateString(), + }, + ); + + return queryBuilder; + } +} diff --git a/src/modules/season-related/season-period/domain/usecases/season-period-read.orchestrator.ts b/src/modules/season-related/season-period/domain/usecases/season-period-read.orchestrator.ts index 69524cb..83beed2 100644 --- a/src/modules/season-related/season-period/domain/usecases/season-period-read.orchestrator.ts +++ b/src/modules/season-related/season-period/domain/usecases/season-period-read.orchestrator.ts @@ -8,8 +8,9 @@ import { DetailSeasonPeriodManager } from './managers/detail-season-period.manag import { TABLE_NAME } from 'src/core/strings/constants/table.constants'; import { IndexSeasonPeriodeItemManager } from './managers/index-season-period-item.manager'; import { ItemRateEntity } from 'src/modules/item-related/item-rate/domain/entities/item-rate.entity'; -import { FilterItemRateDto } from 'src/modules/item-related/item-rate/infrastructure/dto/filter-item-rate.dto'; import { ItemRateReadService } from 'src/modules/item-related/item-rate/data/services/item-rate-read.service'; +import { CurrentSeasonPeriodManager } from './managers/get-current-period.manager'; +import { FilterSeasonPeriodDto } from '../../infrastructure/dto/filter-season-period.dto'; @Injectable() export class SeasonPeriodReadOrchestrator extends BaseReadOrchestrator { @@ -17,6 +18,7 @@ export class SeasonPeriodReadOrchestrator extends BaseReadOrchestrator { + const params = new FilterSeasonPeriodDto(); + this.currentPeriodManager.setFilterParam(params); + this.currentPeriodManager.setService(this.serviceData, TABLE_NAME.SEASON_PERIOD); + await this.currentPeriodManager.execute(); + const data = this.currentPeriodManager.getResult(); + return data.data[0] + } + async indexItem(params): Promise> { this.indexItemManager.setFilterParam(params); this.indexItemManager.setService( diff --git a/src/modules/season-related/season-period/infrastructure/season-period-read.controller.ts b/src/modules/season-related/season-period/infrastructure/season-period-read.controller.ts index 3c9a3a8..5c2bde6 100644 --- a/src/modules/season-related/season-period/infrastructure/season-period-read.controller.ts +++ b/src/modules/season-related/season-period/infrastructure/season-period-read.controller.ts @@ -25,6 +25,11 @@ export class SeasonPeriodReadController { return await this.orchestrator.index(params); } + @Get('current-period') + async currentPeriod(): Promise { + return await this.orchestrator.currentPeriod(); + } + @Get(':id') async detail(@Param('id') id: string): Promise { return await this.orchestrator.detail(id); diff --git a/src/modules/season-related/season-period/season-period.module.ts b/src/modules/season-related/season-period/season-period.module.ts index 7351a78..6adce88 100644 --- a/src/modules/season-related/season-period/season-period.module.ts +++ b/src/modules/season-related/season-period/season-period.module.ts @@ -28,6 +28,7 @@ import { ItemRateModel } from 'src/modules/item-related/item-rate/data/models/it import { ItemRateReadService } from 'src/modules/item-related/item-rate/data/services/item-rate-read.service'; import { SeasonPeriodPriceUpdatedHandler } from './domain/usecases/handlers/season-period-price-updated.handler'; import { UpdateSeasonPeriodPriceManager } from './domain/usecases/managers/update-season-period-price.manager'; +import { CurrentSeasonPeriodManager } from './domain/usecases/managers/get-current-period.manager'; @Module({ imports: [ @@ -57,6 +58,7 @@ import { UpdateSeasonPeriodPriceManager } from './domain/usecases/managers/updat BatchActiveSeasonPeriodManager, BatchConfirmSeasonPeriodManager, BatchInactiveSeasonPeriodManager, + CurrentSeasonPeriodManager, SeasonPeriodDataService, SeasonPeriodReadService,