diff --git a/src/modules/season-related/season-period/domain/usecases/managers/helpers/validate.helper.ts b/src/modules/season-related/season-period/domain/usecases/managers/helpers/validate.helper.ts index 4e880c3..eb233bd 100644 --- a/src/modules/season-related/season-period/domain/usecases/managers/helpers/validate.helper.ts +++ b/src/modules/season-related/season-period/domain/usecases/managers/helpers/validate.helper.ts @@ -1,4 +1,6 @@ import { HttpStatus, UnprocessableEntityException } from "@nestjs/common"; +import { Brackets } from "typeorm"; +import * as _ from 'lodash'; // function ini bergungsi untuk validasi season period yang sama export async function ValidateSeasonPeriodHelper(dataService, data) { @@ -31,8 +33,28 @@ export async function ValidateSeasonPeriodHelper(dataService, data) { const datas = await query .andWhere('data.priority = :priority', { priority: priority }) - .andWhere('data.start_date BETWEEN :inputStartDate AND :inputEndDate', { inputStartDate: data.start_date, inputEndDate: data.end_date }) - .andWhere('data.end_date BETWEEN :inputStartDate AND :inputEndDate', { inputStartDate: data.start_date, inputEndDate: data.end_date }).getCount(); + .andWhere( + new Brackets(query => { + + // contoh data tanggal 1 Agustus - 31 Agustus + query.orWhere( + new Brackets(q => { + return q.andWhere('data.start_date <= :inputStartDate ', { inputStartDate: data.start_date }) + .andWhere('data.end_date >= :inputEndDate', { inputEndDate: data.end_date }); + }) + ) + + query.orWhere( + new Brackets(q => { + return q.andWhere('data.start_date >= :inputStartDate ', { inputStartDate: data.start_date }) + .andWhere('data.end_date <= :inputEndDate', { inputEndDate: data.end_date }); + }) + ) + + return query; + }) + ) + .getCount(); if (datas > 0) { throw new UnprocessableEntityException({