Skip to content

Commit

Permalink
refactor project structure
Browse files Browse the repository at this point in the history
  • Loading branch information
charakamihiranga committed Nov 5, 2024
1 parent f706b71 commit 084370a
Show file tree
Hide file tree
Showing 6 changed files with 129 additions and 85 deletions.
97 changes: 12 additions & 85 deletions Javascript_RESTAPI/index.js
Original file line number Diff line number Diff line change
@@ -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
});
});
20 changes: 20 additions & 0 deletions Javascript_RESTAPI/src/config/db.js
Original file line number Diff line number Diff line change
@@ -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;
64 changes: 64 additions & 0 deletions Javascript_RESTAPI/src/controller/itemController.js
Original file line number Diff line number Diff line change
@@ -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
});
};
7 changes: 7 additions & 0 deletions Javascript_RESTAPI/src/middleware/errorMiddleware.js
Original file line number Diff line number Diff line change
@@ -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;
20 changes: 20 additions & 0 deletions Javascript_RESTAPI/src/routes/itemRoutes.js
Original file line number Diff line number Diff line change
@@ -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;
6 changes: 6 additions & 0 deletions Javascript_RESTAPI/src/utils/responseHelper.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
// Example utility function for standard responses
const sendResponse = (res, status, data) => {
res.status(status).json(data);
};

module.exports = { sendResponse };

0 comments on commit 084370a

Please sign in to comment.