@bash-app/bash-common 30.51.0 → 30.52.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/definitions.d.ts +668 -0
- package/dist/definitions.d.ts.map +1 -0
- package/dist/definitions.js +467 -0
- package/dist/definitions.js.map +1 -0
- package/dist/extendedSchemas.d.ts +2206 -0
- package/dist/extendedSchemas.d.ts.map +1 -0
- package/dist/extendedSchemas.js +429 -0
- package/dist/extendedSchemas.js.map +1 -0
- package/dist/index.d.ts +39 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +40 -0
- package/dist/index.js.map +1 -0
- package/dist/utils/addressUtils.d.ts +14 -0
- package/dist/utils/addressUtils.d.ts.map +1 -0
- package/dist/utils/addressUtils.js +177 -0
- package/dist/utils/addressUtils.js.map +1 -0
- package/dist/utils/apiUtils.d.ts +14 -0
- package/dist/utils/apiUtils.d.ts.map +1 -0
- package/dist/utils/apiUtils.js +61 -0
- package/dist/utils/apiUtils.js.map +1 -0
- package/dist/utils/arrayUtils.d.ts +2 -0
- package/dist/utils/arrayUtils.d.ts.map +1 -0
- package/dist/utils/arrayUtils.js +5 -0
- package/dist/utils/arrayUtils.js.map +1 -0
- package/dist/utils/awsS3Utils.d.ts +10 -0
- package/dist/utils/awsS3Utils.d.ts.map +1 -0
- package/dist/utils/awsS3Utils.js +89 -0
- package/dist/utils/awsS3Utils.js.map +1 -0
- package/dist/utils/badgeUtils.d.ts +33 -0
- package/dist/utils/badgeUtils.d.ts.map +1 -0
- package/dist/utils/badgeUtils.js +57 -0
- package/dist/utils/badgeUtils.js.map +1 -0
- package/dist/utils/blog/blogDbUtils.d.ts +48 -0
- package/dist/utils/blog/blogDbUtils.d.ts.map +1 -0
- package/dist/utils/blog/blogDbUtils.js +218 -0
- package/dist/utils/blog/blogDbUtils.js.map +1 -0
- package/dist/utils/blogUtils.d.ts +19 -0
- package/dist/utils/blogUtils.d.ts.map +1 -0
- package/dist/utils/blogUtils.js +118 -0
- package/dist/utils/blogUtils.js.map +1 -0
- package/dist/utils/dateTimeUtils.d.ts +38 -0
- package/dist/utils/dateTimeUtils.d.ts.map +1 -0
- package/dist/utils/dateTimeUtils.js +207 -0
- package/dist/utils/dateTimeUtils.js.map +1 -0
- package/dist/utils/entityUtils.d.ts +5 -0
- package/dist/utils/entityUtils.d.ts.map +1 -0
- package/dist/utils/entityUtils.js +5 -0
- package/dist/utils/entityUtils.js.map +1 -0
- package/dist/utils/generalDateTimeUtils.d.ts +15 -0
- package/dist/utils/generalDateTimeUtils.d.ts.map +1 -0
- package/dist/utils/generalDateTimeUtils.js +38 -0
- package/dist/utils/generalDateTimeUtils.js.map +1 -0
- package/dist/utils/luxonUtils.d.ts +95 -0
- package/dist/utils/luxonUtils.d.ts.map +1 -0
- package/dist/utils/luxonUtils.js +623 -0
- package/dist/utils/luxonUtils.js.map +1 -0
- package/dist/utils/mathUtils.d.ts +2 -0
- package/dist/utils/mathUtils.d.ts.map +1 -0
- package/dist/utils/mathUtils.js +4 -0
- package/dist/utils/mathUtils.js.map +1 -0
- package/dist/utils/objUtils.d.ts +3 -0
- package/dist/utils/objUtils.d.ts.map +1 -0
- package/dist/utils/objUtils.js +29 -0
- package/dist/utils/objUtils.js.map +1 -0
- package/dist/utils/paymentUtils.d.ts +18 -0
- package/dist/utils/paymentUtils.d.ts.map +1 -0
- package/dist/utils/paymentUtils.js +50 -0
- package/dist/utils/paymentUtils.js.map +1 -0
- package/dist/utils/promoCodesUtils.d.ts +6 -0
- package/dist/utils/promoCodesUtils.d.ts.map +1 -0
- package/dist/utils/promoCodesUtils.js +23 -0
- package/dist/utils/promoCodesUtils.js.map +1 -0
- package/dist/utils/qrCodeUtils.d.ts +4 -0
- package/dist/utils/qrCodeUtils.d.ts.map +1 -0
- package/dist/utils/qrCodeUtils.js +22 -0
- package/dist/utils/qrCodeUtils.js.map +1 -0
- package/dist/utils/recurrenceUtils.d.ts +8 -0
- package/dist/utils/recurrenceUtils.d.ts.map +1 -0
- package/dist/utils/recurrenceUtils.js +153 -0
- package/dist/utils/recurrenceUtils.js.map +1 -0
- package/dist/utils/reviewUtils.d.ts +29 -0
- package/dist/utils/reviewUtils.d.ts.map +1 -0
- package/dist/utils/reviewUtils.js +65 -0
- package/dist/utils/reviewUtils.js.map +1 -0
- package/dist/utils/service/apiServiceBookingApiUtils.d.ts +21 -0
- package/dist/utils/service/apiServiceBookingApiUtils.d.ts.map +1 -0
- package/dist/utils/service/apiServiceBookingApiUtils.js +131 -0
- package/dist/utils/service/apiServiceBookingApiUtils.js.map +1 -0
- package/dist/utils/service/attendeeOptionUtils.d.ts +11 -0
- package/dist/utils/service/attendeeOptionUtils.d.ts.map +1 -0
- package/dist/utils/service/attendeeOptionUtils.js +9 -0
- package/dist/utils/service/attendeeOptionUtils.js.map +1 -0
- package/dist/utils/service/frontendServiceBookingUtils.d.ts +53 -0
- package/dist/utils/service/frontendServiceBookingUtils.d.ts.map +1 -0
- package/dist/utils/service/frontendServiceBookingUtils.js +134 -0
- package/dist/utils/service/frontendServiceBookingUtils.js.map +1 -0
- package/dist/utils/service/regexUtils.d.ts +6 -0
- package/dist/utils/service/regexUtils.d.ts.map +1 -0
- package/dist/utils/service/regexUtils.js +16 -0
- package/dist/utils/service/regexUtils.js.map +1 -0
- package/dist/utils/service/serviceBookingStatusUtils.d.ts +21 -0
- package/dist/utils/service/serviceBookingStatusUtils.d.ts.map +1 -0
- package/dist/utils/service/serviceBookingStatusUtils.js +130 -0
- package/dist/utils/service/serviceBookingStatusUtils.js.map +1 -0
- package/dist/utils/service/serviceBookingTypes.d.ts +19 -0
- package/dist/utils/service/serviceBookingTypes.d.ts.map +1 -0
- package/dist/utils/service/serviceBookingTypes.js +2 -0
- package/dist/utils/service/serviceBookingTypes.js.map +1 -0
- package/dist/utils/service/serviceDBUtils.d.ts +5 -0
- package/dist/utils/service/serviceDBUtils.d.ts.map +1 -0
- package/dist/utils/service/serviceDBUtils.js +48 -0
- package/dist/utils/service/serviceDBUtils.js.map +1 -0
- package/dist/utils/service/serviceRateDBUtils.d.ts +1 -0
- package/dist/utils/service/serviceRateDBUtils.d.ts.map +1 -0
- package/dist/utils/service/serviceRateDBUtils.js +159 -0
- package/dist/utils/service/serviceRateDBUtils.js.map +1 -0
- package/dist/utils/service/serviceRateTypes.d.ts +9 -0
- package/dist/utils/service/serviceRateTypes.d.ts.map +1 -0
- package/dist/utils/service/serviceRateTypes.js +2 -0
- package/dist/utils/service/serviceRateTypes.js.map +1 -0
- package/dist/utils/service/serviceRateUtils.d.ts +24 -0
- package/dist/utils/service/serviceRateUtils.d.ts.map +1 -0
- package/dist/utils/service/serviceRateUtils.js +183 -0
- package/dist/utils/service/serviceRateUtils.js.map +1 -0
- package/dist/utils/service/serviceUtils.d.ts +83 -0
- package/dist/utils/service/serviceUtils.d.ts.map +1 -0
- package/dist/utils/service/serviceUtils.js +311 -0
- package/dist/utils/service/serviceUtils.js.map +1 -0
- package/dist/utils/service/venueUtils.d.ts +13 -0
- package/dist/utils/service/venueUtils.d.ts.map +1 -0
- package/dist/utils/service/venueUtils.js +18 -0
- package/dist/utils/service/venueUtils.js.map +1 -0
- package/dist/utils/slugUtils.d.ts +9 -0
- package/dist/utils/slugUtils.d.ts.map +1 -0
- package/dist/utils/slugUtils.js +47 -0
- package/dist/utils/slugUtils.js.map +1 -0
- package/dist/utils/sortUtils.d.ts +7 -0
- package/dist/utils/sortUtils.d.ts.map +1 -0
- package/dist/utils/sortUtils.js +26 -0
- package/dist/utils/sortUtils.js.map +1 -0
- package/dist/utils/stringUtils.d.ts +2 -0
- package/dist/utils/stringUtils.d.ts.map +1 -0
- package/dist/utils/stringUtils.js +6 -0
- package/dist/utils/stringUtils.js.map +1 -0
- package/dist/utils/stripeAccountUtils.d.ts +3 -0
- package/dist/utils/stripeAccountUtils.d.ts.map +1 -0
- package/dist/utils/stripeAccountUtils.js +10 -0
- package/dist/utils/stripeAccountUtils.js.map +1 -0
- package/dist/utils/ticketListUtils.d.ts +12 -0
- package/dist/utils/ticketListUtils.d.ts.map +1 -0
- package/dist/utils/ticketListUtils.js +78 -0
- package/dist/utils/ticketListUtils.js.map +1 -0
- package/dist/utils/typeUtils.d.ts +11 -0
- package/dist/utils/typeUtils.d.ts.map +1 -0
- package/dist/utils/typeUtils.js +8 -0
- package/dist/utils/typeUtils.js.map +1 -0
- package/dist/utils/urlUtils.d.ts +10 -0
- package/dist/utils/urlUtils.d.ts.map +1 -0
- package/dist/utils/urlUtils.js +66 -0
- package/dist/utils/urlUtils.js.map +1 -0
- package/dist/utils/userPromoCodeUtils.d.ts +21 -0
- package/dist/utils/userPromoCodeUtils.d.ts.map +1 -0
- package/dist/utils/userPromoCodeUtils.js +13 -0
- package/dist/utils/userPromoCodeUtils.js.map +1 -0
- package/dist/utils/userSubscriptionUtils.d.ts +36 -0
- package/dist/utils/userSubscriptionUtils.d.ts.map +1 -0
- package/dist/utils/userSubscriptionUtils.js +56 -0
- package/dist/utils/userSubscriptionUtils.js.map +1 -0
- package/dist/utils/userUtils.d.ts +2 -0
- package/dist/utils/userUtils.d.ts.map +1 -0
- package/dist/utils/userUtils.js +2 -0
- package/dist/utils/userUtils.js.map +1 -0
- package/package.json +4 -2
- package/prisma/schema.prisma +117 -0
- package/src/definitions.ts +52 -1
- package/src/extendedSchemas.ts +177 -6
- package/src/index.ts +32 -21
- package/src/utils/blog/blogDbUtils.ts +343 -0
- package/src/utils/blogUtils.ts +134 -0
- package/src/utils/qrCodeUtils.ts +4 -2
- package/src/utils/service/apiServiceBookingApiUtils.ts +0 -0
- package/src/utils/slugUtils.ts +60 -0
- package/src/utils/ticketListUtils.ts +24 -6
- package/src/utils/typeUtils.ts +0 -0
|
@@ -0,0 +1,131 @@
|
|
|
1
|
+
import { dateTimeFromString, dateTimeRangeFromDates } from "../luxonUtils";
|
|
2
|
+
import { serviceAttendeeOptions } from "./attendeeOptionUtils";
|
|
3
|
+
export const ApiServiceCantBookReasons = {
|
|
4
|
+
notInBusinessHours: {
|
|
5
|
+
msg: "Time not within normal Business Hours",
|
|
6
|
+
},
|
|
7
|
+
minimumTimeBlock: {
|
|
8
|
+
msg: "Minimum time block not satisfied",
|
|
9
|
+
},
|
|
10
|
+
dateBlocked: {
|
|
11
|
+
msg: "The selected date is blocked.",
|
|
12
|
+
},
|
|
13
|
+
alreadyBooked: {
|
|
14
|
+
msg: "This service has already been booked.",
|
|
15
|
+
},
|
|
16
|
+
requestDeclined: {
|
|
17
|
+
msg: "The booking request has been declined.",
|
|
18
|
+
},
|
|
19
|
+
};
|
|
20
|
+
export function apiTransformAddOnsToAddonInputs(addOnsApi, serviceAddons) {
|
|
21
|
+
// Create a Map for faster lookup by addonId
|
|
22
|
+
const addonMap = new Map(serviceAddons.map((addon) => [addon.id, addon]));
|
|
23
|
+
return addOnsApi.map((addOnApi) => {
|
|
24
|
+
const matchedAddon = addonMap.get(addOnApi.addonId);
|
|
25
|
+
if (!matchedAddon) {
|
|
26
|
+
throw new Error(`Failed to match addon with id: ${addOnApi.addonId}`);
|
|
27
|
+
}
|
|
28
|
+
return {
|
|
29
|
+
...matchedAddon,
|
|
30
|
+
...addOnApi,
|
|
31
|
+
};
|
|
32
|
+
});
|
|
33
|
+
}
|
|
34
|
+
export function apiTransformBookedDays(priceToBook) {
|
|
35
|
+
return priceToBook.daysToBook.map((day) => {
|
|
36
|
+
// Transform addOns using the helper function, then map to the expected output.
|
|
37
|
+
const addOns = day.addOns.map((addOn) => ({
|
|
38
|
+
addOnId: addOn.addOnId,
|
|
39
|
+
addOn: addOn.addOn,
|
|
40
|
+
chosenQuantity: addOn.chosenQuantity,
|
|
41
|
+
costPQCents: addOn.costPQCents,
|
|
42
|
+
}));
|
|
43
|
+
const priceBreakdown = day.priceBreakdown.map((pb) => {
|
|
44
|
+
const { dateTimeRange, ...pbData } = pb;
|
|
45
|
+
return {
|
|
46
|
+
...pbData,
|
|
47
|
+
startDate: pb.dateTimeRange.start.toJSDate(),
|
|
48
|
+
endDate: pb.dateTimeRange.end.toJSDate(),
|
|
49
|
+
};
|
|
50
|
+
});
|
|
51
|
+
return {
|
|
52
|
+
startDate: day.dateTimeRange.start.toJSDate(),
|
|
53
|
+
endDate: day.dateTimeRange.end.toJSDate(),
|
|
54
|
+
addOns: addOns,
|
|
55
|
+
packages: [],
|
|
56
|
+
fees: day.fees,
|
|
57
|
+
priceBreakdown: priceBreakdown,
|
|
58
|
+
totalBeforeTaxesCents: day.totalBeforeTaxesCents,
|
|
59
|
+
};
|
|
60
|
+
});
|
|
61
|
+
}
|
|
62
|
+
export function serviceGetPriceToBookFromBooking(service, booking) {
|
|
63
|
+
const daysToBook = booking.bookedDays
|
|
64
|
+
.map((day) => {
|
|
65
|
+
const priceBreakdown = day.priceBreakdown.map((pb) => ({
|
|
66
|
+
...pb,
|
|
67
|
+
dateTimeRange: dateTimeRangeFromDates(pb.startDate, pb.endDate, "UTC", booking.timezone),
|
|
68
|
+
}));
|
|
69
|
+
return {
|
|
70
|
+
dateTimeRange: dateTimeRangeFromDates(day.startDate, day.endDate, "UTC", booking.timezone),
|
|
71
|
+
addOns: day.addOns,
|
|
72
|
+
priceBreakdown: priceBreakdown,
|
|
73
|
+
fees: day.fees,
|
|
74
|
+
totalBeforeTaxesCents: day.totalBeforeTaxesCents,
|
|
75
|
+
timezone: booking.timezone,
|
|
76
|
+
};
|
|
77
|
+
})
|
|
78
|
+
.sort((lhs, rhs) => lhs.dateTimeRange.start.toMillis() - rhs.dateTimeRange.start.toMillis());
|
|
79
|
+
return {
|
|
80
|
+
serviceId: service.id,
|
|
81
|
+
daysToBook: daysToBook,
|
|
82
|
+
selectedAttendeeOption: serviceAttendeeOptions[0],
|
|
83
|
+
additionalFees: booking.additionalFees,
|
|
84
|
+
timezone: booking.timezone,
|
|
85
|
+
daysTotalBeforeTaxesCents: booking.daysTotalATBCents,
|
|
86
|
+
totalBeforeTaxesCents: booking.totalATBCents,
|
|
87
|
+
};
|
|
88
|
+
}
|
|
89
|
+
export function serviceBookingParamsToLuxon(params) {
|
|
90
|
+
const bookedDays = params.bookedDays.reduce((sofar, day) => {
|
|
91
|
+
sofar.push({
|
|
92
|
+
...day,
|
|
93
|
+
dateTimeRange: {
|
|
94
|
+
start: dateTimeFromString(day.startDate),
|
|
95
|
+
end: dateTimeFromString(day.endDate),
|
|
96
|
+
},
|
|
97
|
+
});
|
|
98
|
+
return sofar;
|
|
99
|
+
}, []);
|
|
100
|
+
return {
|
|
101
|
+
...params,
|
|
102
|
+
bookedDays,
|
|
103
|
+
};
|
|
104
|
+
}
|
|
105
|
+
export function servicePriceToBookToApiDays(serviceId, userId, priceToBook) {
|
|
106
|
+
const bookedDays = priceToBook.daysToBook
|
|
107
|
+
.map((day) => {
|
|
108
|
+
const addOns = day.addOns.map((addOn) => ({
|
|
109
|
+
addonId: addOn.addOnId,
|
|
110
|
+
chosenQuantity: addOn.chosenQuantity,
|
|
111
|
+
}));
|
|
112
|
+
const startDate = day.dateTimeRange.start.toISO();
|
|
113
|
+
const endDate = day.dateTimeRange.end.toISO();
|
|
114
|
+
if (!startDate || !endDate) {
|
|
115
|
+
console.log(`Invalid startDate/endDate: ${startDate}/${endDate}`);
|
|
116
|
+
return null;
|
|
117
|
+
}
|
|
118
|
+
return {
|
|
119
|
+
serviceId: serviceId,
|
|
120
|
+
forUserId: userId,
|
|
121
|
+
startDate,
|
|
122
|
+
endDate,
|
|
123
|
+
addOns,
|
|
124
|
+
allowPromiseToPay: false,
|
|
125
|
+
isFreeGuest: false,
|
|
126
|
+
};
|
|
127
|
+
})
|
|
128
|
+
.filter((dayParams) => dayParams !== null) ?? [];
|
|
129
|
+
return bookedDays;
|
|
130
|
+
}
|
|
131
|
+
//# sourceMappingURL=apiServiceBookingApiUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"apiServiceBookingApiUtils.js","sourceRoot":"","sources":["../../../src/utils/service/apiServiceBookingApiUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export interface ServiceAttendeeOptionRange {
|
|
2
|
+
start: number;
|
|
3
|
+
end: number;
|
|
4
|
+
}
|
|
5
|
+
export interface ServiceAttendeeOption {
|
|
6
|
+
label: string;
|
|
7
|
+
rate: number;
|
|
8
|
+
personRange: ServiceAttendeeOptionRange;
|
|
9
|
+
}
|
|
10
|
+
export declare const serviceAttendeeOptions: ServiceAttendeeOption[];
|
|
11
|
+
//# sourceMappingURL=attendeeOptionUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attendeeOptionUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/service/attendeeOptionUtils.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,0BAA0B;IACzC,KAAK,EAAE,MAAM,CAAC;IACd,GAAG,EAAE,MAAM,CAAC;CACb;AAED,MAAM,WAAW,qBAAqB;IACpC,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,0BAA0B,CAAC;CACzC;AAED,eAAO,MAAM,sBAAsB,EAO9B,qBAAqB,EAAE,CAAC"}
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
export const serviceAttendeeOptions = [
|
|
2
|
+
{ label: "1 - 5 people", personRange: { start: 1, end: 5 }, rate: 0 },
|
|
3
|
+
{ label: "6 - 15 people", personRange: { start: 6, end: 15 }, rate: 50 },
|
|
4
|
+
{ label: "16 - 30 people", personRange: { start: 16, end: 30 }, rate: 100 },
|
|
5
|
+
{ label: "31 - 45 people", personRange: { start: 31, end: 45 }, rate: 200 },
|
|
6
|
+
{ label: "46 - 60 people", personRange: { start: 46, end: 60 }, rate: 400 },
|
|
7
|
+
{ label: "61 - 75 people", personRange: { start: 61, end: 75 }, rate: 500 },
|
|
8
|
+
];
|
|
9
|
+
//# sourceMappingURL=attendeeOptionUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"attendeeOptionUtils.js","sourceRoot":"","sources":["../../../src/utils/service/attendeeOptionUtils.ts"],"names":[],"mappings":"AAWA,MAAM,CAAC,MAAM,sBAAsB,GAAG;IACpC,EAAE,KAAK,EAAE,cAAc,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE;IACrE,EAAE,KAAK,EAAE,eAAe,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,CAAC,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,EAAE,EAAE;IACxE,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;IAC3E,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;IAC3E,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;IAC3E,EAAE,KAAK,EAAE,gBAAgB,EAAE,WAAW,EAAE,EAAE,KAAK,EAAE,EAAE,EAAE,GAAG,EAAE,EAAE,EAAE,EAAE,IAAI,EAAE,GAAG,EAAE;CACjD,CAAC"}
|
|
@@ -0,0 +1,53 @@
|
|
|
1
|
+
import { ServiceAddon } from "@prisma/client";
|
|
2
|
+
import { ServiceRatesAssociationExt } from "../../extendedSchemas";
|
|
3
|
+
import { ServiceAttendeeOption } from "./attendeeOptionUtils";
|
|
4
|
+
import { ServiceRatesLuxon } from "./serviceRateUtils";
|
|
5
|
+
import { LuxonDateRange } from "../luxonUtils";
|
|
6
|
+
import { ServiceBookingFeeBase, ServiceBookingPriceBreakdownBaseT, ServiceBookingAddOnBase } from "./serviceBookingTypes";
|
|
7
|
+
export declare const SERVICE_BOOKING_PROCESSING_FEE_PERCENT = 0.15;
|
|
8
|
+
export interface ServiceAddonInput extends ServiceAddon {
|
|
9
|
+
chosenQuantity?: number;
|
|
10
|
+
}
|
|
11
|
+
export interface FrontendServiceBookingDayInfoParams {
|
|
12
|
+
dateTimeRange: LuxonDateRange;
|
|
13
|
+
fees: ServiceBookingFeeBase[];
|
|
14
|
+
addOns: ServiceAddonInput[];
|
|
15
|
+
}
|
|
16
|
+
export interface FrontendServiceBookingDayInfo {
|
|
17
|
+
priceBreakdown: ServiceBookingPriceBreakdownBaseT[];
|
|
18
|
+
addOns: ServiceBookingAddOnBase[];
|
|
19
|
+
fees: ServiceBookingFeeBase[];
|
|
20
|
+
dateTimeRange: LuxonDateRange;
|
|
21
|
+
timezone: string;
|
|
22
|
+
totalBeforeTaxesCents: number;
|
|
23
|
+
}
|
|
24
|
+
export interface FrontendServiceGetPriceToBookResult {
|
|
25
|
+
serviceId: string;
|
|
26
|
+
daysToBook: FrontendServiceBookingDayInfo[];
|
|
27
|
+
additionalFees: ServiceBookingFeeBase[];
|
|
28
|
+
daysTotalBeforeTaxesCents: number;
|
|
29
|
+
totalBeforeTaxesCents: number;
|
|
30
|
+
minimumTimeBlockHours?: number;
|
|
31
|
+
}
|
|
32
|
+
export interface FrontendServiceGetBookingDayInfoFrontParams {
|
|
33
|
+
filteredRates: ServiceRatesLuxon;
|
|
34
|
+
timezone: string | null | undefined;
|
|
35
|
+
daysToBookParams: FrontendServiceBookingDayInfoParams[];
|
|
36
|
+
}
|
|
37
|
+
export declare function frontendServiceGetBookingDayInfo({ filteredRates, daysToBookParams, timezone, }: FrontendServiceGetBookingDayInfoFrontParams): FrontendServiceBookingDayInfo[];
|
|
38
|
+
export interface FrontendServiceGetPriceToBookFeesParams {
|
|
39
|
+
daysToBookParams: FrontendServiceBookingDayInfoParams[];
|
|
40
|
+
selectedAttendeeOption: ServiceAttendeeOption;
|
|
41
|
+
additionalFees: ServiceBookingFeeBase[];
|
|
42
|
+
timezone: string | null | undefined;
|
|
43
|
+
}
|
|
44
|
+
export declare function frontendServiceGetPriceToBookFees(serviceRatesAssociation: ServiceRatesAssociationExt | null | undefined, { daysToBookParams, selectedAttendeeOption, additionalFees, timezone, }: FrontendServiceGetPriceToBookFeesParams): FrontendServiceGetPriceToBookResult;
|
|
45
|
+
export interface FrontendServiceGetPriceToBookParams {
|
|
46
|
+
addOns: ServiceAddonInput[];
|
|
47
|
+
selectedAttendeeOption: ServiceAttendeeOption;
|
|
48
|
+
bookingDateTimeRanges: LuxonDateRange[];
|
|
49
|
+
timezone: string | null | undefined;
|
|
50
|
+
}
|
|
51
|
+
export declare function frontendServiceGetPriceToBook(serviceRatesAssociation: ServiceRatesAssociationExt | null | undefined, { addOns, selectedAttendeeOption, bookingDateTimeRanges, //list of dateTime ranges to book
|
|
52
|
+
timezone, }: FrontendServiceGetPriceToBookParams): FrontendServiceGetPriceToBookResult;
|
|
53
|
+
//# sourceMappingURL=frontendServiceBookingUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontendServiceBookingUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/service/frontendServiceBookingUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,YAAY,EAGb,MAAM,gBAAgB,CAAC;AACxB,OAAO,EAML,0BAA0B,EAE3B,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,qBAAqB,EAAE,MAAM,uBAAuB,CAAC;AAC9D,OAAO,EAML,iBAAiB,EAClB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EAGL,cAAc,EACf,MAAM,eAAe,CAAC;AACvB,OAAO,EACL,qBAAqB,EACrB,iCAAiC,EACjC,uBAAuB,EACxB,MAAM,uBAAuB,CAAC;AAG/B,eAAO,MAAM,sCAAsC,OAAO,CAAC;AAE3D,MAAM,WAAW,iBAAkB,SAAQ,YAAY;IACrD,cAAc,CAAC,EAAE,MAAM,CAAC;CACzB;AAED,MAAM,WAAW,mCAAmC;IAClD,aAAa,EAAE,cAAc,CAAC;IAC9B,IAAI,EAAE,qBAAqB,EAAE,CAAC;IAC9B,MAAM,EAAE,iBAAiB,EAAE,CAAC;CAC7B;AAED,MAAM,WAAW,6BAA6B;IAC5C,cAAc,EAAE,iCAAiC,EAAE,CAAC;IACpD,MAAM,EAAE,uBAAuB,EAAE,CAAC;IAClC,IAAI,EAAE,qBAAqB,EAAE,CAAC;IAG9B,aAAa,EAAE,cAAc,CAAC;IAC9B,QAAQ,EAAE,MAAM,CAAC;IAEjB,qBAAqB,EAAE,MAAM,CAAC;CAC/B;AAED,MAAM,WAAW,mCAAmC;IAClD,SAAS,EAAE,MAAM,CAAC;IAElB,UAAU,EAAE,6BAA6B,EAAE,CAAC;IAC5C,cAAc,EAAE,qBAAqB,EAAE,CAAC;IAExC,yBAAyB,EAAE,MAAM,CAAC;IAClC,qBAAqB,EAAE,MAAM,CAAC;IAE9B,qBAAqB,CAAC,EAAE,MAAM,CAAC;CAChC;AAED,MAAM,WAAW,2CAA2C;IAC1D,aAAa,EAAE,iBAAiB,CAAC;IAGjC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;IACpC,gBAAgB,EAAE,mCAAmC,EAAE,CAAC;CACzD;AAED,wBAAgB,gCAAgC,CAAC,EAC/C,aAAa,EACb,gBAAgB,EAEhB,QAAQ,GACT,EAAE,2CAA2C,GAAG,6BAA6B,EAAE,CAqF/E;AAED,MAAM,WAAW,uCAAuC;IACtD,gBAAgB,EAAE,mCAAmC,EAAE,CAAC;IACxD,sBAAsB,EAAE,qBAAqB,CAAC;IAE9C,cAAc,EAAE,qBAAqB,EAAE,CAAC;IAGxC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACrC;AAED,wBAAgB,iCAAiC,CAC/C,uBAAuB,EAAE,0BAA0B,GAAG,IAAI,GAAG,SAAS,EACtE,EACE,gBAAgB,EAChB,sBAAsB,EACtB,cAAc,EAEd,QAAQ,GACT,EAAE,uCAAuC,GACzC,mCAAmC,CAgErC;AAED,MAAM,WAAW,mCAAmC;IAClD,MAAM,EAAE,iBAAiB,EAAE,CAAC;IAE5B,sBAAsB,EAAE,qBAAqB,CAAC;IAE9C,qBAAqB,EAAE,cAAc,EAAE,CAAC;IAGxC,QAAQ,EAAE,MAAM,GAAG,IAAI,GAAG,SAAS,CAAC;CACrC;AAED,wBAAgB,6BAA6B,CAC3C,uBAAuB,EAAE,0BAA0B,GAAG,IAAI,GAAG,SAAS,EACtE,EACE,MAAM,EACN,sBAAsB,EACtB,qBAAqB,EAAE,iCAAiC;AAExD,QAAQ,GACT,EAAE,mCAAmC,GACrC,mCAAmC,CAiCrC"}
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
import { ServiceBookingFeeType, } from "@prisma/client";
|
|
2
|
+
import { getServiceRatePricingInfo, SERVICE_DAILY_RATE_HOURS_MIN, serviceGetFilteredRates, serviceRatesFilter, serviceRatesHasRates, } from "./serviceRateUtils";
|
|
3
|
+
import { dateTimeDiffHours, } from "../luxonUtils";
|
|
4
|
+
export const SERVICE_BOOKING_PROCESSING_FEE_PERCENT = 0.15;
|
|
5
|
+
export function frontendServiceGetBookingDayInfo({ filteredRates, daysToBookParams,
|
|
6
|
+
// overlappingBusinessHours,
|
|
7
|
+
timezone, }) {
|
|
8
|
+
const bookingDayResults = daysToBookParams.map((day) => {
|
|
9
|
+
let priceBreakdown = [];
|
|
10
|
+
const durationHours = dateTimeDiffHours(day.dateTimeRange.start, day.dateTimeRange.end);
|
|
11
|
+
// console.log(
|
|
12
|
+
// `serviceGetBookingDayInfo: durationHours: ${JSON.stringify(
|
|
13
|
+
// durationHours
|
|
14
|
+
// )}, dtRange: ${JSON.stringify(day.dateTimeRange)}`
|
|
15
|
+
// );
|
|
16
|
+
let hoursRemaining = durationHours;
|
|
17
|
+
let currentRange = { ...day.dateTimeRange };
|
|
18
|
+
let baseCostDiscountedCents = 0;
|
|
19
|
+
const rates = serviceRatesFilter(filteredRates, [day.dateTimeRange]);
|
|
20
|
+
const { generalRate, specialRates, dailyRates } = rates;
|
|
21
|
+
while (serviceRatesHasRates(rates) && hoursRemaining > 0) {
|
|
22
|
+
const pricingInfo = getServiceRatePricingInfo(currentRange, generalRate, dailyRates, specialRates,
|
|
23
|
+
// overlappingBusinessHours,
|
|
24
|
+
timezone, hoursRemaining);
|
|
25
|
+
if (pricingInfo.hours == 0 || pricingInfo.unitCount == 0) {
|
|
26
|
+
throw new Error(`Invalid pricingInfo`);
|
|
27
|
+
}
|
|
28
|
+
priceBreakdown.push(pricingInfo);
|
|
29
|
+
// currentRange.start = currentRange.start.plus({
|
|
30
|
+
// hours: pricingInfo.hours,
|
|
31
|
+
// });
|
|
32
|
+
currentRange.start = pricingInfo.dateTimeRange.end;
|
|
33
|
+
hoursRemaining -= pricingInfo.hours;
|
|
34
|
+
baseCostDiscountedCents += pricingInfo.piTotalCents;
|
|
35
|
+
if (pricingInfo.hours < SERVICE_DAILY_RATE_HOURS_MIN) {
|
|
36
|
+
if (pricingInfo.rateType == "Special") {
|
|
37
|
+
specialRates.pop();
|
|
38
|
+
}
|
|
39
|
+
else if (pricingInfo.rateType == "Weekday") {
|
|
40
|
+
dailyRates.pop();
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
const addOns = day.addOns.map((addOn) => {
|
|
45
|
+
return {
|
|
46
|
+
addOn: addOn,
|
|
47
|
+
addOnId: addOn.id,
|
|
48
|
+
chosenQuantity: addOn.chosenQuantity ?? 0,
|
|
49
|
+
costPQCents: addOn.priceCents,
|
|
50
|
+
};
|
|
51
|
+
});
|
|
52
|
+
const feesTotalCents = day.fees.reduce((sofar, fee) => sofar + fee.costPQCents * fee.quantity, 0);
|
|
53
|
+
const addOnsTotalCents = addOns.reduce((sofar, addOn) => sofar + addOn.costPQCents * addOn.chosenQuantity, 0);
|
|
54
|
+
const totalBeforeTaxesCents = baseCostDiscountedCents + addOnsTotalCents + feesTotalCents;
|
|
55
|
+
return {
|
|
56
|
+
priceBreakdown: priceBreakdown,
|
|
57
|
+
dateTimeRange: day.dateTimeRange,
|
|
58
|
+
timezone: day.dateTimeRange.start.zoneName,
|
|
59
|
+
fees: day.fees,
|
|
60
|
+
addOns: addOns,
|
|
61
|
+
totalBeforeTaxesCents: totalBeforeTaxesCents,
|
|
62
|
+
};
|
|
63
|
+
});
|
|
64
|
+
return bookingDayResults;
|
|
65
|
+
}
|
|
66
|
+
export function frontendServiceGetPriceToBookFees(serviceRatesAssociation, { daysToBookParams, selectedAttendeeOption, additionalFees,
|
|
67
|
+
// overlappingBusinessHours,
|
|
68
|
+
timezone, }) {
|
|
69
|
+
const bookingDateTimeRanges = daysToBookParams.map((daysToBookParams) => daysToBookParams.dateTimeRange);
|
|
70
|
+
const filteredRates = serviceGetFilteredRates(serviceRatesAssociation, bookingDateTimeRanges, timezone);
|
|
71
|
+
const bookingDayResults = frontendServiceGetBookingDayInfo({
|
|
72
|
+
filteredRates: filteredRates,
|
|
73
|
+
daysToBookParams: daysToBookParams,
|
|
74
|
+
// overlappingBusinessHours: overlappingBusinessHours,
|
|
75
|
+
timezone: timezone,
|
|
76
|
+
});
|
|
77
|
+
const daysTotalBeforeTaxesCents = bookingDayResults.reduce((sofar, curr) => {
|
|
78
|
+
return sofar + curr.totalBeforeTaxesCents;
|
|
79
|
+
}, 0);
|
|
80
|
+
const minimumTimeBlockHours = serviceRatesAssociation?.serviceGeneralRates?.minimumTimeBlockHours;
|
|
81
|
+
// const attendeeRate = selectedAttendeeOption.rate * durationHours;
|
|
82
|
+
const processingFeeCents = SERVICE_BOOKING_PROCESSING_FEE_PERCENT * daysTotalBeforeTaxesCents;
|
|
83
|
+
const hasCustomProcessingFee = additionalFees.some((fee) => fee.feeType == ServiceBookingFeeType.ProcessingFee);
|
|
84
|
+
let allAdditionalFees = [...additionalFees];
|
|
85
|
+
if (!hasCustomProcessingFee) {
|
|
86
|
+
allAdditionalFees.push({
|
|
87
|
+
feeType: ServiceBookingFeeType.ProcessingFee,
|
|
88
|
+
name: "Processing Fee",
|
|
89
|
+
description: "Processing Fee",
|
|
90
|
+
costPQCents: processingFeeCents,
|
|
91
|
+
quantity: 1,
|
|
92
|
+
});
|
|
93
|
+
}
|
|
94
|
+
allAdditionalFees = allAdditionalFees.filter((fee) => fee.costPQCents > 0);
|
|
95
|
+
const allAdditionalFeesCents = allAdditionalFees.reduce((sofar, fee) => sofar + fee.costPQCents * fee.quantity, 0);
|
|
96
|
+
const totalBeforeTaxesCents = daysTotalBeforeTaxesCents + allAdditionalFeesCents;
|
|
97
|
+
return {
|
|
98
|
+
serviceId: serviceRatesAssociation?.serviceId,
|
|
99
|
+
daysToBook: bookingDayResults,
|
|
100
|
+
daysTotalBeforeTaxesCents: daysTotalBeforeTaxesCents,
|
|
101
|
+
totalBeforeTaxesCents: totalBeforeTaxesCents,
|
|
102
|
+
additionalFees: allAdditionalFees,
|
|
103
|
+
minimumTimeBlockHours: minimumTimeBlockHours,
|
|
104
|
+
};
|
|
105
|
+
}
|
|
106
|
+
export function frontendServiceGetPriceToBook(serviceRatesAssociation, { addOns, selectedAttendeeOption, bookingDateTimeRanges, //list of dateTime ranges to book
|
|
107
|
+
// overlappingBusinessHours,
|
|
108
|
+
timezone, }) {
|
|
109
|
+
const cleaningFeePerBookingCents = serviceRatesAssociation?.serviceGeneralRates?.cleaningFeePerBookingCents ??
|
|
110
|
+
0;
|
|
111
|
+
const feesPerBooking = [
|
|
112
|
+
{
|
|
113
|
+
feeType: ServiceBookingFeeType.CleaningFee,
|
|
114
|
+
name: "Cleaning Fee",
|
|
115
|
+
description: "Cleaning Fee",
|
|
116
|
+
costPQCents: cleaningFeePerBookingCents,
|
|
117
|
+
quantity: 1,
|
|
118
|
+
},
|
|
119
|
+
].filter((fee) => fee.costPQCents > 0);
|
|
120
|
+
const daysToBookParams = bookingDateTimeRanges.map((dtRange) => {
|
|
121
|
+
return {
|
|
122
|
+
dateTimeRange: dtRange,
|
|
123
|
+
fees: feesPerBooking,
|
|
124
|
+
addOns: addOns,
|
|
125
|
+
};
|
|
126
|
+
});
|
|
127
|
+
return frontendServiceGetPriceToBookFees(serviceRatesAssociation, {
|
|
128
|
+
daysToBookParams: daysToBookParams,
|
|
129
|
+
selectedAttendeeOption: selectedAttendeeOption,
|
|
130
|
+
additionalFees: [],
|
|
131
|
+
timezone: timezone,
|
|
132
|
+
});
|
|
133
|
+
}
|
|
134
|
+
//# sourceMappingURL=frontendServiceBookingUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"frontendServiceBookingUtils.js","sourceRoot":"","sources":["../../../src/utils/service/frontendServiceBookingUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAGL,qBAAqB,GACtB,MAAM,gBAAgB,CAAC;AAWxB,OAAO,EACL,yBAAyB,EACzB,4BAA4B,EAC5B,uBAAuB,EACvB,kBAAkB,EAClB,oBAAoB,GAErB,MAAM,oBAAoB,CAAC;AAC5B,OAAO,EACL,iBAAiB,GAGlB,MAAM,eAAe,CAAC;AAQvB,MAAM,CAAC,MAAM,sCAAsC,GAAG,IAAI,CAAC;AA4C3D,MAAM,UAAU,gCAAgC,CAAC,EAC/C,aAAa,EACb,gBAAgB;AAChB,4BAA4B;AAC5B,QAAQ,GACoC;IAC5C,MAAM,iBAAiB,GACrB,gBAAgB,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,EAAE;QAC3B,IAAI,cAAc,GAAwC,EAAE,CAAC;QAC7D,MAAM,aAAa,GAAG,iBAAiB,CACrC,GAAG,CAAC,aAAa,CAAC,KAAK,EACvB,GAAG,CAAC,aAAa,CAAC,GAAG,CACtB,CAAC;QACF,eAAe;QACf,gEAAgE;QAChE,oBAAoB;QACpB,uDAAuD;QACvD,KAAK;QACL,IAAI,cAAc,GAAG,aAAa,CAAC;QACnC,IAAI,YAAY,GAAG,EAAE,GAAG,GAAG,CAAC,aAAa,EAAE,CAAC;QAC5C,IAAI,uBAAuB,GAAG,CAAC,CAAC;QAEhC,MAAM,KAAK,GAAG,kBAAkB,CAAC,aAAa,EAAE,CAAC,GAAG,CAAC,aAAa,CAAC,CAAC,CAAC;QACrE,MAAM,EAAE,WAAW,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,KAAK,CAAC;QACxD,OAAO,oBAAoB,CAAC,KAAK,CAAC,IAAI,cAAc,GAAG,CAAC,EAAE,CAAC;YACzD,MAAM,WAAW,GAAG,yBAAyB,CAC3C,YAAY,EACZ,WAAW,EACX,UAAU,EACV,YAAY;YACZ,4BAA4B;YAC5B,QAAQ,EACR,cAAc,CACf,CAAC;YAEF,IAAI,WAAW,CAAC,KAAK,IAAI,CAAC,IAAI,WAAW,CAAC,SAAS,IAAI,CAAC,EAAE,CAAC;gBACzD,MAAM,IAAI,KAAK,CAAC,qBAAqB,CAAC,CAAC;YACzC,CAAC;YAED,cAAc,CAAC,IAAI,CAAC,WAAW,CAAC,CAAC;YAEjC,iDAAiD;YACjD,8BAA8B;YAC9B,MAAM;YACN,YAAY,CAAC,KAAK,GAAG,WAAW,CAAC,aAAa,CAAC,GAAG,CAAC;YACnD,cAAc,IAAI,WAAW,CAAC,KAAK,CAAC;YACpC,uBAAuB,IAAI,WAAW,CAAC,YAAY,CAAC;YAEpD,IAAI,WAAW,CAAC,KAAK,GAAG,4BAA4B,EAAE,CAAC;gBACrD,IAAI,WAAW,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;oBACtC,YAAY,CAAC,GAAG,EAAE,CAAC;gBACrB,CAAC;qBAAM,IAAI,WAAW,CAAC,QAAQ,IAAI,SAAS,EAAE,CAAC;oBAC7C,UAAU,CAAC,GAAG,EAAE,CAAC;gBACnB,CAAC;YACH,CAAC;QACH,CAAC;QAED,MAAM,MAAM,GAAG,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,KAAK,EAA2B,EAAE;YAC/D,OAAO;gBACL,KAAK,EAAE,KAAK;gBACZ,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,cAAc,EAAE,KAAK,CAAC,cAAc,IAAI,CAAC;gBACzC,WAAW,EAAE,KAAK,CAAC,UAAU;aAC9B,CAAC;QACJ,CAAC,CAAC,CAAC;QAEH,MAAM,cAAc,GAAG,GAAG,CAAC,IAAI,CAAC,MAAM,CACpC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,QAAQ,EACtD,CAAC,CACF,CAAC;QAEF,MAAM,gBAAgB,GAAG,MAAM,CAAC,MAAM,CACpC,CAAC,KAAK,EAAE,KAAK,EAAE,EAAE,CAAC,KAAK,GAAG,KAAK,CAAC,WAAW,GAAG,KAAK,CAAC,cAAc,EAClE,CAAC,CACF,CAAC;QAEF,MAAM,qBAAqB,GACzB,uBAAuB,GAAG,gBAAgB,GAAG,cAAc,CAAC;QAE9D,OAAO;YACL,cAAc,EAAE,cAAc;YAC9B,aAAa,EAAE,GAAG,CAAC,aAAa;YAChC,QAAQ,EAAE,GAAG,CAAC,aAAa,CAAC,KAAK,CAAC,QAAQ;YAC1C,IAAI,EAAE,GAAG,CAAC,IAAI;YACd,MAAM,EAAE,MAAM;YACd,qBAAqB,EAAE,qBAAqB;SACZ,CAAC;IACrC,CAAC,CAAC,CAAC;IAEL,OAAO,iBAAiB,CAAC;AAC3B,CAAC;AAYD,MAAM,UAAU,iCAAiC,CAC/C,uBAAsE,EACtE,EACE,gBAAgB,EAChB,sBAAsB,EACtB,cAAc;AACd,4BAA4B;AAC5B,QAAQ,GACgC;IAE1C,MAAM,qBAAqB,GAAG,gBAAgB,CAAC,GAAG,CAChD,CAAC,gBAAgB,EAAE,EAAE,CAAC,gBAAgB,CAAC,aAAa,CACrD,CAAC;IACF,MAAM,aAAa,GAAG,uBAAuB,CAC3C,uBAAuB,EACvB,qBAAqB,EACrB,QAAQ,CACT,CAAC;IAEF,MAAM,iBAAiB,GACrB,gCAAgC,CAAC;QAC/B,aAAa,EAAE,aAAa;QAC5B,gBAAgB,EAAE,gBAAgB;QAClC,sDAAsD;QACtD,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;IAEL,MAAM,yBAAyB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,KAAK,EAAE,IAAI,EAAE,EAAE;QACzE,OAAO,KAAK,GAAG,IAAI,CAAC,qBAAqB,CAAC;IAC5C,CAAC,EAAE,CAAC,CAAC,CAAC;IAEN,MAAM,qBAAqB,GACzB,uBAAuB,EAAE,mBAAmB,EAAE,qBAAqB,CAAC;IAEtE,oEAAoE;IAEpE,MAAM,kBAAkB,GACtB,sCAAsC,GAAG,yBAAyB,CAAC;IAErE,MAAM,sBAAsB,GAAG,cAAc,CAAC,IAAI,CAChD,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,OAAO,IAAI,qBAAqB,CAAC,aAAa,CAC5D,CAAC;IAEF,IAAI,iBAAiB,GAAG,CAAC,GAAG,cAAc,CAAC,CAAC;IAE5C,IAAI,CAAC,sBAAsB,EAAE,CAAC;QAC5B,iBAAiB,CAAC,IAAI,CAAC;YACrB,OAAO,EAAE,qBAAqB,CAAC,aAAa;YAC5C,IAAI,EAAE,gBAAgB;YACtB,WAAW,EAAE,gBAAgB;YAC7B,WAAW,EAAE,kBAAkB;YAC/B,QAAQ,EAAE,CAAC;SACZ,CAAC,CAAC;IACL,CAAC;IAED,iBAAiB,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAE3E,MAAM,sBAAsB,GAAG,iBAAiB,CAAC,MAAM,CACrD,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE,CAAC,KAAK,GAAG,GAAG,CAAC,WAAW,GAAG,GAAG,CAAC,QAAQ,EACtD,CAAC,CACF,CAAC;IAEF,MAAM,qBAAqB,GACzB,yBAAyB,GAAG,sBAAsB,CAAC;IAErD,OAAO;QACL,SAAS,EAAE,uBAAuB,EAAE,SAAS;QAC7C,UAAU,EAAE,iBAAiB;QAC7B,yBAAyB,EAAE,yBAAyB;QACpD,qBAAqB,EAAE,qBAAqB;QAC5C,cAAc,EAAE,iBAAiB;QACjC,qBAAqB,EAAE,qBAAqB;KACN,CAAC;AAC3C,CAAC;AAaD,MAAM,UAAU,6BAA6B,CAC3C,uBAAsE,EACtE,EACE,MAAM,EACN,sBAAsB,EACtB,qBAAqB,EAAE,iCAAiC;AACxD,4BAA4B;AAC5B,QAAQ,GAC4B;IAEtC,MAAM,0BAA0B,GAC9B,uBAAuB,EAAE,mBAAmB,EAAE,0BAA0B;QACxE,CAAC,CAAC;IAEJ,MAAM,cAAc,GAClB;QACE;YACE,OAAO,EAAE,qBAAqB,CAAC,WAAW;YAC1C,IAAI,EAAE,cAAc;YACpB,WAAW,EAAE,cAAc;YAC3B,WAAW,EAAE,0BAA0B;YACvC,QAAQ,EAAE,CAAC;SACZ;KAEJ,CAAC,MAAM,CAAC,CAAC,GAAG,EAAE,EAAE,CAAC,GAAG,CAAC,WAAW,GAAG,CAAC,CAAC,CAAC;IAEvC,MAAM,gBAAgB,GAAG,qBAAqB,CAAC,GAAG,CAChD,CAAC,OAAO,EAAuC,EAAE;QAC/C,OAAO;YACL,aAAa,EAAE,OAAO;YACtB,IAAI,EAAE,cAAc;YACpB,MAAM,EAAE,MAAM;SACf,CAAC;IACJ,CAAC,CACF,CAAC;IAEF,OAAO,iCAAiC,CAAC,uBAAuB,EAAE;QAChE,gBAAgB,EAAE,gBAAgB;QAClC,sBAAsB,EAAE,sBAAsB;QAC9C,cAAc,EAAE,EAAE;QAClB,QAAQ,EAAE,QAAQ;KACnB,CAAC,CAAC;AACL,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export declare function isPositiveInt(str: string): boolean;
|
|
2
|
+
export declare function isPositiveFloat(str: string): boolean;
|
|
3
|
+
export declare function isPrice(str: string): boolean;
|
|
4
|
+
export declare function isUrlInputtingProtocol(str: string): boolean;
|
|
5
|
+
export declare function isUrl(str: string): boolean;
|
|
6
|
+
//# sourceMappingURL=regexUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regexUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/service/regexUtils.ts"],"names":[],"mappings":"AAAA,wBAAgB,aAAa,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAElD;AAED,wBAAgB,eAAe,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAEpD;AAED,wBAAgB,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE5C;AAED,wBAAgB,sBAAsB,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAE3D;AAED,wBAAgB,KAAK,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAI1C"}
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
export function isPositiveInt(str) {
|
|
2
|
+
return /^\d*$/.test(str);
|
|
3
|
+
}
|
|
4
|
+
export function isPositiveFloat(str) {
|
|
5
|
+
return /^\d*\.?\d*$/.test(str);
|
|
6
|
+
}
|
|
7
|
+
export function isPrice(str) {
|
|
8
|
+
return /^\d*\.?\d{0,2}$/.test(str);
|
|
9
|
+
}
|
|
10
|
+
export function isUrlInputtingProtocol(str) {
|
|
11
|
+
return /^(?:(?:|h|ht|htt|http|https)|(?:http|https):(?:\/{0,2})?)$/.test(str);
|
|
12
|
+
}
|
|
13
|
+
export function isUrl(str) {
|
|
14
|
+
return /(?:^https?:\/\/[^\s\/$?#;&=@:]*$)|(?:^https?:\/{0,2}$)|(?:^[^\s\/$?#;&=@:]*$)/.test(str);
|
|
15
|
+
}
|
|
16
|
+
//# sourceMappingURL=regexUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"regexUtils.js","sourceRoot":"","sources":["../../../src/utils/service/regexUtils.ts"],"names":[],"mappings":"AAAA,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,OAAO,OAAO,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAC3B,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,GAAW;IACzC,OAAO,aAAa,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACjC,CAAC;AAED,MAAM,UAAU,OAAO,CAAC,GAAW;IACjC,OAAO,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AACrC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,GAAW;IAChD,OAAO,4DAA4D,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;AAChF,CAAC;AAED,MAAM,UAAU,KAAK,CAAC,GAAW;IAC/B,OAAO,+EAA+E,CAAC,IAAI,CACzF,GAAG,CACJ,CAAC;AACJ,CAAC"}
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import { ServiceBookingExt, ServiceExt } from "../../extendedSchemas";
|
|
2
|
+
export interface ValidationResult {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
errorMessage?: string;
|
|
5
|
+
}
|
|
6
|
+
export declare function serviceBookingIsRequest(booking: ServiceBookingExt): boolean;
|
|
7
|
+
export declare function serviceBookingIsConfirmed(booking: ServiceBookingExt): boolean;
|
|
8
|
+
export declare function serviceBookingIsPaid(booking: ServiceBookingExt): boolean;
|
|
9
|
+
export declare function serviceBookingIsRefunded(booking: ServiceBookingExt): boolean;
|
|
10
|
+
export declare function serviceBookingAllowPromisePay(booking: ServiceBookingExt): boolean;
|
|
11
|
+
export declare function serviceBookingIsCanceled(booking: ServiceBookingExt): boolean;
|
|
12
|
+
export declare function serviceBookingIsApproved(booking: ServiceBookingExt): boolean;
|
|
13
|
+
export declare function serviceBookingIsDeclined(booking: ServiceBookingExt): boolean;
|
|
14
|
+
export declare function serviceBookingIsPending(booking: ServiceBookingExt): boolean;
|
|
15
|
+
export declare function serviceBookingHasApprovalDecision(booking: ServiceBookingExt): boolean;
|
|
16
|
+
export declare function serviceBookingCanBePaid(booking: ServiceBookingExt): ValidationResult;
|
|
17
|
+
export declare function serviceBookingCanBeRefunded(booking: ServiceBookingExt): ValidationResult;
|
|
18
|
+
export declare function serviceBookingCanHaveApprovalDecision(booking: ServiceBookingExt): ValidationResult;
|
|
19
|
+
export declare function serviceBookingCanBeCanceled(service: ServiceExt, booking: ServiceBookingExt): ValidationResult;
|
|
20
|
+
export declare function serviceBookingCanBeConfirmed(booking: ServiceBookingExt): ValidationResult;
|
|
21
|
+
//# sourceMappingURL=serviceBookingStatusUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceBookingStatusUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/service/serviceBookingStatusUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AAEtE,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,YAAY,CAAC,EAAE,MAAM,CAAC;CACvB;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAE3E;AAED,wBAAgB,yBAAyB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAE7E;AAED,wBAAgB,oBAAoB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAExE;AACD,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAE5E;AAED,wBAAgB,6BAA6B,CAC3C,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAET;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAE5E;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAE5E;AAED,wBAAgB,wBAAwB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAE5E;AAED,wBAAgB,uBAAuB,CAAC,OAAO,EAAE,iBAAiB,GAAG,OAAO,CAE3E;AAED,wBAAgB,iCAAiC,CAC/C,OAAO,EAAE,iBAAiB,GACzB,OAAO,CAET;AAED,wBAAgB,uBAAuB,CACrC,OAAO,EAAE,iBAAiB,GACzB,gBAAgB,CA2BlB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,iBAAiB,GACzB,gBAAgB,CAqBlB;AAED,wBAAgB,qCAAqC,CACnD,OAAO,EAAE,iBAAiB,GACzB,gBAAgB,CAuBlB;AAED,wBAAgB,2BAA2B,CACzC,OAAO,EAAE,UAAU,EACnB,OAAO,EAAE,iBAAiB,GACzB,gBAAgB,CAoBlB;AAED,wBAAgB,4BAA4B,CAC1C,OAAO,EAAE,iBAAiB,GACzB,gBAAgB,CASlB"}
|
|
@@ -0,0 +1,130 @@
|
|
|
1
|
+
export function serviceBookingIsRequest(booking) {
|
|
2
|
+
return booking.bookingType === "Request";
|
|
3
|
+
}
|
|
4
|
+
export function serviceBookingIsConfirmed(booking) {
|
|
5
|
+
return booking.status === "Confirmed";
|
|
6
|
+
}
|
|
7
|
+
export function serviceBookingIsPaid(booking) {
|
|
8
|
+
return booking.checkout?.paidOn != null;
|
|
9
|
+
}
|
|
10
|
+
export function serviceBookingIsRefunded(booking) {
|
|
11
|
+
return booking.checkout?.refundedOn != null;
|
|
12
|
+
}
|
|
13
|
+
export function serviceBookingAllowPromisePay(booking) {
|
|
14
|
+
return booking.allowPromiseToPay === true;
|
|
15
|
+
}
|
|
16
|
+
export function serviceBookingIsCanceled(booking) {
|
|
17
|
+
return booking.status === "Canceled";
|
|
18
|
+
}
|
|
19
|
+
export function serviceBookingIsApproved(booking) {
|
|
20
|
+
return booking.status === "Approved";
|
|
21
|
+
}
|
|
22
|
+
export function serviceBookingIsDeclined(booking) {
|
|
23
|
+
return booking.status === "Rejected";
|
|
24
|
+
}
|
|
25
|
+
export function serviceBookingIsPending(booking) {
|
|
26
|
+
return booking.status === "Pending";
|
|
27
|
+
}
|
|
28
|
+
export function serviceBookingHasApprovalDecision(booking) {
|
|
29
|
+
return serviceBookingIsDeclined(booking) || serviceBookingIsApproved(booking);
|
|
30
|
+
}
|
|
31
|
+
export function serviceBookingCanBePaid(booking) {
|
|
32
|
+
if (serviceBookingIsCanceled(booking)) {
|
|
33
|
+
return {
|
|
34
|
+
valid: false,
|
|
35
|
+
errorMessage: "You can not pay for a canceled booking.",
|
|
36
|
+
};
|
|
37
|
+
}
|
|
38
|
+
if (serviceBookingIsPaid(booking)) {
|
|
39
|
+
return {
|
|
40
|
+
valid: false,
|
|
41
|
+
errorMessage: "You cannot pay for a booking that has already been paid for.",
|
|
42
|
+
};
|
|
43
|
+
}
|
|
44
|
+
if (serviceBookingIsDeclined(booking)) {
|
|
45
|
+
return {
|
|
46
|
+
valid: false,
|
|
47
|
+
errorMessage: "You can not pay for a declined booking request.",
|
|
48
|
+
};
|
|
49
|
+
}
|
|
50
|
+
if (serviceBookingIsPending(booking) && serviceBookingIsRequest(booking)) {
|
|
51
|
+
return {
|
|
52
|
+
valid: false,
|
|
53
|
+
errorMessage: "You cannot pay for a pending booking request.",
|
|
54
|
+
};
|
|
55
|
+
}
|
|
56
|
+
return { valid: true };
|
|
57
|
+
}
|
|
58
|
+
export function serviceBookingCanBeRefunded(booking) {
|
|
59
|
+
if (serviceBookingIsCanceled(booking)) {
|
|
60
|
+
return {
|
|
61
|
+
valid: false,
|
|
62
|
+
errorMessage: "You cannot refund an already canceled booking.",
|
|
63
|
+
};
|
|
64
|
+
}
|
|
65
|
+
if (serviceBookingIsRefunded(booking)) {
|
|
66
|
+
return {
|
|
67
|
+
valid: false,
|
|
68
|
+
errorMessage: "You cannot refund an already refunded booking.",
|
|
69
|
+
};
|
|
70
|
+
}
|
|
71
|
+
if (!serviceBookingIsPaid(booking)) {
|
|
72
|
+
return {
|
|
73
|
+
valid: false,
|
|
74
|
+
errorMessage: "You can not refund a booking that has not been paid for.",
|
|
75
|
+
};
|
|
76
|
+
}
|
|
77
|
+
return { valid: true };
|
|
78
|
+
}
|
|
79
|
+
export function serviceBookingCanHaveApprovalDecision(booking) {
|
|
80
|
+
if (!serviceBookingIsRequest(booking)) {
|
|
81
|
+
return {
|
|
82
|
+
valid: false,
|
|
83
|
+
errorMessage: "Approval decisions can only be made on booking requests.",
|
|
84
|
+
};
|
|
85
|
+
}
|
|
86
|
+
if (serviceBookingIsCanceled(booking)) {
|
|
87
|
+
return {
|
|
88
|
+
valid: false,
|
|
89
|
+
errorMessage: "Approval decisions can not be made on canceled booking requests.",
|
|
90
|
+
};
|
|
91
|
+
}
|
|
92
|
+
if (serviceBookingIsConfirmed(booking)) {
|
|
93
|
+
return {
|
|
94
|
+
valid: false,
|
|
95
|
+
errorMessage: "Approval decisions can not be made on confirmed booking requests.",
|
|
96
|
+
};
|
|
97
|
+
}
|
|
98
|
+
return { valid: true };
|
|
99
|
+
}
|
|
100
|
+
export function serviceBookingCanBeCanceled(service, booking) {
|
|
101
|
+
if (serviceBookingIsCanceled(booking)) {
|
|
102
|
+
return {
|
|
103
|
+
valid: false,
|
|
104
|
+
errorMessage: "Canceled booking or booking requests may not be canceled.",
|
|
105
|
+
};
|
|
106
|
+
}
|
|
107
|
+
if (serviceBookingIsRefunded(booking)) {
|
|
108
|
+
return {
|
|
109
|
+
valid: false,
|
|
110
|
+
errorMessage: "You can not cancel an already refunded booking.",
|
|
111
|
+
};
|
|
112
|
+
}
|
|
113
|
+
if (serviceBookingIsDeclined(booking)) {
|
|
114
|
+
return {
|
|
115
|
+
valid: false,
|
|
116
|
+
errorMessage: "Declined booking requests may not be canceled.",
|
|
117
|
+
};
|
|
118
|
+
}
|
|
119
|
+
return { valid: true };
|
|
120
|
+
}
|
|
121
|
+
export function serviceBookingCanBeConfirmed(booking) {
|
|
122
|
+
if (serviceBookingIsCanceled(booking)) {
|
|
123
|
+
return {
|
|
124
|
+
valid: false,
|
|
125
|
+
errorMessage: "Canceled bookings or booking requests can not be confirmed.",
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
return { valid: true };
|
|
129
|
+
}
|
|
130
|
+
//# sourceMappingURL=serviceBookingStatusUtils.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceBookingStatusUtils.js","sourceRoot":"","sources":["../../../src/utils/service/serviceBookingStatusUtils.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ServiceBookingAddOnExt, ServiceBookingFeeExt, ServiceBookingPriceBreakdownExt, ServiceBookingDayExt, ServiceBookingExt } from "../../extendedSchemas";
|
|
2
|
+
import { LuxonDateRange } from "../luxonUtils";
|
|
3
|
+
export type ServiceBookingAddOnBase = Omit<ServiceBookingAddOnExt, "id" | "serviceBookingDayId" | "serviceBookingDay">;
|
|
4
|
+
export type ServiceBookingPackageBase = Omit<ServiceBookingAddOnExt, "id" | "serviceBookingDayId" | "serviceBookingDay">;
|
|
5
|
+
export type ServiceBookingFeeBase = Omit<ServiceBookingFeeExt, "id" | "serviceBookingDayId" | "serviceBookingDay" | "serviceBookingId" | "serviceBooking">;
|
|
6
|
+
export type ServiceBookingPriceBreakdownBase = Omit<ServiceBookingPriceBreakdownExt, "id" | "serviceBookingDayId" | "serviceBookingDay">;
|
|
7
|
+
export type ServiceBookingDayBase = Omit<ServiceBookingDayExt, "id" | "serviceBookingRequestId" | "serviceBookingRequest">;
|
|
8
|
+
export type ServiceBookingBase = Pick<ServiceBookingExt, "bookedDays" | "timezone" | "additionalFees">;
|
|
9
|
+
export type ServiceBookingAddonBaseT = ServiceBookingAddOnBase;
|
|
10
|
+
export type ServiceBookingPackageBaseT = ServiceBookingPackageBase;
|
|
11
|
+
export type ServiceBookingFeeBaseT = ServiceBookingFeeBase;
|
|
12
|
+
export type ServiceBookingPriceBreakdownBaseT = Omit<ServiceBookingPriceBreakdownBase, "startDate" | "endDate"> & {
|
|
13
|
+
dateTimeRange: LuxonDateRange;
|
|
14
|
+
};
|
|
15
|
+
export type ServiceBookingDayBaseT = Omit<ServiceBookingDayBase, "startDate" | "endDate"> & {
|
|
16
|
+
dateTimeRange: LuxonDateRange;
|
|
17
|
+
};
|
|
18
|
+
export type ServiceBookingBaseT = ServiceBookingBase;
|
|
19
|
+
//# sourceMappingURL=serviceBookingTypes.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceBookingTypes.d.ts","sourceRoot":"","sources":["../../../src/utils/service/serviceBookingTypes.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,sBAAsB,EACtB,oBAAoB,EACpB,+BAA+B,EAC/B,oBAAoB,EAGpB,iBAAiB,EAClB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,MAAM,eAAe,CAAC;AAE/C,MAAM,MAAM,uBAAuB,GAAG,IAAI,CACxC,sBAAsB,EACtB,IAAI,GAAG,qBAAqB,GAAG,mBAAmB,CACnD,CAAC;AACF,MAAM,MAAM,yBAAyB,GAAG,IAAI,CAC1C,sBAAsB,EACtB,IAAI,GAAG,qBAAqB,GAAG,mBAAmB,CACnD,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,oBAAoB,EAClB,IAAI,GACJ,qBAAqB,GACrB,mBAAmB,GACnB,kBAAkB,GAClB,gBAAgB,CACnB,CAAC;AACF,MAAM,MAAM,gCAAgC,GAAG,IAAI,CACjD,+BAA+B,EAC/B,IAAI,GAAG,qBAAqB,GAAG,mBAAmB,CACnD,CAAC;AACF,MAAM,MAAM,qBAAqB,GAAG,IAAI,CACtC,oBAAoB,EACpB,IAAI,GAAG,yBAAyB,GAAG,uBAAuB,CAC3D,CAAC;AACF,MAAM,MAAM,kBAAkB,GAAG,IAAI,CACnC,iBAAiB,EACjB,YAAY,GAAG,UAAU,GAAG,gBAAgB,CAC7C,CAAC;AAEF,MAAM,MAAM,wBAAwB,GAAG,uBAAuB,CAAC;AAC/D,MAAM,MAAM,0BAA0B,GAAG,yBAAyB,CAAC;AACnE,MAAM,MAAM,sBAAsB,GAAG,qBAAqB,CAAC;AAC3D,MAAM,MAAM,iCAAiC,GAAG,IAAI,CAClD,gCAAgC,EAChC,WAAW,GAAG,SAAS,CACxB,GAAG;IACF,aAAa,EAAE,cAAc,CAAC;CAC/B,CAAC;AACF,MAAM,MAAM,sBAAsB,GAAG,IAAI,CACvC,qBAAqB,EACrB,WAAW,GAAG,SAAS,CACxB,GAAG;IACF,aAAa,EAAE,cAAc,CAAC;CAC/B,CAAC;AACF,MAAM,MAAM,mBAAmB,GAAG,kBAAkB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceBookingTypes.js","sourceRoot":"","sources":["../../../src/utils/service/serviceBookingTypes.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
import { ServiceExt } from "../../extendedSchemas";
|
|
2
|
+
import { DeepPartial } from "../typeUtils";
|
|
3
|
+
export declare function serviceToDb(service: DeepPartial<ServiceExt>): DeepPartial<ServiceExt>;
|
|
4
|
+
export declare function serviceFromDb(service: ServiceExt): ServiceExt;
|
|
5
|
+
//# sourceMappingURL=serviceDBUtils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"serviceDBUtils.d.ts","sourceRoot":"","sources":["../../../src/utils/service/serviceDBUtils.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,MAAM,uBAAuB,CAAC;AACnD,OAAO,EAAE,WAAW,EAAE,MAAM,cAAc,CAAC;AAQ3C,wBAAgB,WAAW,CACzB,OAAO,EAAE,WAAW,CAAC,UAAU,CAAC,GAC/B,WAAW,CAAC,UAAU,CAAC,CAoBzB;AAED,wBAAgB,aAAa,CAAC,OAAO,EAAE,UAAU,GAAG,UAAU,CAmB7D"}
|