Chore/refactor hotel trpc routes * chore(SW-3519): refactor trpc hotel routers * chore(SW-3519): refactor trpc hotel routers * refactor * merge * Merge branch 'master' of bitbucket.org:scandic-swap/web into chore/refactor-hotel-trpc-routes Approved-by: Linus Flood
65 lines
1.5 KiB
TypeScript
65 lines
1.5 KiB
TypeScript
import dayjs from "dayjs"
|
|
import { z } from "zod"
|
|
|
|
import { Lang } from "@scandic-hotels/common/constants/language"
|
|
|
|
import { baseBookingSchema, baseRoomSchema } from "../../../input"
|
|
|
|
export type RoomsAvailabilityInputRoom =
|
|
RoomsAvailabilityInputSchema["booking"]["rooms"][number]
|
|
export type RoomsAvailabilityOutputSchema = z.output<
|
|
typeof selectRateRoomsAvailabilityInputSchema
|
|
>
|
|
export type RoomsAvailabilityInputSchema = z.input<
|
|
typeof selectRateRoomsAvailabilityInputSchema
|
|
>
|
|
export const selectRateRoomsAvailabilityInputSchema = z
|
|
.object({
|
|
booking: baseBookingSchema.extend({
|
|
rooms: z.array(baseRoomSchema),
|
|
}),
|
|
lang: z.nativeEnum(Lang),
|
|
})
|
|
.refine(
|
|
(data) => {
|
|
const fromDate = dayjs(data.booking.fromDate)
|
|
|
|
return fromDate.isValid()
|
|
},
|
|
{
|
|
message: "FROMDATE_INVALID",
|
|
}
|
|
)
|
|
.refine(
|
|
(data) => {
|
|
const toDate = dayjs(data.booking.toDate)
|
|
|
|
return toDate.isValid()
|
|
},
|
|
{
|
|
message: "TODATE_INVALID",
|
|
}
|
|
)
|
|
.refine(
|
|
(data) => {
|
|
const fromDate = dayjs(data.booking.fromDate).startOf("day")
|
|
const toDate = dayjs(data.booking.toDate).startOf("day")
|
|
|
|
return fromDate.isBefore(toDate)
|
|
},
|
|
{
|
|
message: "TODATE_MUST_BE_AFTER_FROMDATE",
|
|
}
|
|
)
|
|
.refine(
|
|
(data) => {
|
|
const fromDate = dayjs(data.booking.fromDate)
|
|
const today = dayjs().startOf("day")
|
|
|
|
return fromDate.isSameOrAfter(today)
|
|
},
|
|
{
|
|
message: "FROMDATE_CANNOT_BE_IN_THE_PAST",
|
|
}
|
|
)
|