diff --git a/apps/scandic-web/server/routers/hotels/input.ts b/apps/scandic-web/server/routers/hotels/input.ts index b58d730f6..f55901f62 100644 --- a/apps/scandic-web/server/routers/hotels/input.ts +++ b/apps/scandic-web/server/routers/hotels/input.ts @@ -8,24 +8,104 @@ import { RoomPackageCodeEnum } from "@/types/components/hotelReservation/selectR import { BreakfastPackageEnum } from "@/types/enums/breakfast" import { Country } from "@/types/enums/country" -export const hotelsAvailabilityInputSchema = z.object({ - cityId: z.string(), - roomStayStartDate: z.string(), - roomStayEndDate: z.string(), - adults: z.number(), - children: z.string().optional(), - bookingCode: z.string().optional().default(""), - redemption: z.boolean().optional().default(false), -}) +export const hotelsAvailabilityInputSchema = z + .object({ + cityId: z.string(), + roomStayStartDate: z.string().refine( + (val) => { + const fromDate = dayjs(val) -export const getHotelsByHotelIdsAvailabilityInputSchema = z.object({ - hotelIds: z.array(z.number()), - roomStayStartDate: z.string(), - roomStayEndDate: z.string(), - adults: z.number(), - children: z.string().optional(), - bookingCode: z.string().optional().default(""), -}) + return fromDate.isValid() + }, + { + message: "FROMDATE_INVALID", + } + ), + roomStayEndDate: z.string().refine( + (val) => { + const fromDate = dayjs(val) + return fromDate.isValid() + }, + { + message: "TODATE_INVALID", + } + ), + adults: z.number(), + children: z.string().optional(), + bookingCode: z.string().optional().default(""), + redemption: z.boolean().optional().default(false), + }) + .refine( + (data) => { + const fromDate = dayjs(data.roomStayStartDate).startOf("day") + const toDate = dayjs(data.roomStayEndDate).startOf("day") + + return fromDate.isBefore(toDate) + }, + { + message: "FROMDATE_BEFORE_TODATE", + } + ) + .refine( + (data) => { + const fromDate = dayjs(data.roomStayStartDate) + const today = dayjs().startOf("day") + + return fromDate.isSameOrAfter(today) + }, + { + message: "FROMDATE_CANNOT_BE_IN_THE_PAST", + } + ) + +export const getHotelsByHotelIdsAvailabilityInputSchema = z + .object({ + hotelIds: z.array(z.number()), + roomStayStartDate: z.string().refine( + (val) => { + const fromDate = dayjs(val) + return fromDate.isValid() + }, + { + message: "FROMDATE_INVALID", + } + ), + roomStayEndDate: z.string().refine( + (val) => { + const toDate = dayjs(val) + + return toDate.isValid() + }, + { + message: "TODATE_INVALID", + } + ), + adults: z.number(), + children: z.string().optional(), + bookingCode: z.string().optional().default(""), + }) + .refine( + (data) => { + const fromDate = dayjs(data.roomStayStartDate).startOf("day") + const toDate = dayjs(data.roomStayEndDate).startOf("day") + + return fromDate.isBefore(toDate) + }, + { + message: "FROMDATE_BEFORE_TODATE", + } + ) + .refine( + (data) => { + const fromDate = dayjs(data.roomStayStartDate) + const today = dayjs().startOf("day") + + return fromDate.isSameOrAfter(today) + }, + { + message: "FROMDATE_CANNOT_BE_IN_THE_PAST", + } + ) const childrenInRoomSchema = z .array(