From 084370a2c26b694c2aac66b6114c4739f7480938 Mon Sep 17 00:00:00 2001 From: charakamihiranga Date: Tue, 5 Nov 2024 10:16:52 +0530 Subject: [PATCH] refactor project structure --- Javascript_RESTAPI/index.js | 97 +++---------------- Javascript_RESTAPI/src/config/db.js | 20 ++++ .../src/controller/itemController.js | 64 ++++++++++++ .../src/middleware/errorMiddleware.js | 7 ++ Javascript_RESTAPI/src/routes/itemRoutes.js | 20 ++++ .../src/utils/responseHelper.js | 6 ++ 6 files changed, 129 insertions(+), 85 deletions(-) create mode 100644 Javascript_RESTAPI/src/config/db.js create mode 100644 Javascript_RESTAPI/src/controller/itemController.js create mode 100644 Javascript_RESTAPI/src/middleware/errorMiddleware.js create mode 100644 Javascript_RESTAPI/src/routes/itemRoutes.js create mode 100644 Javascript_RESTAPI/src/utils/responseHelper.js diff --git a/Javascript_RESTAPI/index.js b/Javascript_RESTAPI/index.js index b77b5d7..79219c2 100644 --- a/Javascript_RESTAPI/index.js +++ b/Javascript_RESTAPI/index.js @@ -1,94 +1,21 @@ const express = require('express'); -const app = express(); -const PORT = 3000; - -const mysql = require('mysql2'); +const bodyParser = require('body-parser'); +const itemRoutes = require('./src/routes/itemRoutes'); +const errorMiddleware = require('./src/middleware/errorMiddleware'); // Load environment variables from .env file -const db = mysql.createConnection({ - host: 'localhost', - user: 'root', - password: '1234', - database: 'testnode' -}); - -db.connect(err => { - if (err) { - console.error('Error connecting to the database:', err.stack); - return; - } - console.log('Connected to MySQL database.'); -}); +const app = express(); +const PORT = process.env.PORT || 3000; +// Middleware +app.use(bodyParser.json()); -app.use(express.json()); // Middleware to parse JSON bodies +// Routes +app.use('/items', itemRoutes); -app.get('/', (req, res) => { - res.send('Hello, World!'); -}); +// Error handling middleware +app.use(errorMiddleware); +// Start the server app.listen(PORT, () => { console.log(`Server is running on http://localhost:${PORT}`); }); - -// CREATE: POST /items -app.post('/items', (req, res) => { - const { name } = req.body; - const query = 'INSERT INTO items (name) VALUES (?)'; - - db.query(query, [name], (err, results) => { - if (err) { - return res.status(500).json({ error: err.message }); - } - res.status(201).json({ id: results.insertId, name }); - }); -}); - -// READ: GET /items -app.get('/items', (req, res) => { - const query = 'SELECT * FROM items'; - db.query(query, (err, results) => { - if (err) { - return res.status(500).json({ error: err.message }); - } - res.json(results); - }); -}); - -// READ (Single): GET /items/:id -app.get('/items/:id', (req, res) => { - const query = 'SELECT * FROM items WHERE id = ?'; - db.query(query, [req.params.id], (err, results) => { - if (err) { - return res.status(500).json({ error: err.message }); - } - if (results.length === 0) return res.status(404).send('Item not found'); - res.json(results[0]); - }); -}); - -// UPDATE: PUT /items/:id -app.put('/items/:id', (req, res) => { - const { name } = req.body; - const query = 'UPDATE items SET name = ? WHERE id = ?'; - - db.query(query, [name, req.params.id], (err, results) => { - if (err) { - return res.status(500).json({ error: err.message }); - } - if (results.affectedRows === 0) return res.status(404).send('Item not found'); - res.json({ id: req.params.id, name }); - }); -}); - -// DELETE: DELETE /items/:id -app.delete('/items/:id', (req, res) => { - const query = 'DELETE FROM items WHERE id = ?'; - - db.query(query, [req.params.id], (err, results) => { - if (err) { - return res.status(500).json({ error: err.message }); - } - if (results.affectedRows === 0) return res.status(404).send('Item not found'); - res.status(204).send(); // No content to send back - }); -}); diff --git a/Javascript_RESTAPI/src/config/db.js b/Javascript_RESTAPI/src/config/db.js new file mode 100644 index 0000000..ab8bb1b --- /dev/null +++ b/Javascript_RESTAPI/src/config/db.js @@ -0,0 +1,20 @@ +const mysql = require('mysql2'); + +// Create a connection to the database +const db = mysql.createConnection({ + host: process.env.DB_HOST || 'localhost', + user: process.env.DB_USER || 'root', + password: process.env.DB_PASSWORD || '1234', + database: process.env.DB_NAME || 'testnode' +}); + +// Connect to the database +db.connect(err => { + if (err) { + console.error('Error connecting to the database:', err.stack); + return; + } + console.log('Connected to MySQL database.'); +}); + +module.exports = db; diff --git a/Javascript_RESTAPI/src/controller/itemController.js b/Javascript_RESTAPI/src/controller/itemController.js new file mode 100644 index 0000000..438b4a9 --- /dev/null +++ b/Javascript_RESTAPI/src/controller/itemController.js @@ -0,0 +1,64 @@ +const db = require('../config/db'); + +// Create a new item +exports.createItem = (req, res) => { + const { name } = req.body; + const query = 'INSERT INTO items (name) VALUES (?)'; + + db.query(query, [name], (err, results) => { + if (err) { + return res.status(500).json({ error: err.message }); + } + res.status(201).json({ id: results.insertId, name }); + }); +}; + +// Get all items +exports.getAllItems = (req, res) => { + const query = 'SELECT * FROM items'; + db.query(query, (err, results) => { + if (err) { + return res.status(500).json({ error: err.message }); + } + res.json(results); + }); +}; + +// Get a single item by ID +exports.getItemById = (req, res) => { + const query = 'SELECT * FROM items WHERE id = ?'; + db.query(query, [req.params.id], (err, results) => { + if (err) { + return res.status(500).json({ error: err.message }); + } + if (results.length === 0) return res.status(404).send('Item not found'); + res.json(results[0]); + }); +}; + +// Update an item by ID +exports.updateItem = (req, res) => { + const { name } = req.body; + const query = 'UPDATE items SET name = ? WHERE id = ?'; + + db.query(query, [name, req.params.id], (err, results) => { + if (err) { + return res.status(500).json({ error: err.message }); + } + if (results.affectedRows === 0) return res.status(404).send('Item not found'); + res.json({ id: req.params.id, name }); + }); +}; + +// Delete an item by ID +exports.deleteItem = (req, res) => { + const query = 'DELETE FROM items WHERE id = ?'; + + db.query(query, [req.params.id], (err, results) => { + if (err) { + return res.status(500).json({ error: err.message }); + } + if (results.affectedRows === 0) return res.status(404).send('Item not found'); + res.status(204).send(); // No content to send back + }); +}; diff --git a/Javascript_RESTAPI/src/middleware/errorMiddleware.js b/Javascript_RESTAPI/src/middleware/errorMiddleware.js new file mode 100644 index 0000000..00f5440 --- /dev/null +++ b/Javascript_RESTAPI/src/middleware/errorMiddleware.js @@ -0,0 +1,7 @@ +// Centralized error handling middleware +const errorMiddleware = (err, req, res, next) => { + console.error(err.stack); + res.status(500).json({ error: 'Something went wrong!' }); +}; + +module.exports = errorMiddleware; diff --git a/Javascript_RESTAPI/src/routes/itemRoutes.js b/Javascript_RESTAPI/src/routes/itemRoutes.js new file mode 100644 index 0000000..b8916ab --- /dev/null +++ b/Javascript_RESTAPI/src/routes/itemRoutes.js @@ -0,0 +1,20 @@ +const express = require('express'); +const router = express.Router(); +const itemController = require('../controller/itemController'); + +// Create a new item +router.post('/', itemController.createItem); + +// Get all items +router.get('/', itemController.getAllItems); + +// Get a single item by ID +router.get('/:id', itemController.getItemById); + +// Update an item by ID +router.put('/:id', itemController.updateItem); + +// Delete an item by ID +router.delete('/:id', itemController.deleteItem); + +module.exports = router; diff --git a/Javascript_RESTAPI/src/utils/responseHelper.js b/Javascript_RESTAPI/src/utils/responseHelper.js new file mode 100644 index 0000000..120461a --- /dev/null +++ b/Javascript_RESTAPI/src/utils/responseHelper.js @@ -0,0 +1,6 @@ +// Example utility function for standard responses +const sendResponse = (res, status, data) => { + res.status(status).json(data); +}; + +module.exports = { sendResponse };