import { EventsHandler, IEventHandler } from '@nestjs/cqrs'; import { CouchService } from '../../data/services/couch.service'; import { DataSchedulingDeletedEvent } from 'src/modules/configuration/data-scheduling/domain/entities/event/data-scheduling-deleted.event'; import { DataSchedulingChangeStatusEvent } from 'src/modules/configuration/data-scheduling/domain/entities/event/data-scheduling-change-status.event'; import { DataSchedulingUpdatedEvent } from 'src/modules/configuration/data-scheduling/domain/entities/event/data-scheduling-updated.event'; import { DataSchedulingCreatedEvent } from 'src/modules/configuration/data-scheduling/domain/entities/event/data-scheduling-created.event'; import { InjectRepository } from '@nestjs/typeorm'; import { DataSchedulingDefaultModel } from 'src/modules/configuration/data-scheduling/data/models/data-scheduling-default.model'; import { DataSchedulingModel } from 'src/modules/configuration/data-scheduling/data/models/data-scheduling.model'; import { Repository } from 'typeorm'; import * as momentTz from 'moment-timezone'; import { TABLE_NAME } from 'src/core/strings/constants/table.constants'; import { DataSchedulingEntity } from 'src/modules/configuration/data-scheduling/domain/entities/data-scheduling.entity'; import { decryptionTotal } from 'src/modules/configuration/data-scheduling/infrastructure/helpers'; @EventsHandler( DataSchedulingCreatedEvent, DataSchedulingUpdatedEvent, DataSchedulingChangeStatusEvent, DataSchedulingDeletedEvent, ) export class DataSchedulingUpdatedHandler implements IEventHandler { constructor( private couchService: CouchService, @InjectRepository(DataSchedulingDefaultModel) private repository: Repository, @InjectRepository(DataSchedulingModel) private repoSchedule: Repository, ) {} async handle() { const activeData = await this.getActiveData(); console.log( activeData, 'handle when data scheduling status change and data updated', ); } async getActiveData() { const timeZoneWIB = 'Asia/Jakarta'; const nowInWIB = momentTz().tz(timeZoneWIB).format('YYYY-MM-DD'); const date = nowInWIB; 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.repository .createQueryBuilder(TABLE_NAME.DATA_SCHEDULING_DEFAULT) .getOne(); return { value: defaultData?.default_value }; } return { value: decryptionTotal(findData.indexing_key as string), date }; } }