feat: add price field to CourtBooking model and related schemas

- Added `price` field to `CourtBookingScalarFieldEnum` in `prismaNamespace.ts` and `prismaNamespaceBrowser.ts`.
- Updated `CourtBooking` model to include average and sum aggregations for `price`.
- Enhanced input types and aggregate input types to support `price`.
- Modified `public-booking.service.ts` to calculate and return price information for bookings.
- Updated frontend components to display price information in booking confirmation and selection pages.
- Introduced `priceRangeSchema` in API contract to validate price ranges.
This commit is contained in:
Jose Selesan
2026-04-24 15:22:11 -03:00
parent c63f0f2109
commit fb19458ddf
10 changed files with 290 additions and 4 deletions

View File

@@ -21,6 +21,11 @@ export const publicBookingSlotSchema = z.object({
endTime: z.string().regex(TIME_REGEX),
})
export const priceRangeSchema = z.object({
min: z.number(),
max: z.number(),
})
export const publicAvailabilityCourtSchema = z.object({
courtId: z.uuid(),
courtName: z.string(),
@@ -28,6 +33,7 @@ export const publicAvailabilityCourtSchema = z.object({
slotDurationMinutes: z.int().positive(),
availabilityDay: dayOfWeekSchema,
availableSlots: z.array(publicBookingSlotSchema),
price: priceRangeSchema.optional(),
})
export const publicAvailabilityResponseSchema = z.object({
@@ -73,6 +79,7 @@ export const publicBookingSchema = z.object({
customerName: z.string(),
customerPhone: z.string(),
status: z.enum(['CONFIRMED', 'CANCELLED', 'COMPLETED']),
price: z.number(),
createdAt: z.string().datetime(),
})
@@ -86,12 +93,14 @@ export const publicBookingConfirmationSchema = z.object({
courtName: z.string(),
sport: publicBookingSportSchema,
status: z.enum(['CONFIRMED', 'CANCELLED', 'COMPLETED']),
price: z.number(),
createdAt: z.string().datetime(),
})
export type PublicAvailabilityQuery = z.infer<typeof publicAvailabilityQuerySchema>
export type PublicBookingSport = z.infer<typeof publicBookingSportSchema>
export type PublicBookingSlot = z.infer<typeof publicBookingSlotSchema>
export type PriceRange = z.infer<typeof priceRangeSchema>
export type PublicAvailabilityCourt = z.infer<typeof publicAvailabilityCourtSchema>
export type PublicAvailabilityResponse = z.infer<typeof publicAvailabilityResponseSchema>
export type CreatePublicBookingInput = z.infer<typeof createPublicBookingSchema>