feat: add recurring bookings feature with related handlers and services

- Introduced recurring booking groups with the ability to create and cancel them.
- Added database migrations for recurring bookings, including new tables and relationships.
- Implemented handlers for creating and canceling recurring bookings in the admin booking module.
- Enhanced existing booking services to support recurring bookings logic.
- Updated API contract to include new schemas for recurring bookings.
- Refactored existing code for improved readability and maintainability.
This commit is contained in:
Jose Selesan
2026-06-16 11:58:06 -03:00
parent 1b5eb253f2
commit 1318e3bf57
38 changed files with 2025 additions and 265 deletions

View File

@@ -6,7 +6,7 @@ export {
planSummarySchema,
planWithFeaturesSchema,
planLimitsSchema,
} from './plan'
} from './plan';
export type {
Plan,
PlanFeatureFlags,
@@ -15,7 +15,7 @@ export type {
PlanSummary,
PlanWithFeatures,
PlanLimits,
} from './plan'
} from './plan';
export {
acceptComplexInvitationsSchema,
complexInvitationSchema,
@@ -30,7 +30,7 @@ export {
revokeComplexUserSchema,
selectComplexSchema,
updateComplexSchema,
} from './complex'
} from './complex';
export type {
AcceptComplexInvitationsInput,
AcceptComplexInvitationsResponse,
@@ -52,7 +52,7 @@ export type {
UpdateComplexPayload,
UpdateComplexResponse,
RevokeComplexUserInput,
} from './complex'
} from './complex';
export {
dayOfWeekSchema,
courtAvailabilityInputSchema,
@@ -61,7 +61,7 @@ export {
courtSchema,
createCourtSchema,
updateCourtSchema,
} from './court'
} from './court';
export type {
DayOfWeek,
Court,
@@ -70,25 +70,31 @@ export type {
CourtPriceRule,
CreateCourtInput,
UpdateCourtInput,
} from './court'
} from './court';
export {
adminBookingSchema,
adminBookingSportSchema,
bookingStatusSchema,
createAdminBookingSchema,
createRecurringBookingSchema,
listAdminBookingsQuerySchema,
listAdminBookingsResponseSchema,
recurringBookingGroupSchema,
recurringGroupStatusSchema,
updateAdminBookingStatusSchema,
} from './admin-booking'
} from './admin-booking';
export type {
AdminBooking,
AdminBookingSport,
BookingStatus,
CreateAdminBookingInput,
CreateRecurringBookingInput,
ListAdminBookingsQuery,
ListAdminBookingsResponse,
RecurringBookingGroup,
RecurringGroupStatus,
UpdateAdminBookingStatusInput,
} from './admin-booking'
} from './admin-booking';
export {
createPublicBookingSchema,
publicAvailabilityCourtSchema,
@@ -99,7 +105,7 @@ export {
publicBookingSlotSchema,
publicBookingSportSchema,
cancelPublicBookingSchema,
} from './public-booking'
} from './public-booking';
export type {
CreatePublicBookingInput,
CancelPublicBookingInput,
@@ -110,15 +116,15 @@ export type {
PublicBookingConfirmation,
PublicBookingSlot,
PublicBookingSport,
} from './public-booking'
export { sportSchema, createSportSchema, updateSportSchema } from './sport'
export type { Sport, CreateSportInput, UpdateSportInput } from './sport'
} from './public-booking';
export { sportSchema, createSportSchema, updateSportSchema } from './sport';
export type { Sport, CreateSportInput, UpdateSportInput } from './sport';
export {
userProfileSchema,
passwordResetStartSchema,
passwordResetVerifySchema,
passwordResetResendSchema,
} from './user'
} from './user';
export type {
UserProfile,
UserProfileResponse,
@@ -128,7 +134,7 @@ export type {
PasswordResetStartResponse,
PasswordResetVerifyResponse,
PasswordResetResendResponse,
} from './user'
} from './user';
export {
adminComplexListItemSchema,
adminComplexStatsSchema,
@@ -142,7 +148,7 @@ export {
adminGeoCitySchema,
adminGeoCountrySchema,
adminGeoStatsSchema,
} from './admin'
} from './admin';
export type {
AdminComplexListItem,
AdminComplexStats,
@@ -156,4 +162,4 @@ export type {
AdminGeoCity,
AdminGeoCountry,
AdminGeoStats,
} from './admin'
} from './admin';