- Implemented rescheduleAdminBooking service to allow users to change court and time for confirmed bookings. - Added validation for court availability, maintenance status, and overlapping bookings. - Created reschedule-admin-booking handler to process rescheduling requests and send confirmation emails. - Updated booking email service to include rescheduling notifications. - Enhanced frontend components to support booking rescheduling, including a new dialog for selecting new court and time. - Added tests for rescheduling logic, covering various scenarios including validation errors and successful reschedules. - Updated Prisma schema to log previous court and time for audit purposes.
394 lines
10 KiB
TypeScript
394 lines
10 KiB
TypeScript
|
|
/* !!! This is code generated by Prisma. Do not edit directly. !!! */
|
|
/* eslint-disable */
|
|
// biome-ignore-all lint: generated file
|
|
// @ts-nocheck
|
|
/*
|
|
* WARNING: This is an internal file that is subject to change!
|
|
*
|
|
* 🛑 Under no circumstances should you import this file directly! 🛑
|
|
*
|
|
* All exports from this file are wrapped under a `Prisma` namespace object in the browser.ts file.
|
|
* While this enables partial backward compatibility, it is not part of the stable public API.
|
|
*
|
|
* If you are looking for your Models, Enums, and Input Types, please import them from the respective
|
|
* model files in the `model` directory!
|
|
*/
|
|
|
|
import * as runtime from "@prisma/client/runtime/index-browser"
|
|
|
|
export type * from '../models'
|
|
export type * from './prismaNamespace'
|
|
|
|
export const Decimal = runtime.Decimal
|
|
|
|
|
|
export const NullTypes = {
|
|
DbNull: runtime.NullTypes.DbNull as (new (secret: never) => typeof runtime.DbNull),
|
|
JsonNull: runtime.NullTypes.JsonNull as (new (secret: never) => typeof runtime.JsonNull),
|
|
AnyNull: runtime.NullTypes.AnyNull as (new (secret: never) => typeof runtime.AnyNull),
|
|
}
|
|
/**
|
|
* Helper for filtering JSON entries that have `null` on the database (empty on the db)
|
|
*
|
|
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
|
|
*/
|
|
export const DbNull = runtime.DbNull
|
|
|
|
/**
|
|
* Helper for filtering JSON entries that have JSON `null` values (not empty on the db)
|
|
*
|
|
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
|
|
*/
|
|
export const JsonNull = runtime.JsonNull
|
|
|
|
/**
|
|
* Helper for filtering JSON entries that are `Prisma.DbNull` or `Prisma.JsonNull`
|
|
*
|
|
* @see https://www.prisma.io/docs/concepts/components/prisma-client/working-with-fields/working-with-json-fields#filtering-on-a-json-field
|
|
*/
|
|
export const AnyNull = runtime.AnyNull
|
|
|
|
|
|
export const ModelName = {
|
|
User: 'User',
|
|
Session: 'Session',
|
|
Account: 'Account',
|
|
Verification: 'Verification',
|
|
Complex: 'Complex',
|
|
ComplexUser: 'ComplexUser',
|
|
ComplexInvitation: 'ComplexInvitation',
|
|
Sport: 'Sport',
|
|
Court: 'Court',
|
|
CourtMaintenance: 'CourtMaintenance',
|
|
CourtAvailability: 'CourtAvailability',
|
|
CourtPriceRule: 'CourtPriceRule',
|
|
CourtBooking: 'CourtBooking',
|
|
CourtBookingLog: 'CourtBookingLog',
|
|
RecurringBookingGroup: 'RecurringBookingGroup',
|
|
PasswordResetRequest: 'PasswordResetRequest',
|
|
Plan: 'Plan'
|
|
} as const
|
|
|
|
export type ModelName = (typeof ModelName)[keyof typeof ModelName]
|
|
|
|
/*
|
|
* Enums
|
|
*/
|
|
|
|
export const TransactionIsolationLevel = runtime.makeStrictEnum({
|
|
ReadUncommitted: 'ReadUncommitted',
|
|
ReadCommitted: 'ReadCommitted',
|
|
RepeatableRead: 'RepeatableRead',
|
|
Serializable: 'Serializable'
|
|
} as const)
|
|
|
|
export type TransactionIsolationLevel = (typeof TransactionIsolationLevel)[keyof typeof TransactionIsolationLevel]
|
|
|
|
|
|
export const UserScalarFieldEnum = {
|
|
id: 'id',
|
|
name: 'name',
|
|
email: 'email',
|
|
emailVerified: 'emailVerified',
|
|
image: 'image',
|
|
phone: 'phone',
|
|
banned: 'banned',
|
|
bannedAt: 'bannedAt',
|
|
banReason: 'banReason',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt',
|
|
role: 'role'
|
|
} as const
|
|
|
|
export type UserScalarFieldEnum = (typeof UserScalarFieldEnum)[keyof typeof UserScalarFieldEnum]
|
|
|
|
|
|
export const SessionScalarFieldEnum = {
|
|
id: 'id',
|
|
expiresAt: 'expiresAt',
|
|
token: 'token',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt',
|
|
ipAddress: 'ipAddress',
|
|
userAgent: 'userAgent',
|
|
country: 'country',
|
|
city: 'city',
|
|
countryCode: 'countryCode',
|
|
latitude: 'latitude',
|
|
longitude: 'longitude',
|
|
userId: 'userId'
|
|
} as const
|
|
|
|
export type SessionScalarFieldEnum = (typeof SessionScalarFieldEnum)[keyof typeof SessionScalarFieldEnum]
|
|
|
|
|
|
export const AccountScalarFieldEnum = {
|
|
id: 'id',
|
|
accountId: 'accountId',
|
|
providerId: 'providerId',
|
|
userId: 'userId',
|
|
accessToken: 'accessToken',
|
|
refreshToken: 'refreshToken',
|
|
idToken: 'idToken',
|
|
accessTokenExpiresAt: 'accessTokenExpiresAt',
|
|
refreshTokenExpiresAt: 'refreshTokenExpiresAt',
|
|
scope: 'scope',
|
|
password: 'password',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
} as const
|
|
|
|
export type AccountScalarFieldEnum = (typeof AccountScalarFieldEnum)[keyof typeof AccountScalarFieldEnum]
|
|
|
|
|
|
export const VerificationScalarFieldEnum = {
|
|
id: 'id',
|
|
identifier: 'identifier',
|
|
value: 'value',
|
|
expiresAt: 'expiresAt',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
} as const
|
|
|
|
export type VerificationScalarFieldEnum = (typeof VerificationScalarFieldEnum)[keyof typeof VerificationScalarFieldEnum]
|
|
|
|
|
|
export const ComplexScalarFieldEnum = {
|
|
id: 'id',
|
|
complexName: 'complexName',
|
|
physicalAddress: 'physicalAddress',
|
|
city: 'city',
|
|
state: 'state',
|
|
country: 'country',
|
|
complexSlug: 'complexSlug',
|
|
adminEmail: 'adminEmail',
|
|
planCode: 'planCode',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
} as const
|
|
|
|
export type ComplexScalarFieldEnum = (typeof ComplexScalarFieldEnum)[keyof typeof ComplexScalarFieldEnum]
|
|
|
|
|
|
export const ComplexUserScalarFieldEnum = {
|
|
complexId: 'complexId',
|
|
userId: 'userId',
|
|
role: 'role',
|
|
createdAt: 'createdAt'
|
|
} as const
|
|
|
|
export type ComplexUserScalarFieldEnum = (typeof ComplexUserScalarFieldEnum)[keyof typeof ComplexUserScalarFieldEnum]
|
|
|
|
|
|
export const ComplexInvitationScalarFieldEnum = {
|
|
id: 'id',
|
|
complexId: 'complexId',
|
|
email: 'email',
|
|
tokenHash: 'tokenHash',
|
|
expiresAt: 'expiresAt',
|
|
acceptedAt: 'acceptedAt',
|
|
revokedAt: 'revokedAt',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
} as const
|
|
|
|
export type ComplexInvitationScalarFieldEnum = (typeof ComplexInvitationScalarFieldEnum)[keyof typeof ComplexInvitationScalarFieldEnum]
|
|
|
|
|
|
export const SportScalarFieldEnum = {
|
|
id: 'id',
|
|
name: 'name',
|
|
slug: 'slug',
|
|
isActive: 'isActive',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
} as const
|
|
|
|
export type SportScalarFieldEnum = (typeof SportScalarFieldEnum)[keyof typeof SportScalarFieldEnum]
|
|
|
|
|
|
export const CourtScalarFieldEnum = {
|
|
id: 'id',
|
|
complexId: 'complexId',
|
|
sportId: 'sportId',
|
|
name: 'name',
|
|
slotDurationMinutes: 'slotDurationMinutes',
|
|
basePrice: 'basePrice',
|
|
isUnderMaintenance: 'isUnderMaintenance',
|
|
maintenanceReason: 'maintenanceReason',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
} as const
|
|
|
|
export type CourtScalarFieldEnum = (typeof CourtScalarFieldEnum)[keyof typeof CourtScalarFieldEnum]
|
|
|
|
|
|
export const CourtMaintenanceScalarFieldEnum = {
|
|
id: 'id',
|
|
courtId: 'courtId',
|
|
startDate: 'startDate',
|
|
startTime: 'startTime',
|
|
endTime: 'endTime',
|
|
reason: 'reason',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
} as const
|
|
|
|
export type CourtMaintenanceScalarFieldEnum = (typeof CourtMaintenanceScalarFieldEnum)[keyof typeof CourtMaintenanceScalarFieldEnum]
|
|
|
|
|
|
export const CourtAvailabilityScalarFieldEnum = {
|
|
id: 'id',
|
|
courtId: 'courtId',
|
|
dayOfWeek: 'dayOfWeek',
|
|
startTime: 'startTime',
|
|
endTime: 'endTime',
|
|
createdAt: 'createdAt'
|
|
} as const
|
|
|
|
export type CourtAvailabilityScalarFieldEnum = (typeof CourtAvailabilityScalarFieldEnum)[keyof typeof CourtAvailabilityScalarFieldEnum]
|
|
|
|
|
|
export const CourtPriceRuleScalarFieldEnum = {
|
|
id: 'id',
|
|
courtId: 'courtId',
|
|
dayOfWeek: 'dayOfWeek',
|
|
startTime: 'startTime',
|
|
endTime: 'endTime',
|
|
price: 'price',
|
|
isActive: 'isActive',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
} as const
|
|
|
|
export type CourtPriceRuleScalarFieldEnum = (typeof CourtPriceRuleScalarFieldEnum)[keyof typeof CourtPriceRuleScalarFieldEnum]
|
|
|
|
|
|
export const CourtBookingScalarFieldEnum = {
|
|
id: 'id',
|
|
bookingCode: 'bookingCode',
|
|
courtId: 'courtId',
|
|
bookingDate: 'bookingDate',
|
|
startTime: 'startTime',
|
|
endTime: 'endTime',
|
|
customerName: 'customerName',
|
|
customerPhone: 'customerPhone',
|
|
customerEmail: 'customerEmail',
|
|
status: 'status',
|
|
recurringGroupId: 'recurringGroupId',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
} as const
|
|
|
|
export type CourtBookingScalarFieldEnum = (typeof CourtBookingScalarFieldEnum)[keyof typeof CourtBookingScalarFieldEnum]
|
|
|
|
|
|
export const CourtBookingLogScalarFieldEnum = {
|
|
id: 'id',
|
|
bookingCode: 'bookingCode',
|
|
courtId: 'courtId',
|
|
bookingDate: 'bookingDate',
|
|
startTime: 'startTime',
|
|
endTime: 'endTime',
|
|
previousStatus: 'previousStatus',
|
|
newStatus: 'newStatus',
|
|
previousCourtId: 'previousCourtId',
|
|
previousStartTime: 'previousStartTime',
|
|
previousEndTime: 'previousEndTime',
|
|
customerName: 'customerName',
|
|
customerPhone: 'customerPhone',
|
|
customerEmail: 'customerEmail',
|
|
changedAt: 'changedAt'
|
|
} as const
|
|
|
|
export type CourtBookingLogScalarFieldEnum = (typeof CourtBookingLogScalarFieldEnum)[keyof typeof CourtBookingLogScalarFieldEnum]
|
|
|
|
|
|
export const RecurringBookingGroupScalarFieldEnum = {
|
|
id: 'id',
|
|
complexId: 'complexId',
|
|
courtId: 'courtId',
|
|
startTime: 'startTime',
|
|
endTime: 'endTime',
|
|
dayOfWeek: 'dayOfWeek',
|
|
startDate: 'startDate',
|
|
endDate: 'endDate',
|
|
status: 'status',
|
|
customerName: 'customerName',
|
|
customerPhone: 'customerPhone',
|
|
customerEmail: 'customerEmail',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
} as const
|
|
|
|
export type RecurringBookingGroupScalarFieldEnum = (typeof RecurringBookingGroupScalarFieldEnum)[keyof typeof RecurringBookingGroupScalarFieldEnum]
|
|
|
|
|
|
export const PasswordResetRequestScalarFieldEnum = {
|
|
id: 'id',
|
|
email: 'email',
|
|
otpHash: 'otpHash',
|
|
otpExpiresAt: 'otpExpiresAt',
|
|
otpAttempts: 'otpAttempts',
|
|
otpLastSentAt: 'otpLastSentAt',
|
|
otpResendCount: 'otpResendCount',
|
|
usedAt: 'usedAt',
|
|
createdAt: 'createdAt',
|
|
updatedAt: 'updatedAt'
|
|
} as const
|
|
|
|
export type PasswordResetRequestScalarFieldEnum = (typeof PasswordResetRequestScalarFieldEnum)[keyof typeof PasswordResetRequestScalarFieldEnum]
|
|
|
|
|
|
export const PlanScalarFieldEnum = {
|
|
code: 'code',
|
|
name: 'name',
|
|
price: 'price',
|
|
rules: 'rules',
|
|
lastUpdatedAt: 'lastUpdatedAt'
|
|
} as const
|
|
|
|
export type PlanScalarFieldEnum = (typeof PlanScalarFieldEnum)[keyof typeof PlanScalarFieldEnum]
|
|
|
|
|
|
export const SortOrder = {
|
|
asc: 'asc',
|
|
desc: 'desc'
|
|
} as const
|
|
|
|
export type SortOrder = (typeof SortOrder)[keyof typeof SortOrder]
|
|
|
|
|
|
export const JsonNullValueInput = {
|
|
JsonNull: JsonNull
|
|
} as const
|
|
|
|
export type JsonNullValueInput = (typeof JsonNullValueInput)[keyof typeof JsonNullValueInput]
|
|
|
|
|
|
export const QueryMode = {
|
|
default: 'default',
|
|
insensitive: 'insensitive'
|
|
} as const
|
|
|
|
export type QueryMode = (typeof QueryMode)[keyof typeof QueryMode]
|
|
|
|
|
|
export const NullsOrder = {
|
|
first: 'first',
|
|
last: 'last'
|
|
} as const
|
|
|
|
export type NullsOrder = (typeof NullsOrder)[keyof typeof NullsOrder]
|
|
|
|
|
|
export const JsonNullValueFilter = {
|
|
DbNull: DbNull,
|
|
JsonNull: JsonNull,
|
|
AnyNull: AnyNull
|
|
} as const
|
|
|
|
export type JsonNullValueFilter = (typeof JsonNullValueFilter)[keyof typeof JsonNullValueFilter]
|
|
|