From 41e70c06550fa4d45c30350a0e988098fb567ae4 Mon Sep 17 00:00:00 2001 From: Firman Ramdhani <33869609+firmanramdhani@users.noreply.github.com> Date: Fri, 4 Jul 2025 14:07:13 +0700 Subject: [PATCH] feat(SPG-1124): add feature get scheduling active --- .../strings/constants/module.constants.ts | 2 ++ .../data-scheduling/data-scheduling.module.ts | 6 ++-- .../domain/entities/data-scheduling.entity.ts | 4 +++ .../create-data-scheduling.manager.ts | 2 ++ .../data-scheduling-default.manager.ts | 29 ++++++++++++++-- .../data-scheduling-data.controller.ts | 34 +++++++++++++++---- .../dto/filter-data-scheduling.dto.ts | 6 ++++ 7 files changed, 73 insertions(+), 10 deletions(-) diff --git a/src/core/strings/constants/module.constants.ts b/src/core/strings/constants/module.constants.ts index f07635c..912eae8 100644 --- a/src/core/strings/constants/module.constants.ts +++ b/src/core/strings/constants/module.constants.ts @@ -35,4 +35,6 @@ export enum MODULE_NAME { OTP_VERIFIER = 'otp-verifier', DATA_SCHEDULING = 'data-scheduling', DATA_SCHEDULING_DEFAULT = 'data-scheduling-default', + DATA_SCHEDULING_ACTIVE = 'data-scheduling-active', + DATA_SCHEDULING_SETUP = 'data-scheduling-setup', } diff --git a/src/modules/configuration/data-scheduling/data-scheduling.module.ts b/src/modules/configuration/data-scheduling/data-scheduling.module.ts index c587598..7e0dd21 100644 --- a/src/modules/configuration/data-scheduling/data-scheduling.module.ts +++ b/src/modules/configuration/data-scheduling/data-scheduling.module.ts @@ -7,6 +7,7 @@ import { DataSchedulingReadService } from './data/services/data-scheduling-read. import { DataSchedulingReadController } from './infrastructure/data-scheduling-read.controller'; import { DataSchedulingReadOrchestrator } from './domain/usecases/data-scheduling-read.orchestrator'; import { + DataSchedulingActiveController, DataSchedulingDataController, DataSchedulingDefaultController, DataSchedulingSetupController, @@ -27,7 +28,7 @@ import { BatchConfirmDataSchedulingManager } from './domain/usecases/managers/ba import { BatchInactiveDataSchedulingManager } from './domain/usecases/managers/batch-inactive-data-scheduling.manager'; import { DataSchedulingModel } from './data/models/data-scheduling.model'; import { DataSchedulingDefaultModel } from './data/models/data-scheduling-default.model'; -import { DataSchedulingDefaultManager } from './domain/usecases/managers/data-scheduling-default.manager'; +import { DataSchedulingManager } from './domain/usecases/managers/data-scheduling-default.manager'; @Module({ imports: [ @@ -42,6 +43,7 @@ import { DataSchedulingDefaultManager } from './domain/usecases/managers/data-sc DataSchedulingDataController, DataSchedulingReadController, DataSchedulingDefaultController, + DataSchedulingActiveController, DataSchedulingSetupController, ], providers: [ @@ -64,7 +66,7 @@ import { DataSchedulingDefaultManager } from './domain/usecases/managers/data-sc DataSchedulingDataOrchestrator, DataSchedulingReadOrchestrator, - DataSchedulingDefaultManager, + DataSchedulingManager, ], }) export class DataSchedulingModule {} diff --git a/src/modules/configuration/data-scheduling/domain/entities/data-scheduling.entity.ts b/src/modules/configuration/data-scheduling/domain/entities/data-scheduling.entity.ts index 49b0e5b..9733866 100644 --- a/src/modules/configuration/data-scheduling/domain/entities/data-scheduling.entity.ts +++ b/src/modules/configuration/data-scheduling/domain/entities/data-scheduling.entity.ts @@ -11,3 +11,7 @@ export interface DataSchedulingEntity extends BaseStatusEntity { export interface DataSchedulingDefaultEntity extends BaseEntity { default_value: number; } + +export interface DataSchedulingActiveEntity { + value: number; +} diff --git a/src/modules/configuration/data-scheduling/domain/usecases/managers/create-data-scheduling.manager.ts b/src/modules/configuration/data-scheduling/domain/usecases/managers/create-data-scheduling.manager.ts index f821cb5..1a952dd 100644 --- a/src/modules/configuration/data-scheduling/domain/usecases/managers/create-data-scheduling.manager.ts +++ b/src/modules/configuration/data-scheduling/domain/usecases/managers/create-data-scheduling.manager.ts @@ -10,6 +10,7 @@ import { BaseCreateManager } from 'src/core/modules/domain/usecase/managers/base import { DataSchedulingCreatedEvent } from '../../entities/event/data-scheduling-created.event'; import { encryptionTotal } from '../../../infrastructure/helpers'; import * as moment from 'moment'; +import { STATUS } from 'src/core/strings/constants/base.constants'; @Injectable() export class CreateDataSchedulingManager extends BaseCreateManager { @@ -36,6 +37,7 @@ export class CreateDataSchedulingManager extends BaseCreateManager, + + @InjectRepository(DataSchedulingModel) + private repoSchedule: Repository, ) {} private getUser(): UsersSession { @@ -63,4 +71,21 @@ export class DataSchedulingDefaultManager { async getData() { return this.queryBuilder().getOne(); } + + async getActiveData(date) { + const qb = this.repoSchedule.createQueryBuilder(TABLE_NAME.DATA_SCHEDULING); + + const findData: DataSchedulingEntity = await qb + .where('status = :status', { status: 'active' }) + .andWhere('schedule_date_from <= :date', { date: date }) + .andWhere('schedule_date_to >= :date', { date: date }) + .getOne(); + + if (!findData) { + const defaultData = await this.queryBuilder().getOne(); + return { value: defaultData?.default_value }; + } + + return { value: decryptionTotal(findData.indexing_key as string) }; + } } diff --git a/src/modules/configuration/data-scheduling/infrastructure/data-scheduling-data.controller.ts b/src/modules/configuration/data-scheduling/infrastructure/data-scheduling-data.controller.ts index fff9d83..c94187c 100644 --- a/src/modules/configuration/data-scheduling/infrastructure/data-scheduling-data.controller.ts +++ b/src/modules/configuration/data-scheduling/infrastructure/data-scheduling-data.controller.ts @@ -7,6 +7,7 @@ import { Patch, Post, Put, + Query, UseGuards, } from '@nestjs/common'; import { DataSchedulingDataOrchestrator } from '../domain/usecases/data-scheduling-data.orchestrator'; @@ -19,6 +20,7 @@ import { import { MODULE_NAME } from 'src/core/strings/constants/module.constants'; import { ApiBearerAuth, ApiTags } from '@nestjs/swagger'; import { + DataSchedulingActiveEntity, DataSchedulingDefaultEntity, DataSchedulingEntity, } from '../domain/entities/data-scheduling.entity'; @@ -26,7 +28,8 @@ import { BatchResult } from 'src/core/response/domain/ok-response.interface'; import { BatchIdsDto } from 'src/core/modules/infrastructure/dto/base-batch.dto'; import { ExcludePrivilege, Public } from 'src/core/guards'; import { SetupSchedulingGuard } from './guards/setup-scheduling.guard'; -import { DataSchedulingDefaultManager } from '../domain/usecases/managers/data-scheduling-default.manager'; +import { DataSchedulingManager } from '../domain/usecases/managers/data-scheduling-default.manager'; +import { FilterActiveDataSchedulingDto } from './dto/filter-data-scheduling.dto'; @ApiTags(`${MODULE_NAME.DATA_SCHEDULING.split('-').join(' ')} - data`) @Controller(`v1/${MODULE_NAME.DATA_SCHEDULING}`) @@ -92,13 +95,13 @@ export class DataSchedulingDataController { } @ApiTags( - `${MODULE_NAME.DATA_SCHEDULING_DEFAULT.split('-').join(' ')} setup - Data`, + `${MODULE_NAME.DATA_SCHEDULING_DEFAULT.split('-').join(' ')} default - Data`, ) @Controller(`v1/${MODULE_NAME.DATA_SCHEDULING_DEFAULT}`) @Public(false) @ApiBearerAuth('JWT') export class DataSchedulingDefaultController { - constructor(private manager: DataSchedulingDefaultManager) {} + constructor(private manager: DataSchedulingManager) {} @Post() async create( @Body() data: EditDataSchedulingDefaultDto, @@ -112,11 +115,30 @@ export class DataSchedulingDefaultController { } } -@ApiTags(`${MODULE_NAME.DATA_SCHEDULING.split('-').join(' ')} setup - Data`) -@Controller(``) +@ApiTags( + `${MODULE_NAME.DATA_SCHEDULING_ACTIVE.split('-').join(' ')} active - Data`, +) +@Controller(`v1/${MODULE_NAME.DATA_SCHEDULING_ACTIVE}`) +@Public(false) +@ApiBearerAuth('JWT') +export class DataSchedulingActiveController { + constructor(private manager: DataSchedulingManager) {} + + @Get() + async get( + @Query() params: FilterActiveDataSchedulingDto, + ): Promise { + return await this.manager.getActiveData(params?.date); + } +} + +@ApiTags( + `${MODULE_NAME.DATA_SCHEDULING_SETUP.split('-').join(' ')} setup - Data`, +) +@Controller(`v1/${MODULE_NAME.DATA_SCHEDULING_SETUP}`) @Public(true) export class DataSchedulingSetupController { - @Post('v1/data-scheduling-setup') + @Post() @ExcludePrivilege() @UseGuards(SetupSchedulingGuard) async setup( diff --git a/src/modules/configuration/data-scheduling/infrastructure/dto/filter-data-scheduling.dto.ts b/src/modules/configuration/data-scheduling/infrastructure/dto/filter-data-scheduling.dto.ts index 99a92e0..454aea5 100644 --- a/src/modules/configuration/data-scheduling/infrastructure/dto/filter-data-scheduling.dto.ts +++ b/src/modules/configuration/data-scheduling/infrastructure/dto/filter-data-scheduling.dto.ts @@ -15,3 +15,9 @@ export class FilterDataSchedulingDto @ValidateIf((body) => body.schedule_date_to) schedule_date_to: Date; } + +export class FilterActiveDataSchedulingDto { + @ApiProperty({ type: 'string', required: true }) + @ValidateIf((body) => body.schedule_date_from) + date: Date; +}