push
This commit is contained in:
parent
5b051acb4c
commit
616e518a8b
@ -28,6 +28,68 @@ async function initDB() {
|
|||||||
);
|
);
|
||||||
`);
|
`);
|
||||||
|
|
||||||
|
// table fournisseurs
|
||||||
|
await connection.query(`
|
||||||
|
CREATE TABLE IF NOT EXISTS fournisseurs (
|
||||||
|
id BIGINT AUTO_INCREMENT PRIMARY KEY NOT NULL,
|
||||||
|
name VARCHAR(255) NOT NULL,
|
||||||
|
category VARCHAR(50) NOT NULL,
|
||||||
|
contact_person VARCHAR(255) DEFAULT NULL,
|
||||||
|
phone VARCHAR(20) DEFAULT NULL,
|
||||||
|
email VARCHAR(255) DEFAULT NULL,
|
||||||
|
status VARCHAR(20) DEFAULT 'active',
|
||||||
|
last_order_date DATE DEFAULT NULL,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
`);
|
||||||
|
|
||||||
|
// Create emplacements table if it doesn't exist
|
||||||
|
await connection.query(`
|
||||||
|
CREATE TABLE IF NOT EXISTS emplacements (
|
||||||
|
id BIGINT AUTO_INCREMENT PRIMARY KEY NOT NULL,
|
||||||
|
name VARCHAR(255) NOT NULL,
|
||||||
|
type VARCHAR(50) NOT NULL,
|
||||||
|
temperature DECIMAL(5, 2) DEFAULT NULL,
|
||||||
|
capacity INT DEFAULT NULL,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
|
||||||
|
);
|
||||||
|
`);
|
||||||
|
|
||||||
|
// table compartiments
|
||||||
|
await connection.query(`
|
||||||
|
CREATE TABLE IF NOT EXISTS compartiments (
|
||||||
|
id BIGINT AUTO_INCREMENT PRIMARY KEY NOT NULL,
|
||||||
|
name VARCHAR(255) NOT NULL,
|
||||||
|
capacity INT DEFAULT NULL,
|
||||||
|
uniter VARCHAR(50) NOT NULL DEFAULT 'kg',
|
||||||
|
id_emplacement BIGINT NOT NULL,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
FOREIGN KEY (id_emplacement) REFERENCES emplacements(id) ON DELETE CASCADE
|
||||||
|
);
|
||||||
|
`);
|
||||||
|
|
||||||
|
// table stock
|
||||||
|
await connection.query(`
|
||||||
|
CREATE TABLE IF NOT EXISTS stocks (
|
||||||
|
id BIGINT AUTO_INCREMENT PRIMARY KEY NOT NULL,
|
||||||
|
articles VARCHAR(255) NOT NULL,
|
||||||
|
quantity INT NOT NULL DEFAULT 0,
|
||||||
|
uniter VARCHAR(50) NOT NULL DEFAULT 'kg',
|
||||||
|
price_unit DECIMAL(10, 2) NOT NULL DEFAULT 0.00,
|
||||||
|
id_emplacement BIGINT NOT NULL,
|
||||||
|
id_compartiment BIGINT NOT NULL,
|
||||||
|
fournisseur_id BIGINT DEFAULT NULL,
|
||||||
|
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
|
||||||
|
FOREIGN KEY (id_emplacement) REFERENCES emplacements(id) ON DELETE CASCADE,
|
||||||
|
FOREIGN KEY (fournisseur_id) REFERENCES fournisseurs(id) ON DELETE SET NULL,
|
||||||
|
FOREIGN KEY (id_compartiment) REFERENCES compartiments(id) ON DELETE CASCADE
|
||||||
|
);
|
||||||
|
`);
|
||||||
|
|
||||||
// ajoute une autre table si necessaire
|
// ajoute une autre table si necessaire
|
||||||
|
|
||||||
// add a default admin user if none exists
|
// add a default admin user if none exists
|
||||||
|
|||||||
51
controllers/CompartimentController.js
Normal file
51
controllers/CompartimentController.js
Normal file
@ -0,0 +1,51 @@
|
|||||||
|
const { pool } = require('../config/databases');
|
||||||
|
|
||||||
|
exports.createCompartiment = async (req, res) => {
|
||||||
|
const {name, capacity, uniter, id_emplacement,} = req.body;
|
||||||
|
|
||||||
|
if (!name) {
|
||||||
|
return res.status(400).json({ message: 'Name are required.' });
|
||||||
|
} else if (!capacity) {
|
||||||
|
return res.status(400).json({ message: 'Capacity is required.' });
|
||||||
|
} else if (!uniter) {
|
||||||
|
return res.status(400).json({ message: 'Uniter is required.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
// verify if emplacement exists
|
||||||
|
try {
|
||||||
|
const [emplacement] = await pool.query('SELECT * FROM emplacements WHERE id = ?', [id_emplacement]);
|
||||||
|
|
||||||
|
if (emplacement.length === 0) {
|
||||||
|
return res.status(404).json({ message: 'Emplacement not found.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert compartiment
|
||||||
|
const [result] = await pool.query('INSERT INTO compartiments (name, capacity, uniter, id_emplacement) VALUES (?, ?, ?, ?)', [name, capacity, uniter, id_emplacement]);
|
||||||
|
|
||||||
|
res.status(201).json({
|
||||||
|
message: 'Compartiment created successfully',
|
||||||
|
compartiment: {
|
||||||
|
id: result.insertId,
|
||||||
|
name,
|
||||||
|
capacity,
|
||||||
|
uniter,
|
||||||
|
id_emplacement,
|
||||||
|
created_at: new Date().toISOString(),
|
||||||
|
updated_at: new Date().toISOString()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return res.status(500).json({ message: 'Server error while creating compartiment.' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.getCompartiments = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const [rows] = await pool.query('SELECT * FROM compartiments');
|
||||||
|
res.json(rows);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
res.status(500).json({ message: 'Server error while fetching compartiments.' });
|
||||||
|
}
|
||||||
|
}
|
||||||
82
controllers/EmplacementController.js
Normal file
82
controllers/EmplacementController.js
Normal file
@ -0,0 +1,82 @@
|
|||||||
|
const { pool } = require('../config/databases');
|
||||||
|
|
||||||
|
exports.createEmplacement = async (req, res) => {
|
||||||
|
const { name, type, temperature, capacity } = req.body;
|
||||||
|
|
||||||
|
if (!name || !type) {
|
||||||
|
return res.status(400).json({ message: 'Name and type are required.' });
|
||||||
|
} else if (!temperature) {
|
||||||
|
return res.status(400).json({ message: 'Temperature is required.' });
|
||||||
|
} else if (!capacity) {
|
||||||
|
return res.status(400).json({ message: 'Capacity is required.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const [result] = await pool.query('INSERT INTO emplacements (name, type, temperature, capacity) VALUES (?, ?, ?, ?)', [name, type, temperature, capacity]);
|
||||||
|
|
||||||
|
res.status(201).json({
|
||||||
|
message: 'Emplacement created successfully',
|
||||||
|
emplacement: {
|
||||||
|
id: result.insertId,
|
||||||
|
name,
|
||||||
|
type,
|
||||||
|
temperature,
|
||||||
|
capacity,
|
||||||
|
created_at: new Date().toISOString(),
|
||||||
|
updated_at: new Date().toISOString()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return res.status(500).json({ message: 'Server error while creating emplacement.' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.getEmplacements = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const [rows] = await pool.query('SELECT * FROM emplacements');
|
||||||
|
res.json(rows);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
res.status(500).json({ message: 'Server error while fetching emplacements.' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.getEmplacementById = async (req, res) => {
|
||||||
|
const { id } = req.params;
|
||||||
|
|
||||||
|
try {
|
||||||
|
const [rows] = await pool.query('SELECT * FROM emplacements WHERE id = ?', [id]);
|
||||||
|
|
||||||
|
if (rows.length === 0) {
|
||||||
|
return res.status(404).json({ message: 'Emplacement not found.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json(rows[0]);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
res.status(500).json({ message: 'Server error while fetching emplacement.' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.updateEmplacement = async (req, res) => {
|
||||||
|
const { id } = req.params;
|
||||||
|
const { name, type, temperature, capacity } = req.body;
|
||||||
|
|
||||||
|
if (!name || !type || !temperature || !capacity) {
|
||||||
|
return res.status(400).json({ message: 'All fields are required.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const [result] = await pool.query('UPDATE emplacements SET name = ?, type = ?, temperature = ?, capacity = ? WHERE id = ?', [name, type, temperature, capacity, id]);
|
||||||
|
|
||||||
|
if (result.affectedRows === 0) {
|
||||||
|
return res.status(404).json({ message: 'Emplacement not found.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
res.json({ message: 'Emplacement updated successfully' });
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
res.status(500).json({ message: 'Server error while updating emplacement.' });
|
||||||
|
}
|
||||||
|
}
|
||||||
41
controllers/FournisseurController.js
Normal file
41
controllers/FournisseurController.js
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
const { pool } = require('../config/databases');
|
||||||
|
|
||||||
|
exports.createFournisseur = async (req, res) => {
|
||||||
|
const { name, category, contact_person, phone, email, status } = req.body;
|
||||||
|
|
||||||
|
if (!name || !category || !contact_person || !phone || !email || !status) {
|
||||||
|
return res.status(400).json({ message: 'All fields are required.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
const [result] = await pool.query('INSERT INTO fournisseurs (name, category, contact_person, phone, email, status) VALUES(?, ?, ?, ?, ?, ?)', [name, category, contact_person, phone, email, status]);
|
||||||
|
|
||||||
|
res.status(201).json({
|
||||||
|
message: 'Fournisseur created successfully',
|
||||||
|
fournisseur: {
|
||||||
|
id: result.insertId,
|
||||||
|
name,
|
||||||
|
category,
|
||||||
|
contact_person,
|
||||||
|
phone,
|
||||||
|
email,
|
||||||
|
status,
|
||||||
|
created_at: new Date().toISOString(),
|
||||||
|
updated_at: new Date().toISOString()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return res.status(500).json({ message: 'Server error while creating ingredient.' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.getFournisseurs = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const [rows] = await pool.query('SELECT * FROM fournisseurs');
|
||||||
|
res.json(rows);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
res.status(500).json({ message: 'Server error while fetching fournisseurs.' });
|
||||||
|
}
|
||||||
|
}
|
||||||
58
controllers/StockController.js
Normal file
58
controllers/StockController.js
Normal file
@ -0,0 +1,58 @@
|
|||||||
|
const { pool } = require('../config/databases');
|
||||||
|
|
||||||
|
exports.createIngredient = async (req, res) => {
|
||||||
|
const { articles, quantity, uniter, price_unit, id_emplacement, id_compartiment } = req.body;
|
||||||
|
|
||||||
|
if (!articles || !quantity || !uniter || !price_unit) {
|
||||||
|
return res.status(400).json({ message: 'All fields are required.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
// verify if compartiment exists
|
||||||
|
try {
|
||||||
|
const [compartiment] = await pool.query('SELECT * FROM compartiments WHERE id = ?', [id_compartiment]);
|
||||||
|
|
||||||
|
if (compartiment.length === 0) {
|
||||||
|
return res.status(404).json({ message: 'Compartiment not found.' });
|
||||||
|
}
|
||||||
|
|
||||||
|
// Insert ingredient
|
||||||
|
const [result] = await pool.query('INSERT INTO stocks (articles, quantity, uniter, price_unit, id_emplacement, id_compartiment) VALUES (?, ?, ?, ?, ?, ?)', [articles, quantity, uniter, price_unit, id_emplacement, id_compartiment]);
|
||||||
|
|
||||||
|
res.status(201).json({
|
||||||
|
message: 'Ingredient created successfully',
|
||||||
|
ingredient: {
|
||||||
|
id: result.insertId,
|
||||||
|
articles,
|
||||||
|
quantity,
|
||||||
|
uniter,
|
||||||
|
price_unit,
|
||||||
|
id_compartiment,
|
||||||
|
created_at: new Date().toISOString(),
|
||||||
|
updated_at: new Date().toISOString()
|
||||||
|
}
|
||||||
|
});
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
return res.status(500).json({ message: 'Server error while creating ingredient.' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.getIngredientsInventaire = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const [rows] = await pool.query('SELECT emplacements.name, stocks.id as stock_id, stocks.articles, stocks.uniter, stocks.quantity, stocks.id_emplacement, stocks.id_compartiment FROM emplacements JOIN stocks ON emplacements.id = stocks.id_emplacement');
|
||||||
|
res.json(rows);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
res.status(500).json({ message: 'Server error while fetching ingredients.' });
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
exports.getIngredientsEmplacements = async (req, res) => {
|
||||||
|
try {
|
||||||
|
const [rows] = await pool.query('SELECT emplacements.name AS emplacement_name, emplacements.id AS emplacement_id, emplacements.type AS emplacement_type, emplacements.temperature, emplacements.capacity AS emplacement_capacity, compartiments.id AS compartiment_id, compartiments.name AS compartiment_name, compartiments.capacity AS compartiment_capacity, compartiments.uniter AS compartiment_uniter, stocks.id AS stock_id, stocks.articles, stocks.quantity, stocks.uniter AS stock_uniter, stocks.price_unit FROM emplacements JOIN compartiments ON emplacements.id = compartiments.id_emplacement JOIN stocks ON compartiments.id = stocks.id_compartiment');
|
||||||
|
res.json(rows);
|
||||||
|
} catch (error) {
|
||||||
|
console.error(error);
|
||||||
|
res.status(500).json({ message: 'Server error while fetching ingredients.' });
|
||||||
|
}
|
||||||
|
}
|
||||||
@ -1,12 +1,26 @@
|
|||||||
const express = require('express');
|
const express = require('express');
|
||||||
const authMiddleware = require('../middleware/authMiddleware');
|
const authMiddleware = require('../middleware/authMiddleware');
|
||||||
const userController = require('../controllers/UserController');
|
const userController = require('../controllers/UserController');
|
||||||
|
const emplacementController = require('../controllers/EmplacementController');
|
||||||
|
const compartimentController = require('../controllers/CompartimentController');
|
||||||
|
const stockController = require('../controllers/StockController');
|
||||||
|
const fournisseurController = require('../controllers/FournisseurController');
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
|
||||||
router.get('/profile', authMiddleware(), userController.getProfile);
|
router.get('/profile', authMiddleware(), userController.getProfile);
|
||||||
router.get('/admin', authMiddleware('admin'), userController.getAdminPage);
|
router.get('/admin', authMiddleware('admin'), userController.getAdminPage);
|
||||||
router.post('/create', authMiddleware('admin'), userController.createUser);
|
router.post('/create', authMiddleware('admin'), userController.createUser);
|
||||||
|
router.post('/create/emplacement', authMiddleware(), emplacementController.createEmplacement);
|
||||||
|
router.get('/emplacements', authMiddleware(), emplacementController.getEmplacements);
|
||||||
|
router.get('/emplacement/:id', authMiddleware(), emplacementController.getEmplacementById);
|
||||||
|
router.get('/compartiments', authMiddleware(), compartimentController.getCompartiments);
|
||||||
|
router.post('/create/compartiment', authMiddleware(), compartimentController.createCompartiment);
|
||||||
|
router.post('/create/ingredient', authMiddleware(), stockController.createIngredient);
|
||||||
|
router.get('/ingredients/inventaire', authMiddleware(), stockController.getIngredientsInventaire);
|
||||||
|
router.get('/ingredients/emplacement', authMiddleware(), stockController.getIngredientsEmplacements);
|
||||||
|
router.post('/create/fournisseur', authMiddleware(), fournisseurController.createFournisseur);
|
||||||
|
router.get('/fournisseurs', authMiddleware(), fournisseurController.getFournisseurs);
|
||||||
|
|
||||||
|
|
||||||
module.exports = router;
|
module.exports = router;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user