7fife-backend/controllers/subcategories.controller.js

493 lines
14 KiB
JavaScript
Raw Normal View History

2024-03-07 13:01:44 +00:00
const SubCategories = require('../models/subcategories.model'); // Import SubCategories model
const Categories = require('../models/categories.model')
// const createsubCategories = async (req, res) => {
// try {
// // Check if the required fields are present in the request body
// if (!req.body.CategoriesName || !req.body.SubCategoriesName || !req.file) {
// return res.status(400).send({
// error_code: 400,
// message: "CategoriesName, SubCategoriesName, and image are required"
// });
// }
// let obj = {
// CategoriesName: req.body.CategoriesName,
// SubCategoriesName: req.body.SubCategoriesName,
// image: {
// fileName: req.file.filename,
// fileAddress: req.file.path
// }
// };
// // Save 'obj' to the database
// const newSubCategories = await SubCategories.create(obj);
// // Return a success response with the newly created category
// return res.status(201).send({
// error_code: 200,
// message: 'SubCategories Created',
// category: newSubCategories
// });
// } catch (err) {
// console.log('Error inside create SubCategories Controller', err);
// return res.status(500).send({
// error_code: 500,
// message: 'Internal Server Error'
// });
// }
// };
const createsubCategories = async (req, res) => {
try {
const category = await Categories.findOne({ _id: req.body.CategoriesId });
if (!category) {
return res.status(404).send({
error_code: 404,
message: "Category not found"
});
}
// Construct the image URL
const baseUrl = `${req.protocol}://${req.get('host')}`;
const imagePath = `uploads/${req.file.filename}`;
const imageUrl = `${baseUrl}/${imagePath}`;
const newSubCategory = new SubCategories({
CategoriesId: category._id,
SubCategoriesName: req.body.SubCategoriesName,
image: {
fileName: req.file.filename,
2024-03-11 12:29:54 +00:00
fileAddress: req.file.filename,
imageUrl: imageUrl
2024-03-07 13:01:44 +00:00
}
});
await newSubCategory.save();
return res.status(201).send({
error_code: 200,
message: 'Subcategory Created',
subcategory: newSubCategory
});
} catch (err) {
console.log('Error inside create SubCategory Controller', err);
return res.status(500).send({
error_code: 500,
message: 'Internal Server Error'
});
}
};
2024-03-11 12:29:54 +00:00
// ------------------------------------------
// const updateSubCategories = async (req, res) => {
// try {
// const { subCatid } = req.body;
// const { CategoriesId, SubCategoriesName } = req.body;
// // Check if CategoriesId is provided
// if (!CategoriesId) {
// return res.status(400).json({
// error_code: 400,
// message: "CategoriesId is required"
// });
// }
// // Check if the category exists
// const category = await Categories.findById(CategoriesId);
// if (!category) {
// return res.status(404).json({
// error_code: 404,
// message: "Category not found"
// });
// }
// // Prepare update object
// const updateObject = { CategoriesId, SubCategoriesName };
// if (req.file) {
// // Construct image URL
// const baseUrl = `${req.protocol}://${req.get('host')}`;
// const imagePath = `uploads/${req.file.filename}`;
// const imageUrl = `${baseUrl}/${imagePath}`;
// updateObject.image = {
// fileName: req.file.filename,
// fileAddress: req.file.path,
// imageUrl: imageUrl
// };
// }
2024-03-07 13:01:44 +00:00
2024-03-11 12:29:54 +00:00
// // Find and update the subcategory
// const updatedSubCategories = await SubCategories.findByIdAndUpdate(subCatid, updateObject, { new: true });
2024-03-07 13:01:44 +00:00
2024-03-11 12:29:54 +00:00
// // Check if the subcategory exists
// if (!updatedSubCategories) {
// return res.status(404).json({
// error_code: 404,
// message: "SubCategories not found"
// });
// }
// // Return a success response with the updated subcategory
// return res.status(200).json({
// error_code: 200,
// message: "SubCategories updated",
// category: updatedSubCategories
// });
// } catch (err) {
// console.error('Error inside update SubCategories Controller', err);
// return res.status(500).json({
// error_code: 500,
// message: 'Internal Server Error'
// });
// }
// };
// --------------------------------------------------------
2024-03-07 13:01:44 +00:00
const updateSubCategories = async (req, res) => {
try {
2024-03-11 12:29:54 +00:00
const { subCatid, SubCategoriesName } = req.body;
2024-03-07 13:01:44 +00:00
2024-03-11 12:29:54 +00:00
if (!subCatid) {
2024-03-07 13:01:44 +00:00
return res.status(400).json({
error_code: 400,
2024-03-11 12:29:54 +00:00
message: "subCatid is required"
2024-03-07 13:01:44 +00:00
});
}
2024-03-11 12:29:54 +00:00
if (!SubCategoriesName) {
return res.status(400).json({
error_code: 400,
message: "SubCategoriesName is required"
2024-03-07 13:01:44 +00:00
});
}
2024-03-11 12:29:54 +00:00
const updateObject = { SubCategoriesName };
2024-03-07 13:01:44 +00:00
if (req.file) {
const baseUrl = `${req.protocol}://${req.get('host')}`;
const imagePath = `uploads/${req.file.filename}`;
const imageUrl = `${baseUrl}/${imagePath}`;
updateObject.image = {
fileName: req.file.filename,
fileAddress: req.file.path,
imageUrl: imageUrl
};
}
2024-03-11 12:29:54 +00:00
const updatedSubCategories = await SubCategories.findByIdAndUpdate(subCatid, updateObject, { new: true });
2024-03-07 13:01:44 +00:00
if (!updatedSubCategories) {
return res.status(404).json({
error_code: 404,
message: "SubCategories not found"
});
}
return res.status(200).json({
error_code: 200,
message: "SubCategories updated",
2024-03-11 12:29:54 +00:00
category: updatedSubCategories,
2024-03-07 13:01:44 +00:00
});
} catch (err) {
console.error('Error inside update SubCategories Controller', err);
return res.status(500).json({
error_code: 500,
message: 'Internal Server Error'
});
}
};
2024-03-11 12:29:54 +00:00
// ---------------------------------------
2024-03-07 13:01:44 +00:00
const deleteMany = async (req, res) => {
try {
const deleted = await SubCategories.deleteMany({}); // Passing an empty filter object deletes all documents
res.status(200).json({
error_code: 200,
message: 'All categories deleted successfully',
deleted
});
} catch (err) {
console.error('Error inside deleteMany Controller', err);
res.status(500).json({
error_code: 500,
message: 'Internal Server Error'
});
}
};
const deleteSubCategories = async (req, res) => {
try {
const { id } = req.params;
// Find and delete the subcategory
const deletedSubCategories = await SubCategories.findByIdAndDelete(id);
// Check if the subcategory exists
if (!deletedSubCategories) {
return res.status(404).send({
error_code: 404,
message: "SubCategories not found"
});
}
// Return a success response
return res.status(200).send({
error_code: 200,
message: "SubCategories deleted"
});
} catch (err) {
console.log('Error inside delete SubCategories Controller', err);
return res.status(500).send({
error_code: 500,
message: 'Internal Server Error'
});
}
};
2024-03-11 12:29:54 +00:00
// ---------------------------------------------
// const getSubCategories = async (req, res) => {
// try {
// const page = parseInt(req.query.page) || 1;
// const limit = parseInt(req.query.limit) || 5;
// const skip = (page - 1) * limit;
// const searchQuery = req.query.search || '';
// const subcategories = await SubCategories.find({
// SubCategoriesName: { $regex: searchQuery, $options: 'i' }
// })
// .populate('CategoriesId') // Populate the 'CategoriesId' field
// .skip(skip)
// .limit(limit);
// const populatedSubcategories = subcategories.map(subcategory => ({
// _id: subcategory._id,
// SubCategoriesName: subcategory.SubCategoriesName,
// image: subcategory.image,
// status: subcategory.status,
// CategoriesId: subcategory.CategoriesId ? subcategory.CategoriesId._id : null, // Reference the category ID if it exists
// categoryName: subcategory.CategoriesId ? subcategory.CategoriesId.name : null // Display category name if it exists
// }));
// console.log("🚀 ~ populatedSubcategories ~ populatedSubcategories:", populatedSubcategories)
// const totalCount = await SubCategories.countDocuments({
// SubCategoriesName: { $regex: searchQuery, $options: 'i' }
// });
// res.status(200).json({
// error_code: 200,
// message: 'Subcategories retrieved successfully',
// subcategories: populatedSubcategories,
// total_count: totalCount,
// page,
// limit
// });
// } catch (err) {
// console.error('Error inside get SubCategories Controller', err);
// res.status(500).json({
// error_code: 500,
// message: 'Internal Server Error'
// });
// }
// };
2024-03-07 13:01:44 +00:00
2024-03-11 12:29:54 +00:00
// ---------------------------------
2024-03-07 13:01:44 +00:00
const getSubCategories = async (req, res) => {
try {
const page = parseInt(req.query.page) || 1;
const limit = parseInt(req.query.limit) || 5;
const skip = (page - 1) * limit;
const searchQuery = req.query.search || '';
2024-03-11 12:29:54 +00:00
const matchQuery = {
SubCategoriesName: { $regex: searchQuery, $options: 'i' },
'CategoriesId.deleted': { $ne: true },
'deleted': { $ne: true }
};
console.log('Match Query:', matchQuery);
const subcategories = await SubCategories.aggregate([
{ $match: matchQuery },
{
$lookup: {
from: 'categories',
localField: 'CategoriesId',
foreignField: '_id',
as: 'category'
}
},
{ $unwind: '$category' },
{
$project: {
_id: 1,
SubCategoriesName: 1,
status: 1,
categoryName: '$category.name',
imageUrl: { $ifNull: ['$image.imageUrl', null] }
}
},
{ $skip: skip },
{ $limit: limit },
{ $group: { _id: null, subcategories: { $push: '$$ROOT' } } }, // Group all documents into a single array
{ $project: { subcategories: 1, totalCount: { $size: '$subcategories' } } } // Calculate total count
]);
if (!subcategories || subcategories.length === 0) {
return res.status(404).json({
error_code: 404,
message: 'No subcategories found'
});
}
const totalCount = subcategories[0].totalCount;
2024-03-07 13:01:44 +00:00
res.status(200).json({
error_code: 200,
message: 'Subcategories retrieved successfully',
2024-03-11 12:29:54 +00:00
subcategories: subcategories[0].subcategories,
2024-03-07 13:01:44 +00:00
total_count: totalCount,
page,
limit
});
} catch (err) {
console.error('Error inside get SubCategories Controller', err);
res.status(500).json({
error_code: 500,
message: 'Internal Server Error'
});
}
};
2024-03-11 12:29:54 +00:00
// --------------------------------------------
2024-03-07 13:01:44 +00:00
const changeSubCategoryStatus = async (req, res) => {
try {
const { id } = req.params;
const subCategoryData = await SubCategories.findById(id);
if (!subCategoryData) {
return res.status(400).send({
error_code: 400,
message: 'Ads not found'
});
}
subCategoryData.status = subCategoryData.status === 'activate' ? 'deactivate' : 'activate';
await subCategoryData.save();
res.status(200).send({
message: `ads status toggled successfully to ${subCategoryData.status}`,
subCategoryData: subCategoryData
});
} catch (err) {
console.error('Error inside update admin', err);
res.status(500).send({
error_code: 500,
message: 'Internal Server Error'
});
}
};
2024-03-11 12:29:54 +00:00
// const getCategories = async (req, res) => {
// try {
// const { CategoriesId } = req.params;
// const categories = await SubCategories.find({ CategoriesId: CategoriesId });
// console.log("🚀 ~ getCategories ~ categories:", categories)
// if (!categories || categories.length === 0) {
// return res.status(400).send({
// error_code: 400,
// message: 'Categories not found for the given category ID'
// });
// }
// // Return the found categories
// res.status(200).json({
// error_code: 200,
// message: 'Categories retrieved successfully',
// categories: categories
// });
// } catch (err) {
// console.error('Error inside getCategories', err);
// res.status(500).send({
// error_code: 500,
// message: 'Internal Server Error'
// });
// }
// };
// ------------------------------------------------
const getSubCategoriesfromCategory = async (req, res) => {
2024-03-07 13:01:44 +00:00
try {
const { CategoriesId } = req.params;
const categories = await SubCategories.find({ CategoriesId: CategoriesId });
2024-03-11 12:29:54 +00:00
2024-03-07 13:01:44 +00:00
if (!categories || categories.length === 0) {
2024-03-11 12:29:54 +00:00
return res.status(400).json({
2024-03-07 13:01:44 +00:00
error_code: 400,
message: 'Categories not found for the given category ID'
});
}
2024-03-11 12:29:54 +00:00
const categoriesWithImageUrl = categories.map(category => ({
_id: category._id,
SubCategoriesName: category.SubCategoriesName,
imageUrl: category.image ? category.image.imageUrl : null,
status: category.status,
CategoriesId: category.CategoriesId,
categoryName: category.categoryName
}));
2024-03-07 13:01:44 +00:00
res.status(200).json({
error_code: 200,
message: 'Categories retrieved successfully',
2024-03-11 12:29:54 +00:00
categories: categoriesWithImageUrl
2024-03-07 13:01:44 +00:00
});
} catch (err) {
console.error('Error inside getCategories', err);
2024-03-11 12:29:54 +00:00
res.status(500).json({
2024-03-07 13:01:44 +00:00
error_code: 500,
message: 'Internal Server Error'
});
}
};
2024-03-11 12:29:54 +00:00
// ------------------------------------------------
2024-03-07 13:01:44 +00:00
module.exports = {
createsubCategories,
updateSubCategories,
deleteSubCategories,
getSubCategories,
deleteMany,
2024-03-11 12:29:54 +00:00
changeSubCategoryStatus,
getSubCategoriesfromCategory
2024-03-07 13:01:44 +00:00
};