Update service name to 'minglarDev' in serverless.yml, adjust transportTotalPrice validation to allow zero values in createActivity.schema.ts, and enhance document handling logic in HostService for improved pickup transport and detail management.
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
service: minglar
|
||||
service: minglarDev
|
||||
|
||||
|
||||
useDotenv: true
|
||||
|
||||
@@ -36,12 +36,11 @@ export const PickupDetailDto = z.object({
|
||||
locationLat: z.number().nullable().optional(),
|
||||
locationLong: z.number().nullable().optional(),
|
||||
locationAddress: z.string().nullable().optional(),
|
||||
transportTotalPrice: z.number().int().min(1),
|
||||
transportTotalPrice: z.number().int().min(0),
|
||||
});
|
||||
|
||||
export const PickupTransportDto = z.object({
|
||||
transportModeXid: z.number().int(),
|
||||
pickupDetails: z.array(PickupDetailDto).optional().default([]),
|
||||
});
|
||||
|
||||
/* ================= EQUIPMENT ================= */
|
||||
@@ -146,6 +145,7 @@ export const CreateActivityDto = z.object({
|
||||
foodTypeIds: z.array(z.number().int()).optional().default([]),
|
||||
cuisineIds: z.array(z.number().int()).optional().default([]),
|
||||
pickupTransports: z.array(PickupTransportDto).optional().default([]),
|
||||
pickupDetails: z.array(PickupDetailDto).optional().default([]),
|
||||
|
||||
navigationModes: z
|
||||
.array(NavigationModeDto)
|
||||
|
||||
@@ -1009,10 +1009,58 @@ export class HostService {
|
||||
},
|
||||
});
|
||||
|
||||
// documents UPSERT
|
||||
// // documents UPSERT
|
||||
// if (documents?.length) {
|
||||
// for (const doc of documents) {
|
||||
// if (!doc.filePath) continue;
|
||||
// const existingDoc = await tx.hostDocuments.findFirst({
|
||||
// where: {
|
||||
// hostXid: updatedHost.id,
|
||||
// documentTypeXid: doc.documentTypeXid,
|
||||
// },
|
||||
// });
|
||||
|
||||
// if (existingDoc) {
|
||||
// await tx.hostDocuments.update({
|
||||
// where: { id: existingDoc.id },
|
||||
// data: {
|
||||
// filePath: doc.filePath,
|
||||
// documentName:
|
||||
// sanitizeDocumentName(doc.documentName) ||
|
||||
// existingDoc.documentName,
|
||||
// },
|
||||
// });
|
||||
// } else {
|
||||
// await tx.hostDocuments.create({
|
||||
// data: {
|
||||
// hostXid: updatedHost.id,
|
||||
// documentTypeXid: doc.documentTypeXid,
|
||||
// documentName: sanitizeDocumentName(doc.documentName),
|
||||
// filePath: doc.filePath,
|
||||
// },
|
||||
// });
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
// documents handling (FINAL FIX)
|
||||
if (documents?.length) {
|
||||
for (const doc of documents) {
|
||||
if (!doc.filePath) continue;
|
||||
|
||||
// 🔹 CUSTOM DOCUMENTS → ALWAYS CREATE
|
||||
if (doc.documentTypeXid === 9) {
|
||||
await tx.hostDocuments.create({
|
||||
data: {
|
||||
hostXid: updatedHost.id,
|
||||
documentTypeXid: doc.documentTypeXid,
|
||||
documentName: sanitizeDocumentName(doc.documentName),
|
||||
filePath: doc.filePath,
|
||||
},
|
||||
});
|
||||
continue;
|
||||
}
|
||||
|
||||
// 🔹 NORMAL DOCUMENTS → UPSERT (ONE PER TYPE)
|
||||
const existingDoc = await tx.hostDocuments.findFirst({
|
||||
where: {
|
||||
hostXid: updatedHost.id,
|
||||
@@ -1043,6 +1091,7 @@ export class HostService {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
// parent logic untouched
|
||||
if (companyData.isSubsidairy) {
|
||||
const parentRecords = existingHostCompany.hostParent;
|
||||
@@ -3003,11 +3052,19 @@ export class HostService {
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
* 1️⃣1️⃣ CLEAN & CREATE PICKUP/DROP TRANSPORTS WITH DETAILS & TAXES
|
||||
* 1️⃣1️⃣ CLEAN & CREATE PICKUP/DROP TRANSPORTS (INDEPENDENT ARRAY)
|
||||
* -------------------------------- */
|
||||
/* --------------------------------
|
||||
* 1️⃣1️⃣ CLEAN OLD PICKUP/DROP DATA
|
||||
* 1️⃣1️⃣ CLEAN OLD PICKUP/DROP TRANSPORT DATA (INDEPENDENT FROM NAVIGATION MODES)
|
||||
* -------------------------------- */
|
||||
// Clean up old pickup transport modes (independent array)
|
||||
await tx.activityPickUpTransport.deleteMany({
|
||||
where: {
|
||||
activityXid: Number(activityXid),
|
||||
},
|
||||
});
|
||||
|
||||
// Clean up old pickup details and their taxes (independent from transport modes)
|
||||
const oldPickupDetailIds = (
|
||||
await tx.activityPickUpDetails.findMany({
|
||||
where: { activitiesXid: activityXid },
|
||||
@@ -3022,29 +3079,31 @@ export class HostService {
|
||||
},
|
||||
});
|
||||
|
||||
await tx.activityPickUpTransport.deleteMany({
|
||||
where: {
|
||||
activityXid: Number(activityXid),
|
||||
},
|
||||
});
|
||||
|
||||
await tx.activityPickUpDetails.deleteMany({
|
||||
where: { id: { in: oldPickupDetailIds } },
|
||||
});
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
* 1️⃣1️⃣ CREATE PICKUP TRANSPORTS (INDEPENDENT ARRAY - JUST TRANSPORT MODES)
|
||||
* -------------------------------- */
|
||||
if (Array.isArray(payload.pickupTransports)) {
|
||||
for (const transport of payload.pickupTransports) {
|
||||
// ✅ CREATE TRANSPORT ONCE PER MODE
|
||||
const pickupTransport = await tx.activityPickUpTransport.create({
|
||||
// ✅ CREATE TRANSPORT MODE INDEPENDENTLY (NO RELATION TO PICKUP DETAILS)
|
||||
await tx.activityPickUpTransport.create({
|
||||
data: {
|
||||
activityXid: activityXid,
|
||||
transportModeXid: transport.transportModeXid,
|
||||
},
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
if (Array.isArray(transport.pickupDetails)) {
|
||||
for (const detail of transport.pickupDetails) {
|
||||
/* --------------------------------
|
||||
* 1️⃣1️⃣ CREATE PICKUP DETAILS (INDEPENDENT ARRAY - SEPARATE FROM TRANSPORT MODES)
|
||||
* -------------------------------- */
|
||||
if (Array.isArray(payload.pickupDetails)) {
|
||||
for (const detail of payload.pickupDetails) {
|
||||
const totalPrice = toNumber(detail.transportTotalPrice) ?? 0;
|
||||
|
||||
// On submit enforce > 0, on draft just skip
|
||||
@@ -3062,7 +3121,7 @@ export class HostService {
|
||||
rootTaxes,
|
||||
);
|
||||
|
||||
/* 1️⃣ CREATE PICKUP DETAILS */
|
||||
/* CREATE PICKUP DETAILS INDEPENDENTLY */
|
||||
const pickupDetail = await tx.activityPickUpDetails.create({
|
||||
data: {
|
||||
activitiesXid: activityXid,
|
||||
@@ -3075,7 +3134,7 @@ export class HostService {
|
||||
},
|
||||
});
|
||||
|
||||
/* 2️⃣ CREATE TAXES */
|
||||
/* CREATE TAXES FOR PICKUP DETAILS */
|
||||
if (taxDetails.length) {
|
||||
await tx.activityPickUpTransportTaxes.createMany({
|
||||
data: taxDetails.map((t) => ({
|
||||
@@ -3088,8 +3147,6 @@ export class HostService {
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/* --------------------------------
|
||||
* 1️⃣2️⃣ CLEAN & CREATE NAVIGATION MODES WITH TAXES
|
||||
|
||||
Reference in New Issue
Block a user