@driveflux/api-functions 0.0.2
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/auth/confirm.d.ts +33 -0
- package/dist/auth/confirm.d.ts.map +1 -0
- package/dist/auth/confirm.js +88 -0
- package/dist/auth/confirm.js.map +1 -0
- package/dist/auth/emails.d.ts +4 -0
- package/dist/auth/emails.d.ts.map +1 -0
- package/dist/auth/emails.js +51 -0
- package/dist/auth/emails.js.map +1 -0
- package/dist/auth/formatter.d.ts +2 -0
- package/dist/auth/formatter.d.ts.map +1 -0
- package/dist/auth/formatter.js +249 -0
- package/dist/auth/formatter.js.map +1 -0
- package/dist/auth/otp.d.ts +44 -0
- package/dist/auth/otp.d.ts.map +1 -0
- package/dist/auth/otp.js +154 -0
- package/dist/auth/otp.js.map +1 -0
- package/dist/auth/register.d.ts +31 -0
- package/dist/auth/register.d.ts.map +1 -0
- package/dist/auth/register.js +128 -0
- package/dist/auth/register.js.map +1 -0
- package/dist/auth/tokens.d.ts +62 -0
- package/dist/auth/tokens.d.ts.map +1 -0
- package/dist/auth/tokens.js +129 -0
- package/dist/auth/tokens.js.map +1 -0
- package/dist/auth/verifications.d.ts +28 -0
- package/dist/auth/verifications.d.ts.map +1 -0
- package/dist/auth/verifications.js +174 -0
- package/dist/auth/verifications.js.map +1 -0
- package/dist/constants.d.ts +5 -0
- package/dist/constants.d.ts.map +1 -0
- package/dist/constants.js +5 -0
- package/dist/constants.js.map +1 -0
- package/dist/global.d.js +1 -0
- package/dist/mailjet/calls/manage-contacts-in-list.d.ts +21 -0
- package/dist/mailjet/calls/manage-contacts-in-list.d.ts.map +1 -0
- package/dist/mailjet/calls/manage-contacts-in-list.js +28 -0
- package/dist/mailjet/calls/manage-contacts-in-list.js.map +1 -0
- package/dist/mailjet/calls/manage-subscription-status.d.ts +15 -0
- package/dist/mailjet/calls/manage-subscription-status.d.ts.map +1 -0
- package/dist/mailjet/calls/manage-subscription-status.js +16 -0
- package/dist/mailjet/calls/manage-subscription-status.js.map +1 -0
- package/dist/mailjet/calls/request-service.d.ts +7 -0
- package/dist/mailjet/calls/request-service.d.ts.map +1 -0
- package/dist/mailjet/calls/request-service.js +24 -0
- package/dist/mailjet/calls/request-service.js.map +1 -0
- package/dist/mailjet/refresh-email-preferences.d.ts +23 -0
- package/dist/mailjet/refresh-email-preferences.d.ts.map +1 -0
- package/dist/mailjet/refresh-email-preferences.js +43 -0
- package/dist/mailjet/refresh-email-preferences.js.map +1 -0
- package/dist/mailjet/set-contact.d.ts +21 -0
- package/dist/mailjet/set-contact.d.ts.map +1 -0
- package/dist/mailjet/set-contact.js +39 -0
- package/dist/mailjet/set-contact.js.map +1 -0
- package/dist/mailjet/types.d.ts +31 -0
- package/dist/mailjet/types.d.ts.map +1 -0
- package/dist/mailjet/types.js +2 -0
- package/dist/mailjet/types.js.map +1 -0
- package/dist/mailjet/utils/convert-to-array.d.ts +6 -0
- package/dist/mailjet/utils/convert-to-array.d.ts.map +1 -0
- package/dist/mailjet/utils/convert-to-array.js +23 -0
- package/dist/mailjet/utils/convert-to-array.js.map +1 -0
- package/dist/mailjet/utils/extract-email-preferences.d.ts +17 -0
- package/dist/mailjet/utils/extract-email-preferences.d.ts.map +1 -0
- package/dist/mailjet/utils/extract-email-preferences.js +51 -0
- package/dist/mailjet/utils/extract-email-preferences.js.map +1 -0
- package/dist/mailjet/utils/lists.d.ts +13 -0
- package/dist/mailjet/utils/lists.d.ts.map +1 -0
- package/dist/mailjet/utils/lists.js +41 -0
- package/dist/mailjet/utils/lists.js.map +1 -0
- package/dist/mailjet/utils/update-email-references.d.ts +4 -0
- package/dist/mailjet/utils/update-email-references.d.ts.map +1 -0
- package/dist/mailjet/utils/update-email-references.js +31 -0
- package/dist/mailjet/utils/update-email-references.js.map +1 -0
- package/dist/notion/client.d.ts +12 -0
- package/dist/notion/client.d.ts.map +1 -0
- package/dist/notion/client.js +63 -0
- package/dist/notion/client.js.map +1 -0
- package/dist/notion/helpful.d.ts +7 -0
- package/dist/notion/helpful.d.ts.map +1 -0
- package/dist/notion/helpful.js +32 -0
- package/dist/notion/helpful.js.map +1 -0
- package/dist/notion/schemas/block.d.ts +89 -0
- package/dist/notion/schemas/block.d.ts.map +1 -0
- package/dist/notion/schemas/block.js +89 -0
- package/dist/notion/schemas/block.js.map +1 -0
- package/dist/notion/schemas/common.d.ts +25 -0
- package/dist/notion/schemas/common.d.ts.map +1 -0
- package/dist/notion/schemas/common.js +31 -0
- package/dist/notion/schemas/common.js.map +1 -0
- package/dist/notion/schemas/database.d.ts +517 -0
- package/dist/notion/schemas/database.d.ts.map +1 -0
- package/dist/notion/schemas/database.js +222 -0
- package/dist/notion/schemas/database.js.map +1 -0
- package/dist/notion/schemas/emoji.d.ts +12 -0
- package/dist/notion/schemas/emoji.d.ts.map +1 -0
- package/dist/notion/schemas/emoji.js +6 -0
- package/dist/notion/schemas/emoji.js.map +1 -0
- package/dist/notion/schemas/file.d.ts +43 -0
- package/dist/notion/schemas/file.d.ts.map +1 -0
- package/dist/notion/schemas/file.js +18 -0
- package/dist/notion/schemas/file.js.map +1 -0
- package/dist/notion/schemas/kb.d.ts +1526 -0
- package/dist/notion/schemas/kb.d.ts.map +1 -0
- package/dist/notion/schemas/kb.js +74 -0
- package/dist/notion/schemas/kb.js.map +1 -0
- package/dist/notion/schemas/page.d.ts +608 -0
- package/dist/notion/schemas/page.d.ts.map +1 -0
- package/dist/notion/schemas/page.js +181 -0
- package/dist/notion/schemas/page.js.map +1 -0
- package/dist/notion/schemas/parent.d.ts +42 -0
- package/dist/notion/schemas/parent.d.ts.map +1 -0
- package/dist/notion/schemas/parent.js +18 -0
- package/dist/notion/schemas/parent.js.map +1 -0
- package/dist/notion/schemas/user.d.ts +83 -0
- package/dist/notion/schemas/user.d.ts.map +1 -0
- package/dist/notion/schemas/user.js +31 -0
- package/dist/notion/schemas/user.js.map +1 -0
- package/dist/reservation/agree.d.ts +3 -0
- package/dist/reservation/agree.d.ts.map +1 -0
- package/dist/reservation/agree.js +23 -0
- package/dist/reservation/agree.js.map +1 -0
- package/dist/reservation/checks.d.ts +8 -0
- package/dist/reservation/checks.d.ts.map +1 -0
- package/dist/reservation/checks.js +28 -0
- package/dist/reservation/checks.js.map +1 -0
- package/dist/reservation/display-vehicle.d.ts +1152 -0
- package/dist/reservation/display-vehicle.d.ts.map +1 -0
- package/dist/reservation/display-vehicle.js +244 -0
- package/dist/reservation/display-vehicle.js.map +1 -0
- package/dist/reservation/fetch-or-create.d.ts +11 -0
- package/dist/reservation/fetch-or-create.d.ts.map +1 -0
- package/dist/reservation/fetch-or-create.js +207 -0
- package/dist/reservation/fetch-or-create.js.map +1 -0
- package/dist/reservation/invoice.d.ts +12 -0
- package/dist/reservation/invoice.d.ts.map +1 -0
- package/dist/reservation/invoice.js +248 -0
- package/dist/reservation/invoice.js.map +1 -0
- package/dist/reservation/payer.d.ts +5 -0
- package/dist/reservation/payer.d.ts.map +1 -0
- package/dist/reservation/payer.js +38 -0
- package/dist/reservation/payer.js.map +1 -0
- package/dist/reservation/reserve.d.ts +5 -0
- package/dist/reservation/reserve.d.ts.map +1 -0
- package/dist/reservation/reserve.js +44 -0
- package/dist/reservation/reserve.js.map +1 -0
- package/dist/reservation/types.d.ts +28 -0
- package/dist/reservation/types.d.ts.map +1 -0
- package/dist/reservation/types.js +2 -0
- package/dist/reservation/types.js.map +1 -0
- package/dist/reservation/vehicle.d.ts +6 -0
- package/dist/reservation/vehicle.d.ts.map +1 -0
- package/dist/reservation/vehicle.js +32 -0
- package/dist/reservation/vehicle.js.map +1 -0
- package/dist/slack.d.ts +19 -0
- package/dist/slack.d.ts.map +1 -0
- package/dist/slack.js +105 -0
- package/dist/slack.js.map +1 -0
- package/dist/validation.d.ts +63 -0
- package/dist/validation.d.ts.map +1 -0
- package/dist/validation.js +99 -0
- package/dist/validation.js.map +1 -0
- package/dist/vehicle/vehicle-pricing/constants.d.ts +91 -0
- package/dist/vehicle/vehicle-pricing/constants.d.ts.map +1 -0
- package/dist/vehicle/vehicle-pricing/constants.js +142 -0
- package/dist/vehicle/vehicle-pricing/constants.js.map +1 -0
- package/dist/vehicle/vehicle-pricing/index.d.ts +79 -0
- package/dist/vehicle/vehicle-pricing/index.d.ts.map +1 -0
- package/dist/vehicle/vehicle-pricing/index.js +169 -0
- package/dist/vehicle/vehicle-pricing/index.js.map +1 -0
- package/dist/vehicle/vehicle-pricing/types.d.ts +43 -0
- package/dist/vehicle/vehicle-pricing/types.d.ts.map +1 -0
- package/dist/vehicle/vehicle-pricing/types.js +2 -0
- package/dist/vehicle/vehicle-pricing/types.js.map +1 -0
- package/package.json +121 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display-vehicle.d.ts","sourceRoot":"","sources":["../../src/reservation/display-vehicle.ts"],"names":[],"mappings":"AACA,OAAO,EACN,KAAK,cAAc,EAOnB,KAAK,OAAO,EAIZ,MAAM,eAAe,CAAA;AAYtB,eAAO,MAAM,mBAAmB,GAC/B,gBAAgB,cAAc,GAAG,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;SAKvC,CAAA;AAED,eAAO,MAAM,+BAA+B,GAC3C,gBAAgB,cAAc,GAAG,MAAM,EACvC,gBAAgB,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;eAsCtB,CAAA;AAED,eAAO,MAAM,gCAAgC,GAC5C,gBAAgB,cAAc,GAAG,MAAM,EACvC,eAAe,MAAM;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;UA0BE;QAAE,OAAO,EAAE;YAAE,KAAK,EAAE,MAAM,CAAA;SAAE,CAAA;KAAE;eACrD,CAAA;AAED,eAAO,MAAM,yBAAyB,GAAI,IAAI,cAAc;;;;;;;;;;;;;;;;;;;;;;;;;;;CAoB3D,CAAA;AAED,eAAO,MAAM,eAAe,GAC3B,QAAQ,cAAc,CAAC,QAAQ,CAAC,KAC9B,OAAO,CAAC,QAAQ,CAMlB,CAAA"}
|
|
@@ -0,0 +1,244 @@
|
|
|
1
|
+
import { config } from '@driveflux/config/backend';
|
|
2
|
+
import { prisma, } from '@driveflux/db';
|
|
3
|
+
import { generateId } from '@driveflux/db/id';
|
|
4
|
+
import { createPricingController } from '@driveflux/db/models/vehicle';
|
|
5
|
+
import { getFluxExcessMileage, getFluxPiceMatrix, getHostExcessMileage, getHostsMatrix, getRecommendedMotorcycleDeposit, getStartFeeMatrix, } from '../vehicle/vehicle-pricing';
|
|
6
|
+
export const fetchDisplayVehicle = async (displayVehicle) => {
|
|
7
|
+
return typeof displayVehicle === 'string'
|
|
8
|
+
? await prisma.displayVehicle.findFirst({ where: { id: displayVehicle } })
|
|
9
|
+
: displayVehicle;
|
|
10
|
+
};
|
|
11
|
+
export const createVehicleFromDisplayVehicle = async (displayVehicle, selectedColor) => {
|
|
12
|
+
const dv = await fetchDisplayVehicle(displayVehicle);
|
|
13
|
+
if (!dv || typeof dv !== 'object')
|
|
14
|
+
return;
|
|
15
|
+
if (!dv.details)
|
|
16
|
+
return;
|
|
17
|
+
const mainImage = dv.images.main.find((m) => m.variant === selectedColor)?.url;
|
|
18
|
+
const vehicleData = {
|
|
19
|
+
id: generateId('Vehicle'),
|
|
20
|
+
...transformBasicVehicleData(dv),
|
|
21
|
+
images: [
|
|
22
|
+
...(mainImage ? [transfromSingleImage(mainImage)] : []),
|
|
23
|
+
...transformImages(dv.images),
|
|
24
|
+
],
|
|
25
|
+
...transformBasePrices(dv.pricing),
|
|
26
|
+
pricing: transformPriceMatrix(dv.type, dv.pricing),
|
|
27
|
+
details: transformDetails(dv.details, selectedColor),
|
|
28
|
+
host: {
|
|
29
|
+
connect: {
|
|
30
|
+
id: dv.defaultHostId,
|
|
31
|
+
},
|
|
32
|
+
},
|
|
33
|
+
displayVehicle: {
|
|
34
|
+
connect: {
|
|
35
|
+
id: dv.id,
|
|
36
|
+
},
|
|
37
|
+
},
|
|
38
|
+
};
|
|
39
|
+
return await prisma.vehicle.create({
|
|
40
|
+
data: vehicleData,
|
|
41
|
+
include: {
|
|
42
|
+
host: true,
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
};
|
|
46
|
+
export const transfromVehicleDisplayToVehicle = async (displayVehicle, selectedColor) => {
|
|
47
|
+
const dv = await fetchDisplayVehicle(displayVehicle);
|
|
48
|
+
if (!dv || typeof dv !== 'object')
|
|
49
|
+
return;
|
|
50
|
+
if (!dv.details)
|
|
51
|
+
return;
|
|
52
|
+
const mainImage = dv.images.main.find((m) => m.variant === selectedColor)?.url;
|
|
53
|
+
return {
|
|
54
|
+
id: dv.id,
|
|
55
|
+
...transformBasicVehicleData(dv),
|
|
56
|
+
images: [
|
|
57
|
+
...(mainImage ? [transfromSingleImage(mainImage)] : []),
|
|
58
|
+
...transformImages(dv.images),
|
|
59
|
+
],
|
|
60
|
+
...transformBasePrices(dv.pricing),
|
|
61
|
+
pricing: transformPriceMatrix(dv.type, dv.pricing),
|
|
62
|
+
details: transformDetails(dv.details, selectedColor),
|
|
63
|
+
host: {
|
|
64
|
+
address: {
|
|
65
|
+
state: 'Kuala Lumpur',
|
|
66
|
+
},
|
|
67
|
+
},
|
|
68
|
+
};
|
|
69
|
+
};
|
|
70
|
+
export const transformBasicVehicleData = (dv) => {
|
|
71
|
+
return {
|
|
72
|
+
registrationNumber: null,
|
|
73
|
+
featured: false,
|
|
74
|
+
searchRankScore: 300,
|
|
75
|
+
compositeSearchScore: 300,
|
|
76
|
+
status: 'reserved',
|
|
77
|
+
imagesNotActual: false,
|
|
78
|
+
temporary: true,
|
|
79
|
+
vin: null,
|
|
80
|
+
engineNumber: null,
|
|
81
|
+
make: dv.make,
|
|
82
|
+
vehicleModel: dv.vehicleModel,
|
|
83
|
+
variant: dv.variant,
|
|
84
|
+
year: dv.year,
|
|
85
|
+
type: dv.type,
|
|
86
|
+
niceName: `${dv.make} ${dv.vehicleModel} ${dv.variant} ${dv.year}`,
|
|
87
|
+
niceNameShort: `${dv.make} ${dv.vehicleModel}`,
|
|
88
|
+
appliedCoupon: dv.appliedCoupon,
|
|
89
|
+
};
|
|
90
|
+
};
|
|
91
|
+
export const transformImages = (images) => {
|
|
92
|
+
return [
|
|
93
|
+
transfromSingleImage(images.exterior[0].url, 'exterior'),
|
|
94
|
+
transfromSingleImage(images.interior[0].url, 'interior'),
|
|
95
|
+
...images.gallery.map((i) => transfromSingleImage(i.url)),
|
|
96
|
+
];
|
|
97
|
+
};
|
|
98
|
+
const transfromSingleImage = (imageUrl, inspectionType) => {
|
|
99
|
+
return {
|
|
100
|
+
default: imageUrl,
|
|
101
|
+
blurBase64: null,
|
|
102
|
+
thumbnail: null,
|
|
103
|
+
small: null,
|
|
104
|
+
medium: null,
|
|
105
|
+
large: null,
|
|
106
|
+
description: null,
|
|
107
|
+
inspection: !!inspectionType,
|
|
108
|
+
inspectionType: inspectionType || null,
|
|
109
|
+
notActualPhoto: true,
|
|
110
|
+
};
|
|
111
|
+
};
|
|
112
|
+
const transformBasePrices = (pricing) => {
|
|
113
|
+
return {
|
|
114
|
+
basePrice: pricing.matrix.plan36.lite,
|
|
115
|
+
basePricePlan1: pricing.matrix.plan1.lite,
|
|
116
|
+
basePricePlan12: pricing.matrix.plan12.lite,
|
|
117
|
+
basePricePlan24: pricing.matrix.plan24.lite,
|
|
118
|
+
basePricePlan36: pricing.matrix.plan36.lite,
|
|
119
|
+
basePricePlan60: pricing.matrix.plan60.lite,
|
|
120
|
+
};
|
|
121
|
+
};
|
|
122
|
+
const transformPriceMatrix = (vehicleType, pricing) => {
|
|
123
|
+
const baseline = pricing?.matrix.plan36.lite;
|
|
124
|
+
const ultraTier = 'tier1';
|
|
125
|
+
const fluxPriceCoefficient = 25;
|
|
126
|
+
const priceMatrix = pricing.matrix;
|
|
127
|
+
const flatPricing = false;
|
|
128
|
+
const bought = false;
|
|
129
|
+
const tmv = pricing.tmv;
|
|
130
|
+
const gfv = null;
|
|
131
|
+
const gfvNotApplicable = true;
|
|
132
|
+
const { availablePlans, availableMileagePackages } = getNonZeroKeys(priceMatrix);
|
|
133
|
+
const pricingController = createPricingController({
|
|
134
|
+
coefficient: fluxPriceCoefficient,
|
|
135
|
+
vehicleType,
|
|
136
|
+
});
|
|
137
|
+
const startFeeMatrix = excludeServiceFeesFrom(getStartFeeMatrix(pricingController, baseline, flatPricing));
|
|
138
|
+
const hostMatrix = excludeServiceFeesFrom(getHostsMatrix(pricingController, baseline, ultraTier, flatPricing));
|
|
139
|
+
const hostExcessMileage = getHostExcessMileage(pricingController, baseline);
|
|
140
|
+
const fluxPriceMatrix = excludeServiceFeesFrom(getFluxPiceMatrix(pricingController, vehicleType, baseline, hostMatrix, ultraTier, flatPricing));
|
|
141
|
+
const fluxExcessMileage = getFluxExcessMileage(pricingController, baseline);
|
|
142
|
+
const recommendedDeposit = pricing.refundableDeposit || vehicleType === 'motorcycle'
|
|
143
|
+
? getRecommendedMotorcycleDeposit(baseline)
|
|
144
|
+
: null;
|
|
145
|
+
return {
|
|
146
|
+
tmv,
|
|
147
|
+
gfv,
|
|
148
|
+
gfvNotApplicable,
|
|
149
|
+
ultraTier,
|
|
150
|
+
baseline: baseline,
|
|
151
|
+
recommendedDeposit,
|
|
152
|
+
availableMileagePackages,
|
|
153
|
+
availablePlans,
|
|
154
|
+
bought,
|
|
155
|
+
flatPricing,
|
|
156
|
+
fluxPrice: {
|
|
157
|
+
coefficient: fluxPriceCoefficient,
|
|
158
|
+
matrix: fluxPriceMatrix,
|
|
159
|
+
originalMatrix: fluxPriceMatrix,
|
|
160
|
+
excessMileage: fluxExcessMileage,
|
|
161
|
+
originalExcessMileage: fluxExcessMileage,
|
|
162
|
+
matrixComments: null,
|
|
163
|
+
add: null,
|
|
164
|
+
},
|
|
165
|
+
hostTake: {
|
|
166
|
+
matrix: hostMatrix,
|
|
167
|
+
originalMatrix: hostMatrix,
|
|
168
|
+
excessMileage: hostExcessMileage,
|
|
169
|
+
originalExcessMileage: hostExcessMileage,
|
|
170
|
+
matrixComments: null,
|
|
171
|
+
},
|
|
172
|
+
startFee: {
|
|
173
|
+
matrix: startFeeMatrix,
|
|
174
|
+
originalMatrix: startFeeMatrix,
|
|
175
|
+
matrixComments: null,
|
|
176
|
+
},
|
|
177
|
+
};
|
|
178
|
+
};
|
|
179
|
+
const getNonZeroKeys = (matrix) => {
|
|
180
|
+
const planKeys = new Set();
|
|
181
|
+
const mileageKeys = new Set();
|
|
182
|
+
for (const [plan, mileageMap] of Object.entries(matrix)) {
|
|
183
|
+
const entries = Object.entries(mileageMap ?? {});
|
|
184
|
+
const hasNonZero = entries.some(([_, value]) => (value ?? 0) > 0);
|
|
185
|
+
if (hasNonZero) {
|
|
186
|
+
planKeys.add(plan);
|
|
187
|
+
for (const [mileage, value] of entries) {
|
|
188
|
+
if ((value ?? 0) > 0) {
|
|
189
|
+
mileageKeys.add(mileage);
|
|
190
|
+
}
|
|
191
|
+
}
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
return {
|
|
195
|
+
availablePlans: Array.from(planKeys),
|
|
196
|
+
availableMileagePackages: Array.from(mileageKeys),
|
|
197
|
+
};
|
|
198
|
+
};
|
|
199
|
+
const _getInspection = () => {
|
|
200
|
+
return {
|
|
201
|
+
exterior: 5,
|
|
202
|
+
interior: 5,
|
|
203
|
+
engine: 5,
|
|
204
|
+
frame: 5,
|
|
205
|
+
total: 5,
|
|
206
|
+
comment: 'COMMENT HERE',
|
|
207
|
+
};
|
|
208
|
+
};
|
|
209
|
+
const transformDetails = (details, selectColor) => {
|
|
210
|
+
const color = selectColor || details.colors[0].name || '';
|
|
211
|
+
return {
|
|
212
|
+
numberOfSeats: details.numberOfSeats,
|
|
213
|
+
doors: details.doors,
|
|
214
|
+
bodyType: details.bodyType,
|
|
215
|
+
transmission: details.transmission,
|
|
216
|
+
engineType: details.fuelType,
|
|
217
|
+
engineCapacity: details.fuelType === 'electric'
|
|
218
|
+
? details.batteryCapacity
|
|
219
|
+
: details.engineCapacity,
|
|
220
|
+
drivetrain: details.drivetrain,
|
|
221
|
+
accelerationTo100km: details.accelerationTo100km,
|
|
222
|
+
fuelConsumptionLitersPer100Km: details.fuelConsumptionLitersPer100Km,
|
|
223
|
+
color,
|
|
224
|
+
features: details.features,
|
|
225
|
+
condition: 'new',
|
|
226
|
+
};
|
|
227
|
+
};
|
|
228
|
+
const excludeServiceFeesFrom = (originalMatrix) => {
|
|
229
|
+
const matrix = {};
|
|
230
|
+
for (const [planKey, planValue] of Object.entries(originalMatrix)) {
|
|
231
|
+
if (!planValue)
|
|
232
|
+
continue;
|
|
233
|
+
if (!matrix[planKey])
|
|
234
|
+
matrix[planKey] = {};
|
|
235
|
+
for (const [mileageKey, price] of Object.entries(planValue)) {
|
|
236
|
+
if (typeof price === 'number') {
|
|
237
|
+
matrix[planKey][mileageKey] =
|
|
238
|
+
price / (1 + config.serviceRate);
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
return matrix;
|
|
243
|
+
};
|
|
244
|
+
//# sourceMappingURL=display-vehicle.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"display-vehicle.js","sourceRoot":"","sources":["../../src/reservation/display-vehicle.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
import { type Business, type SubscriptionReservation, type User, type Vehicle } from '@driveflux/db';
|
|
2
|
+
import { type PromisedResult } from '@driveflux/result';
|
|
3
|
+
import type { ReserveVehicleParams } from './types';
|
|
4
|
+
type FetchOrCreateReservationParams = {
|
|
5
|
+
vehicle: Pick<Vehicle, 'id' | 'make' | 'vehicleModel' | 'variant' | 'year' | 'type'>;
|
|
6
|
+
payer: User | Business;
|
|
7
|
+
body: Pick<ReserveVehicleParams, 'subscribingUser' | 'plan' | 'mileagePackage' | 'couponCode' | 'referralCode' | 'asBusiness' | 'source' | 'paymentIntentId' | 'analytics' | 'deliveryAddresses' | 'deliveryDate' | 'requestUser' | 'ipAddress' | 'freeReservation' | 'freeReservationReason'>;
|
|
8
|
+
};
|
|
9
|
+
export declare const fetchOrCreateReservation: ({ vehicle, payer, body, }: FetchOrCreateReservationParams) => PromisedResult<SubscriptionReservation>;
|
|
10
|
+
export {};
|
|
11
|
+
//# sourceMappingURL=fetch-or-create.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-or-create.d.ts","sourceRoot":"","sources":["../../src/reservation/fetch-or-create.ts"],"names":[],"mappings":"AAAA,OAAO,EACN,KAAK,QAAQ,EAGb,KAAK,uBAAuB,EAC5B,KAAK,IAAI,EACT,KAAK,OAAO,EACZ,MAAM,eAAe,CAAA;AAGtB,OAAO,EAAM,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAM3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEnD,KAAK,8BAA8B,GAAG;IACrC,OAAO,EAAE,IAAI,CACZ,OAAO,EACP,IAAI,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAC5D,CAAA;IACD,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAA;IACtB,IAAI,EAAE,IAAI,CACT,oBAAoB,EAClB,iBAAiB,GACjB,MAAM,GACN,gBAAgB,GAChB,YAAY,GACZ,cAAc,GACd,YAAY,GACZ,QAAQ,GACR,iBAAiB,GACjB,WAAW,GACX,mBAAmB,GACnB,cAAc,GACd,aAAa,GACb,WAAW,GACX,iBAAiB,GACjB,uBAAuB,CACzB,CAAA;CACD,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAU,2BAI5C,8BAA8B,KAAG,cAAc,CAAC,uBAAuB,CA+JzE,CAAA"}
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
import { prisma, } from '@driveflux/db';
|
|
2
|
+
import { generateId } from '@driveflux/db/id';
|
|
3
|
+
import { reportError } from '@driveflux/reporter';
|
|
4
|
+
import { Ok } from '@driveflux/result';
|
|
5
|
+
import { slackLater } from '../slack';
|
|
6
|
+
import { createReservationInvoice, updateReservationInvoiceIfNeeded, } from './invoice';
|
|
7
|
+
export const fetchOrCreateReservation = async ({ vehicle, payer, body, }) => {
|
|
8
|
+
const { subscribingUser, plan, mileagePackage, couponCode, referralCode, asBusiness, source, deliveryAddresses, deliveryDate, analytics, paymentIntentId, freeReservation, freeReservationReason, } = body;
|
|
9
|
+
try {
|
|
10
|
+
const previousReservation = await prisma.subscriptionReservation.findFirst({
|
|
11
|
+
where: {
|
|
12
|
+
userId: subscribingUser.id,
|
|
13
|
+
vehicleId: vehicle.id,
|
|
14
|
+
plan,
|
|
15
|
+
mileagePackage,
|
|
16
|
+
couponCode,
|
|
17
|
+
referralCode,
|
|
18
|
+
asBusiness: !!asBusiness,
|
|
19
|
+
source,
|
|
20
|
+
// If the subscription ID was populated, this means that this reservation was consumed into a subsription,
|
|
21
|
+
// so we shouldn't re-use it
|
|
22
|
+
subscription: null,
|
|
23
|
+
},
|
|
24
|
+
orderBy: {
|
|
25
|
+
updatedAt: 'desc',
|
|
26
|
+
},
|
|
27
|
+
include: {
|
|
28
|
+
invoice: {
|
|
29
|
+
select: {
|
|
30
|
+
id: true,
|
|
31
|
+
voided: true,
|
|
32
|
+
stripePaymentIntentId: true,
|
|
33
|
+
couponCode: true,
|
|
34
|
+
payerId: true,
|
|
35
|
+
discountIds: true,
|
|
36
|
+
lines: true,
|
|
37
|
+
status: true,
|
|
38
|
+
lockedAt: true,
|
|
39
|
+
unlockAt: true,
|
|
40
|
+
locked: true,
|
|
41
|
+
},
|
|
42
|
+
},
|
|
43
|
+
},
|
|
44
|
+
});
|
|
45
|
+
if (previousReservation) {
|
|
46
|
+
if (previousReservation.invoice.voided) {
|
|
47
|
+
return recreateReservationInvoiceAndUpdateReservation(previousReservation, body, vehicle, payer);
|
|
48
|
+
}
|
|
49
|
+
// If the invoice is paid or partially paid, this is a serious problem,
|
|
50
|
+
// we need to make a notification about this and recreate the invoice
|
|
51
|
+
const wrongStatuses = [
|
|
52
|
+
'paid',
|
|
53
|
+
'partiallyPaid',
|
|
54
|
+
'partiallyRefunded',
|
|
55
|
+
'refunded',
|
|
56
|
+
'pendingRefund',
|
|
57
|
+
];
|
|
58
|
+
if (wrongStatuses.includes(previousReservation.invoice.status)) {
|
|
59
|
+
const updatedReservation = await recreateReservationInvoiceAndUpdateReservation(previousReservation, body, vehicle, payer);
|
|
60
|
+
if (updatedReservation.err) {
|
|
61
|
+
return updatedReservation;
|
|
62
|
+
}
|
|
63
|
+
slackLater([
|
|
64
|
+
{
|
|
65
|
+
type: 'header',
|
|
66
|
+
text: {
|
|
67
|
+
type: 'plain_text',
|
|
68
|
+
text: '‼️ Reservation invoice in wrong status',
|
|
69
|
+
emoji: true,
|
|
70
|
+
},
|
|
71
|
+
},
|
|
72
|
+
{
|
|
73
|
+
type: 'section',
|
|
74
|
+
text: {
|
|
75
|
+
type: 'plain_text',
|
|
76
|
+
text: `The reservation invoice ${previousReservation.invoice.id} was in a wrong status (${previousReservation.invoice.status}), it was discarded and a new invoice (${updatedReservation.val.id}) was created, however, investigate the issue.`,
|
|
77
|
+
},
|
|
78
|
+
},
|
|
79
|
+
]);
|
|
80
|
+
return updatedReservation;
|
|
81
|
+
}
|
|
82
|
+
// If the payment intent ID is different, we need to update it
|
|
83
|
+
const updated = await updateReservationInvoiceIfNeeded(previousReservation.invoice, body);
|
|
84
|
+
if (updated.err) {
|
|
85
|
+
return updated;
|
|
86
|
+
}
|
|
87
|
+
// Otherwise, we need to create a new reservation
|
|
88
|
+
return new Ok(previousReservation);
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
catch (error) {
|
|
92
|
+
// We couldn't fetch the reservation, so we create a new one and just log this
|
|
93
|
+
await reportError(error);
|
|
94
|
+
}
|
|
95
|
+
const reservationId = generateId('SubscriptionReservation');
|
|
96
|
+
// Create the reservation invoice
|
|
97
|
+
const invoiceResult = await createReservationInvoice({
|
|
98
|
+
couponCode,
|
|
99
|
+
plan,
|
|
100
|
+
mileagePackage,
|
|
101
|
+
referralCode,
|
|
102
|
+
reservationId,
|
|
103
|
+
paymentIntentId,
|
|
104
|
+
freeReservation,
|
|
105
|
+
freeReservationReason,
|
|
106
|
+
analytics,
|
|
107
|
+
vehicle,
|
|
108
|
+
payer,
|
|
109
|
+
subscribingUser,
|
|
110
|
+
});
|
|
111
|
+
if (invoiceResult.err) {
|
|
112
|
+
return invoiceResult;
|
|
113
|
+
}
|
|
114
|
+
const reservation = await createReservation({
|
|
115
|
+
reservationId,
|
|
116
|
+
invoiceId: invoiceResult.val.id,
|
|
117
|
+
subscribingUserId: subscribingUser.id,
|
|
118
|
+
vehicleId: vehicle.id,
|
|
119
|
+
businessId: payer.object === 'business' ? payer.id : undefined,
|
|
120
|
+
plan,
|
|
121
|
+
mileagePackage,
|
|
122
|
+
couponCode,
|
|
123
|
+
referralCode,
|
|
124
|
+
analytics,
|
|
125
|
+
deliveryAddresses,
|
|
126
|
+
deliveryDate,
|
|
127
|
+
asBusiness,
|
|
128
|
+
source,
|
|
129
|
+
});
|
|
130
|
+
return new Ok(reservation);
|
|
131
|
+
};
|
|
132
|
+
const createReservation = async ({ reservationId, invoiceId, subscribingUserId, vehicleId, businessId, plan, mileagePackage, couponCode, referralCode, analytics, deliveryAddresses, deliveryDate, asBusiness, source, }) => {
|
|
133
|
+
return await prisma.subscriptionReservation.create({
|
|
134
|
+
data: {
|
|
135
|
+
id: reservationId,
|
|
136
|
+
invoice: {
|
|
137
|
+
connect: {
|
|
138
|
+
id: invoiceId,
|
|
139
|
+
},
|
|
140
|
+
},
|
|
141
|
+
user: {
|
|
142
|
+
connect: {
|
|
143
|
+
id: subscribingUserId,
|
|
144
|
+
},
|
|
145
|
+
},
|
|
146
|
+
vehicle: {
|
|
147
|
+
connect: {
|
|
148
|
+
id: vehicleId,
|
|
149
|
+
},
|
|
150
|
+
},
|
|
151
|
+
...(businessId
|
|
152
|
+
? {
|
|
153
|
+
business: {
|
|
154
|
+
connect: {
|
|
155
|
+
id: businessId,
|
|
156
|
+
},
|
|
157
|
+
},
|
|
158
|
+
}
|
|
159
|
+
: undefined),
|
|
160
|
+
plan,
|
|
161
|
+
mileagePackage,
|
|
162
|
+
couponCode: couponCode,
|
|
163
|
+
deliveryAddresses: deliveryAddresses,
|
|
164
|
+
deliveryDate: deliveryDate,
|
|
165
|
+
...(referralCode
|
|
166
|
+
? {
|
|
167
|
+
referral: {
|
|
168
|
+
connect: {
|
|
169
|
+
id: referralCode,
|
|
170
|
+
},
|
|
171
|
+
},
|
|
172
|
+
}
|
|
173
|
+
: undefined),
|
|
174
|
+
asBusiness: !!asBusiness,
|
|
175
|
+
source,
|
|
176
|
+
metadata: {
|
|
177
|
+
analytics,
|
|
178
|
+
},
|
|
179
|
+
},
|
|
180
|
+
});
|
|
181
|
+
};
|
|
182
|
+
const recreateReservationInvoiceAndUpdateReservation = async (previousReservation, body, vehicle, payer) => {
|
|
183
|
+
const invoiceResult = await createReservationInvoice({
|
|
184
|
+
...body,
|
|
185
|
+
reservationId: previousReservation.id,
|
|
186
|
+
vehicle,
|
|
187
|
+
payer,
|
|
188
|
+
});
|
|
189
|
+
if (!invoiceResult.ok) {
|
|
190
|
+
return invoiceResult;
|
|
191
|
+
}
|
|
192
|
+
const invoice = invoiceResult.val;
|
|
193
|
+
const updatedReservation = await prisma.subscriptionReservation.update({
|
|
194
|
+
where: {
|
|
195
|
+
id: previousReservation.id,
|
|
196
|
+
},
|
|
197
|
+
data: {
|
|
198
|
+
invoice: {
|
|
199
|
+
connect: {
|
|
200
|
+
id: invoice.id,
|
|
201
|
+
},
|
|
202
|
+
},
|
|
203
|
+
},
|
|
204
|
+
});
|
|
205
|
+
return new Ok(updatedReservation);
|
|
206
|
+
};
|
|
207
|
+
//# sourceMappingURL=fetch-or-create.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"fetch-or-create.js","sourceRoot":"","sources":["../../src/reservation/fetch-or-create.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { type Business, type Invoice, type User, type Vehicle } from '@driveflux/db';
|
|
2
|
+
import { type PromisedResult } from '@driveflux/result';
|
|
3
|
+
import type { ReserveVehicleParams } from './types';
|
|
4
|
+
type CreateReservationInvoiceParams = Pick<ReserveVehicleParams, 'couponCode' | 'plan' | 'mileagePackage' | 'referralCode' | 'paymentIntentId' | 'freeReservation' | 'freeReservationReason' | 'analytics' | 'subscribingUser'> & {
|
|
5
|
+
reservationId?: string;
|
|
6
|
+
vehicle: Pick<Vehicle, 'id' | 'make' | 'vehicleModel' | 'variant' | 'year' | 'type'>;
|
|
7
|
+
payer: User | Business;
|
|
8
|
+
};
|
|
9
|
+
export declare const updateReservationInvoiceIfNeeded: (oldReservationInvoice: Pick<Invoice, "id" | "couponCode" | "stripePaymentIntentId" | "lines" | "payerId" | "discountIds" | "lockedAt">, newParams: Pick<CreateReservationInvoiceParams, "couponCode" | "paymentIntentId">) => PromisedResult<Invoice>;
|
|
10
|
+
export declare const createReservationInvoice: ({ couponCode, plan, mileagePackage, referralCode, reservationId, paymentIntentId, freeReservation, freeReservationReason, analytics, vehicle, payer, subscribingUser, }: CreateReservationInvoiceParams) => PromisedResult<Invoice>;
|
|
11
|
+
export {};
|
|
12
|
+
//# sourceMappingURL=invoice.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"invoice.d.ts","sourceRoot":"","sources":["../../src/reservation/invoice.ts"],"names":[],"mappings":"AAMA,OAAO,EACN,KAAK,QAAQ,EACb,KAAK,OAAO,EAEZ,KAAK,IAAI,EACT,KAAK,OAAO,EACZ,MAAM,eAAe,CAAA;AAQtB,OAAO,EAAM,KAAK,cAAc,EAAE,MAAM,mBAAmB,CAAA;AAI3D,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,SAAS,CAAA;AAEnD,KAAK,8BAA8B,GAAG,IAAI,CACzC,oBAAoB,EAClB,YAAY,GACZ,MAAM,GACN,gBAAgB,GAChB,cAAc,GACd,iBAAiB,GACjB,iBAAiB,GACjB,uBAAuB,GACvB,WAAW,GACX,iBAAiB,CACnB,GAAG;IACH,aAAa,CAAC,EAAE,MAAM,CAAA;IACtB,OAAO,EAAE,IAAI,CACZ,OAAO,EACP,IAAI,GAAG,MAAM,GAAG,cAAc,GAAG,SAAS,GAAG,MAAM,GAAG,MAAM,CAC5D,CAAA;IACD,KAAK,EAAE,IAAI,GAAG,QAAQ,CAAA;CACtB,CAAA;AAED,eAAO,MAAM,gCAAgC,GAC5C,uBAAuB,IAAI,CAC1B,OAAO,EACL,IAAI,GACJ,YAAY,GACZ,uBAAuB,GACvB,OAAO,GACP,SAAS,GACT,aAAa,GACb,UAAU,CACZ,EACD,WAAW,IAAI,CACd,8BAA8B,EAC9B,YAAY,GAAG,iBAAiB,CAChC,KACC,cAAc,CAAC,OAAO,CA0GxB,CAAA;AAED,eAAO,MAAM,wBAAwB,GAAU,yKAa5C,8BAA8B,KAAG,cAAc,CAAC,OAAO,CA8GzD,CAAA"}
|