You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
193 lines
5.7 KiB
193 lines
5.7 KiB
const { MenuCategory, Menu } = require('../models/associations');
|
|
|
|
const categoryController = {
|
|
// Get all categories
|
|
getAllCategories: async (req, res) => {
|
|
try {
|
|
const { include_menus = 'false' } = req.query;
|
|
|
|
const options = {
|
|
order: [['ordre', 'ASC'], ['nom', 'ASC']]
|
|
};
|
|
|
|
if (include_menus === 'true') {
|
|
options.include = [{
|
|
model: Menu,
|
|
as: 'menus',
|
|
attributes: ['id', 'nom', 'prix', 'disponible']
|
|
}];
|
|
}
|
|
|
|
const categories = await MenuCategory.findAll(options);
|
|
|
|
res.json({
|
|
success: true,
|
|
data: categories
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Error fetching categories:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: 'Erreur lors de la récupération des catégories',
|
|
error: error.message
|
|
});
|
|
}
|
|
},
|
|
|
|
// Get category by ID
|
|
getCategoryById: async (req, res) => {
|
|
try {
|
|
const { id } = req.params;
|
|
|
|
const category = await MenuCategory.findByPk(id, {
|
|
include: [{
|
|
model: Menu,
|
|
as: 'menus',
|
|
attributes: ['id', 'nom', 'prix', 'disponible']
|
|
}]
|
|
});
|
|
|
|
if (!category) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: 'Catégorie non trouvée'
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
success: true,
|
|
data: category
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Error fetching category:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: 'Erreur lors de la récupération de la catégorie',
|
|
error: error.message
|
|
});
|
|
}
|
|
},
|
|
|
|
// Create category
|
|
createCategory: async (req, res) => {
|
|
try {
|
|
const { nom, description, ordre = 0, actif = true } = req.body;
|
|
|
|
if (!nom) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: 'Le nom de la catégorie est requis'
|
|
});
|
|
}
|
|
|
|
const category = await MenuCategory.create({
|
|
nom,
|
|
description,
|
|
ordre,
|
|
actif
|
|
});
|
|
|
|
res.status(201).json({
|
|
success: true,
|
|
message: 'Catégorie créée avec succès',
|
|
data: category
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Error creating category:', error);
|
|
|
|
if (error.name === 'SequelizeUniqueConstraintError') {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: 'Une catégorie avec ce nom existe déjà'
|
|
});
|
|
}
|
|
|
|
res.status(500).json({
|
|
success: false,
|
|
message: 'Erreur lors de la création de la catégorie',
|
|
error: error.message
|
|
});
|
|
}
|
|
},
|
|
|
|
// Update category
|
|
updateCategory: async (req, res) => {
|
|
try {
|
|
const { id } = req.params;
|
|
const { nom, description, ordre, actif } = req.body;
|
|
|
|
const category = await MenuCategory.findByPk(id);
|
|
if (!category) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: 'Catégorie non trouvée'
|
|
});
|
|
}
|
|
|
|
await category.update({
|
|
nom: nom !== undefined ? nom : category.nom,
|
|
description: description !== undefined ? description : category.description,
|
|
ordre: ordre !== undefined ? ordre : category.ordre,
|
|
actif: actif !== undefined ? actif : category.actif
|
|
});
|
|
|
|
res.json({
|
|
success: true,
|
|
message: 'Catégorie mise à jour avec succès',
|
|
data: category
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Error updating category:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: 'Erreur lors de la mise à jour de la catégorie',
|
|
error: error.message
|
|
});
|
|
}
|
|
},
|
|
|
|
// Delete category
|
|
deleteCategory: async (req, res) => {
|
|
try {
|
|
const { id } = req.params;
|
|
|
|
const category = await MenuCategory.findByPk(id);
|
|
if (!category) {
|
|
return res.status(404).json({
|
|
success: false,
|
|
message: 'Catégorie non trouvée'
|
|
});
|
|
}
|
|
|
|
// Check if category has menus
|
|
const menuCount = await Menu.count({ where: { categorie_id: id } });
|
|
if (menuCount > 0) {
|
|
return res.status(400).json({
|
|
success: false,
|
|
message: `Impossible de supprimer la catégorie. Elle contient ${menuCount} menu(s)`
|
|
});
|
|
}
|
|
|
|
await category.destroy();
|
|
|
|
res.json({
|
|
success: true,
|
|
message: 'Catégorie supprimée avec succès'
|
|
});
|
|
|
|
} catch (error) {
|
|
console.error('Error deleting category:', error);
|
|
res.status(500).json({
|
|
success: false,
|
|
message: 'Erreur lors de la suppression de la catégorie',
|
|
error: error.message
|
|
});
|
|
}
|
|
}
|
|
};
|
|
|
|
module.exports = categoryController;
|
|
|