diff --git a/package-lock.json b/package-lock.json index 4859042..0dcec27 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,6 +12,7 @@ "cors": "^2.8.5", "express": "^5.1.0", "helmet": "^8.1.0", + "left-pad": "^1.3.0", "morgan": "^1.10.0" }, "devDependencies": { @@ -670,6 +671,13 @@ "integrity": "sha512-hvpoI6korhJMnej285dSg6nu1+e6uxs7zG3BYAm5byqDsgJNWwxzM6z6iZiAgQR4TJ30JmBTOwqZUw3WlyH3AQ==", "license": "MIT" }, + "node_modules/left-pad": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/left-pad/-/left-pad-1.3.0.tgz", + "integrity": "sha512-XI5MPzVNApjAyhQzphX8BkmKsKUxD4LdyK24iZeQGinBN9yTQT3bFlCBy/aVx2HrNcqQGsdot8ghrjyrvMCoEA==", + "deprecated": "use String.prototype.padStart()", + "license": "WTFPL" + }, "node_modules/math-intrinsics": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/math-intrinsics/-/math-intrinsics-1.1.0.tgz", diff --git a/package.json b/package.json index 7ce432b..0d4ad13 100644 --- a/package.json +++ b/package.json @@ -15,6 +15,7 @@ "cors": "^2.8.5", "express": "^5.1.0", "helmet": "^8.1.0", + "left-pad": "^1.3.0", "morgan": "^1.10.0" }, "devDependencies": { diff --git a/server.js b/server.js index 09b460f..21e4619 100644 --- a/server.js +++ b/server.js @@ -1,6 +1,7 @@ const express = require('express'); const helmet = require('helmet'); const cors = require('cors'); +const leftPad = require('left-pad') const { morganMiddleware } = require('./src/utils/logger'); const itemRoutes = require('./src/routes/itemRoutes'); diff --git a/src/controllers/itemController.js b/src/controllers/itemController.js index 6c17da7..3c3a5ea 100644 --- a/src/controllers/itemController.js +++ b/src/controllers/itemController.js @@ -1,19 +1,29 @@ -const itemService = require('../services/itemService'); +const itemService = require('../services/itemService') exports.createItem = async (req, res) => { - try { - const newItem = await itemService.createItem(req.body); - res.status(201).json(newItem); - } catch (error) { - res.status(500).json({ error: 'Internal server error' }); - } -}; + try { + const newItem = await itemService.createItem(req.body) + res.status(201).json(newItem) + } catch (error) { + res.status(500).json({ error: 'Internal server error' }) + } +} exports.getAllItems = async (req, res) => { - try { - const items = await itemService.getAllItems(); - res.json(items); - } catch (error) { - res.status(500).json({ error: 'Internal server error' }); - } -}; \ No newline at end of file + try { + const items = await itemService.getAllItems() + res.json(items) + } catch (error) { + res.status(500).json({ error: 'Internal server error' }) + } +} + +exports.updatItem = async (req, res) => { + try { + const { id } = req.params + const UPDATED = await itemService.updatItem(id, req.body) + res.json(UPDATED) + } catch (error) { + res.status(500).json({ error: error.mesage }) + } +} diff --git a/src/routes/itemRoutes.js b/src/routes/itemRoutes.js index c195d05..d5b26a1 100644 --- a/src/routes/itemRoutes.js +++ b/src/routes/itemRoutes.js @@ -5,5 +5,7 @@ const { validateItem } = require('../middlewares/itemValidator'); router.post('/', validateItem, itemController.createItem); router.get('/', itemController.getAllItems); +router.post('/:id', validateItem, itemController.updatItem); + module.exports = router; \ No newline at end of file diff --git a/src/services/itemService.js b/src/services/itemService.js index 62fd344..1921389 100644 --- a/src/services/itemService.js +++ b/src/services/itemService.js @@ -1,18 +1,28 @@ -let items = [ - { id: 1, name: 'Sample Item', description: 'This is a sample item' } -]; +let items = [{ id: 1, name: 'Sample Item', description: 'This is a sample item' }] module.exports = { - getAllItems: () => { - return items; - }, + getAllItems: () => { + return items + }, - createItem: (itemData) => { - const newItem = { - id: Date.now(), - ...itemData - }; - items.push(newItem); - return newItem; - }, -}; \ No newline at end of file + createItem: (itemData) => { + const newItem = { + id: Date.now(), + ...itemData, + } + items.push(newItem) + return newItem + }, + + updatItem: (itemId, data) => { + const id = parseInt(itemId) + const itm = items.find((i) => i.id === id) + + if (!itm) { + throw new Error('Item not fund') + } + if (data.name) itm.name = data.name + if (data.description) itm.description = data.description + return itm + }, +}