Sending itenary based on the start date and end date
This commit is contained in:
@@ -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 {
|
||||||
|
|||||||
@@ -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: [
|
||||||
|
|||||||
Reference in New Issue
Block a user