Merge pull request #278 from R0m1k3/1.1

Prevent deliveries from linking to orders from different stores
This commit is contained in:
LogiFlow authored and GitHub committed 2025-08-21 12:07:46 +02:00
commit 46b96b70b0
2 files changed
+53 -4

No files matched your search

+31
View File
@@ -803,6 +803,23 @@ export async function registerRoutes(app: Express): Promise<Server> {
}
const data = insertDeliverySchema.partial().parse(transformedData);
// CRITICAL FIX: Si une commande est liée lors de la modification, vérifier qu'elle appartient au même magasin
if (data.orderId !== undefined) {
if (data.orderId !== null) {
const linkedOrder = await storage.getOrder(data.orderId);
if (!linkedOrder) {
return res.status(400).json({ message: "La commande liée n'existe pas" });
}
if (linkedOrder.groupId !== delivery.groupId) {
return res.status(400).json({
message: `Impossible de lier une livraison du magasin ${delivery.groupId} avec une commande du magasin ${linkedOrder.groupId}`
});
}
console.log(`✅ Validation OK: Livraison #${id} et commande #${data.orderId} appartiennent au même magasin ${delivery.groupId}`);
}
}
const updatedDelivery = await storage.updateDelivery(id, data);
console.log('✅ Delivery updated successfully:', { id, updatedDelivery });
@@ -875,6 +892,20 @@ export async function registerRoutes(app: Express): Promise<Server> {
}
}
// CRITICAL FIX: Si une commande est liée, vérifier qu'elle appartient au même magasin
if (data.orderId) {
const linkedOrder = await storage.getOrder(data.orderId);
if (!linkedOrder) {
return res.status(400).json({ message: "La commande liée n'existe pas" });
}
if (linkedOrder.groupId !== data.groupId) {
return res.status(400).json({
message: `Impossible de lier une livraison du magasin ${data.groupId} avec une commande du magasin ${linkedOrder.groupId}`
});
}
console.log(`✅ Validation OK: Livraison et commande #${data.orderId} appartiennent au même magasin ${data.groupId}`);
}
const delivery = await storage.createDelivery(data);
// Log de liaison avec commande
+22 -4
View File
@@ -725,7 +725,13 @@ export class DatabaseStorage implements IStorage {
.where(eq(orders.id, delivery.orderId));
if (orderData) {
associatedOrder = orderData;
// CRITICAL FIX: Vérifier que la commande appartient au même magasin que la livraison
if (orderData.groupId !== delivery.groupId) {
console.error(`❌ PRODUCTION: Delivery #${delivery.id} (store ${delivery.groupId}) linked to order #${delivery.orderId} (store ${orderData.groupId}) - STORE MISMATCH DETECTED!`);
// Ne pas inclure la commande si elle n'appartient pas au bon magasin
} else {
associatedOrder = orderData;
}
}
} catch (error) {
console.error(`❌ PRODUCTION: Failed to retrieve associated order #${delivery.orderId} for delivery #${delivery.id}:`, error);
@@ -835,7 +841,13 @@ export class DatabaseStorage implements IStorage {
.where(eq(orders.id, delivery.orderId));
if (orderData) {
associatedOrder = orderData;
// CRITICAL FIX: Vérifier que la commande appartient au même magasin que la livraison
if (orderData.groupId !== delivery.groupId) {
console.error(`❌ PRODUCTION: Delivery #${delivery.id} (store ${delivery.groupId}) linked to order #${delivery.orderId} (store ${orderData.groupId}) - STORE MISMATCH DETECTED!`);
// Ne pas inclure la commande si elle n'appartient pas au bon magasin
} else {
associatedOrder = orderData;
}
}
} catch (error) {
console.error(`❌ PRODUCTION: Failed to retrieve associated order #${delivery.orderId} for delivery #${delivery.id}:`, error);
@@ -908,8 +920,14 @@ export class DatabaseStorage implements IStorage {
console.log(`🔗 PRODUCTION: getDelivery #${id} retrieving associated order #${delivery.orderId}`);
const orderData = await this.getOrder(delivery.orderId);
if (orderData) {
associatedOrder = orderData;
console.log(`✅ PRODUCTION: getDelivery #${id} found associated order #${delivery.orderId} with status: ${orderData.status}`);
// CRITICAL FIX: Vérifier que la commande appartient au même magasin que la livraison
if (orderData.groupId !== delivery.groupId) {
console.error(`❌ PRODUCTION: getDelivery #${id} (store ${delivery.groupId}) linked to order #${delivery.orderId} (store ${orderData.groupId}) - STORE MISMATCH DETECTED!`);
// Ne pas inclure la commande si elle n'appartient pas au bon magasin
} else {
associatedOrder = orderData;
console.log(`✅ PRODUCTION: getDelivery #${id} found associated order #${delivery.orderId} with status: ${orderData.status}`);
}
}
} catch (error) {
console.error(`❌ PRODUCTION: Failed to retrieve associated order #${delivery.orderId} for delivery #${id}:`, error);