Sending itenary based on the start date and end date

This commit is contained in:
paritosh18
2026-04-15 11:57:39 +05:30
parent 1789084685
commit 9b95149469
2 changed files with 78 additions and 0 deletions

View File

@@ -7,6 +7,37 @@ import { ItineraryService } from '../../services/itinerary.service';
const itineraryService = new ItineraryService(prismaClient); const itineraryService = new ItineraryService(prismaClient);
const parseQueryDate = (value: string, fieldName: string) => {
const trimmedValue = value.trim();
const isoMatch = trimmedValue.match(/^(\d{4})-(\d{2})-(\d{2})$/);
if (isoMatch) {
const [, year, month, day] = isoMatch;
const parsedDate = new Date(Number(year), Number(month) - 1, Number(day));
if (!Number.isNaN(parsedDate.getTime())) {
return parsedDate;
}
}
const slashMatch = trimmedValue.match(/^(\d{4})\/(\d{2})\/(\d{2})$/);
if (slashMatch) {
const [, year, month, day] = slashMatch;
const parsedDate = new Date(Number(year), Number(month) - 1, Number(day));
if (!Number.isNaN(parsedDate.getTime())) {
return parsedDate;
}
}
const parsedDate = new Date(trimmedValue);
if (Number.isNaN(parsedDate.getTime())) {
throw new ApiError(400, `Invalid ${fieldName}`);
}
return parsedDate;
};
export const handler = safeHandler(async ( export const handler = safeHandler(async (
event: APIGatewayProxyEvent, event: APIGatewayProxyEvent,
context?: Context, context?: Context,
@@ -28,6 +59,8 @@ export const handler = safeHandler(async (
const itineraryHeaderXidRaw = const itineraryHeaderXidRaw =
event.queryStringParameters?.itineraryHeaderXid ?? null; event.queryStringParameters?.itineraryHeaderXid ?? null;
const startDateRaw = event.queryStringParameters?.startDate ?? null;
const endDateRaw = event.queryStringParameters?.endDate ?? null;
let itineraryHeaderXid: number | undefined; let itineraryHeaderXid: number | undefined;
if ( if (
@@ -42,9 +75,42 @@ export const handler = safeHandler(async (
} }
} }
const hasStartDate =
startDateRaw !== null &&
startDateRaw !== undefined &&
startDateRaw.trim() !== '';
const hasEndDate =
endDateRaw !== null &&
endDateRaw !== undefined &&
endDateRaw.trim() !== '';
if (hasStartDate !== hasEndDate) {
throw new ApiError(
400,
'startDate and endDate must be provided together',
);
}
let startDate: Date | undefined;
let endDate: Date | undefined;
if (hasStartDate && hasEndDate) {
startDate = parseQueryDate(startDateRaw, 'startDate');
endDate = parseQueryDate(endDateRaw, 'endDate');
if (startDate > endDate) {
throw new ApiError(
400,
'startDate must be earlier than or equal to endDate',
);
}
}
const result = await itineraryService.getAllUserSavedItineraries( const result = await itineraryService.getAllUserSavedItineraries(
userId, userId,
itineraryHeaderXid, itineraryHeaderXid,
startDate,
endDate,
); );
return { return {

View File

@@ -1778,10 +1778,22 @@ export class ItineraryService {
async getAllUserSavedItineraries( async getAllUserSavedItineraries(
userXid: number, userXid: number,
itineraryHeaderXid?: number, itineraryHeaderXid?: number,
startDate?: Date,
endDate?: Date,
) { ) {
const itineraries = await this.prisma.itineraryHeader.findMany({ const itineraries = await this.prisma.itineraryHeader.findMany({
where: { where: {
...(itineraryHeaderXid ? { id: itineraryHeaderXid } : {}), ...(itineraryHeaderXid ? { id: itineraryHeaderXid } : {}),
...(startDate && endDate
? {
fromDate: {
gte: startDate,
},
toDate: {
lte: endDate,
},
}
: {}),
isActive: true, isActive: true,
deletedAt: null, deletedAt: null,
OR: [ OR: [