43 lines
1.4 KiB
TypeScript
43 lines
1.4 KiB
TypeScript
|
|
import { z } from 'zod';
|
||
|
|
import { baseListQuerySchema } from '@/lib/api/route-helpers';
|
||
|
|
|
||
|
|
export const RESERVATION_STATUSES = ['pending', 'active', 'ended', 'cancelled'] as const;
|
||
|
|
export const TENURE_TYPES = ['permanent', 'fixed_term', 'seasonal'] as const;
|
||
|
|
|
||
|
|
export const createPendingSchema = z.object({
|
||
|
|
berthId: z.string().min(1),
|
||
|
|
clientId: z.string().min(1),
|
||
|
|
yachtId: z.string().min(1),
|
||
|
|
interestId: z.string().optional(),
|
||
|
|
startDate: z.coerce.date(),
|
||
|
|
tenureType: z.enum(TENURE_TYPES).optional().default('permanent'),
|
||
|
|
notes: z.string().optional(),
|
||
|
|
});
|
||
|
|
|
||
|
|
export const activateSchema = z.object({
|
||
|
|
contractFileId: z.string().optional(),
|
||
|
|
effectiveDate: z.coerce.date().optional(),
|
||
|
|
});
|
||
|
|
|
||
|
|
export const endReservationSchema = z.object({
|
||
|
|
endDate: z.coerce.date(),
|
||
|
|
notes: z.string().optional(),
|
||
|
|
});
|
||
|
|
|
||
|
|
export const cancelSchema = z.object({
|
||
|
|
reason: z.string().optional(),
|
||
|
|
});
|
||
|
|
|
||
|
|
export const listReservationsSchema = baseListQuerySchema.extend({
|
||
|
|
status: z.enum(RESERVATION_STATUSES).optional(),
|
||
|
|
berthId: z.string().optional(),
|
||
|
|
clientId: z.string().optional(),
|
||
|
|
yachtId: z.string().optional(),
|
||
|
|
});
|
||
|
|
|
||
|
|
export type CreatePendingInput = z.infer<typeof createPendingSchema>;
|
||
|
|
export type ActivateInput = z.infer<typeof activateSchema>;
|
||
|
|
export type EndReservationInput = z.infer<typeof endReservationSchema>;
|
||
|
|
export type CancelInput = z.infer<typeof cancelSchema>;
|
||
|
|
export type ListReservationsInput = z.infer<typeof listReservationsSchema>;
|