From 85d1a9f04690faad9f6d1444b541453f6b78105a Mon Sep 17 00:00:00 2001 From: ParkSuMin Date: Sat, 3 Jan 2026 18:15:52 +0300 Subject: [PATCH] API check --- server/server.js | 184 +++++++++++++++++++++++++++++++++++------------ 1 file changed, 139 insertions(+), 45 deletions(-) diff --git a/server/server.js b/server/server.js index 00c82c9..3324887 100644 --- a/server/server.js +++ b/server/server.js @@ -40,7 +40,30 @@ app.get('/api/current-date', async (req, res) => { res.json({ currentDate }); }); -app.get('/api/products', async(req, res) => { +app.post('/api/current-date/advance', async (req, res) => { + let currentDate = getCurrentDate(); + try { + const raw_ids = await adapter.getOrdersByDate(currentDate); + if (raw_ids && raw_ids.length > 0) { + const ids = raw_ids.map(item => item.id); + await adapter.clearOrders(ids); + } + let nextDate = AddDays(currentDate, 1); + await adapter.stock(); + await setCurrentDate(nextDate); + res.json({ currentDate: nextDate }); + } catch (err){ + res.statusCode = 500; + res.message = "WHOOPS"; + res.json({ + timeStamp: new Date().toISOString(), + statusCode: res.statusCode, + error : `${err}` + }) + } +}); + +app.get('/api/products', async (req, res) => { try { const db_products = await adapter.getProducts(); @@ -65,30 +88,7 @@ app.get('/api/products', async(req, res) => { } }); -app.post('/api/current-date/advance', async (req, res) => { - let currentDate = getCurrentDate(); - try { - const raw_ids = await adapter.getOrdersByDate(currentDate); - if (raw_ids && raw_ids.length > 0) { - const ids = raw_ids.map(item => item.id); - await adapter.clearOrders(ids); - } - let nextDate = AddDays(currentDate, 1); - await adapter.stock(); - await setCurrentDate(nextDate); - res.json({ currentDate: nextDate }); - } catch (err){ - res.statusCode = 500; - res.message = "WHOOPS"; - res.json({ - timeStamp: new Date().toISOString(), - statusCode: res.statusCode, - error : `${err}` - }) - } -}); - -app.get('/api/orders', async(req, res) => { +app.get('/api/orders', async (req, res) => { try { const db_orders = await adapter.getOrders(); @@ -100,6 +100,7 @@ app.get('/api/orders', async(req, res) => { status: status, total: total_amount, items: items ? items.map(item => ({ + id: item.id, product_id: item.product_id, product_name: item.product_name || item.name, quantity: item.quantity, @@ -170,6 +171,64 @@ app.post('/api/orders', async (req, res) => { } }); +app.put('/api/orders/:id', async (req, res) => { + const { customerName, orderDate } = req.body; + const orderId = req.params.id; + + if (!customerName || !orderDate) { + return res.status(400).json({ + timeStamp: new Date().toISOString(), + statusCode: 400, + error: "Customer name and order date are required" + }); + } + + try { + await adapter.changeOrderInfo({ + id: orderId, + customer_name: customerName, + orderDate + }); + + return res.json({ + id: orderId, + customer_name: customerName, + order_date: orderDate + }); + + } catch(err) { + console.error('Error updating order:', err); + + const errorMessage = err.message || + err.error?.message || + "Unknown error occurred"; + + switch(err.type) { + case DB_INTERNAL_ERROR: + return res.status(500).json({ + timeStamp: new Date().toISOString(), + statusCode: 500, + error: errorMessage, + details: err.details || "Internal server error" + }); + + case DB_USER_ERROR: + return res.status(400).json({ + timeStamp: new Date().toISOString(), + statusCode: 400, + error: errorMessage + }); + + default: + return res.status(500).json({ + timeStamp: new Date().toISOString(), + statusCode: 500, + error: errorMessage + }); + } + } +}); + app.delete('/api/orders/:id', async (req, res) => { try { await adapter.deleteOrderById(req.params.id); @@ -191,25 +250,52 @@ app.post('/api/orders/:orderId/items', async (req, res) => { let orderId = req.params.orderId; let { productId, quantity } = req.body; + if (!productId || !quantity || quantity <= 0) { + return res.status(400).json({ + timeStamp: new Date().toISOString(), + statusCode: 400, + error: "Invalid productId or quantity" + }); + } + try { - await adapter.addOrderItem({ + const itemId = await adapter.addOrderItem({ orderId, productId, quantity }); - res.status(201).json({ + return res.status(201).json({ + itemId: itemId.toString(), orderId, productId, quantity }); } catch (err) { - // TODO - res.status(500).json({ - timeStamp: new Date().toISOString(), - statusCode: 500, - }); + console.error('Error adding order item:', err); + + if (err.type === DB_USER_ERROR) { + return res.status(400).json({ + timeStamp: new Date().toISOString(), + statusCode: 400, + error: err.error?.message || "Invalid request", + details: err.details + }); + } else if (err.type === DB_INTERNAL_ERROR) { + return res.status(500).json({ + timeStamp: new Date().toISOString(), + statusCode: 500, + error: "Internal server error", + details: err.error?.message + }); + } else { + return res.status(500).json({ + timeStamp: new Date().toISOString(), + statusCode: 500, + error: "Internal server error" + }); + } } }); @@ -229,10 +315,10 @@ app.put('/api/orders/:orderId/items/:itemId', async (req, res) => { }); } catch (err) { - // TODO - res.status(500).json({ + res.json({ timeStamp: new Date().toISOString(), statusCode: 500, + error: err.message }); } }); @@ -240,17 +326,25 @@ app.put('/api/orders/:orderId/items/:itemId', async (req, res) => { app.delete('/api/orders/:orderId/items/:itemId', async (req, res) => { try { await adapter.deleteOrderItem(req.params.itemId); - res.status(204).end(); - } catch (err){ - res.statusCode = 500; - res.message = "WHOOPS"; - res.json({ - timeStamp: new Date().toISOString(), - statusCode: 500, - error: `${err}` - }); + return res.status(204).end(); + } catch (err) { + if (err.type === DB_INTERNAL_ERROR) { + return res.status(500).json({ + timeStamp: new Date().toISOString(), + statusCode: 500, + error: "Server error", + details: err.error.message + }); + } else { + return res.status(500).json({ + timeStamp: new Date().toISOString(), + statusCode: 500, + error: "Internal server error", + details: err.message + }); + } } -}) +}); app.post('/api/order-items/:itemId/move', async (req, res) => { let itemId = req.params.itemId; @@ -298,4 +392,4 @@ process.on('SIGTERM', () => { await adapter.disconnect(); console.log("DB DISCONNECTED"); }); -}); +}); \ No newline at end of file