From 91f18a6a9a4ad17755271bbe6e38bf9786e77fc8 Mon Sep 17 00:00:00 2001 From: ParkSuMin Date: Sun, 4 Jan 2026 22:14:28 +0300 Subject: [PATCH] Move item to another order --- server/db/database.js | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-) diff --git a/server/db/database.js b/server/db/database.js index 675ba4e..d77f520 100644 --- a/server/db/database.js +++ b/server/db/database.js @@ -594,7 +594,7 @@ export default class DBAdapter { } const item = await connection.query( - 'SELECT id, order_id FROM order_items WHERE id = ? FOR UPDATE', + 'SELECT id, order_id, product_id, quantity FROM order_items WHERE id = ? FOR UPDATE', [itemId] ); @@ -608,11 +608,35 @@ export default class DBAdapter { }); } - await connection.query( - 'UPDATE order_items SET order_id = ? WHERE id = ?', - [targetOrderId, itemId] + if (itemRow.order_id === targetOrderId) { + await connection.rollback(); + connection.release(); + return; + } + + const targetItem = await connection.query( + 'SELECT id, quantity FROM order_items WHERE order_id = ? AND product_id = ? FOR UPDATE', + [targetOrderId, itemRow.product_id] ); + const targetItemRow = targetItem?.[0]; + + if (targetItemRow) { + await connection.query( + 'UPDATE order_items SET quantity = ? WHERE id = ?', + [targetItemRow.quantity + itemRow.quantity, targetItemRow.id] + ); + await connection.query( + 'DELETE FROM order_items WHERE id = ?', + [itemId] + ); + } else { + await connection.query( + 'UPDATE order_items SET order_id = ? WHERE id = ?', + [targetOrderId, itemId] + ); + } + await connection.commit(); connection.release(); @@ -633,4 +657,4 @@ export default class DBAdapter { }); } } -} \ No newline at end of file +}