531 lines
17 KiB
JavaScript
531 lines
17 KiB
JavaScript
const Album = require('../models/album.model');
|
||
const SubCategories = require('../models/subcategories.model')
|
||
const Categories = require('../models/categories.model')
|
||
|
||
const createAlbum = async (req, res) => {
|
||
try {
|
||
const { categoryId, subcategoryId, albumName, shortDescription } = req.body;
|
||
|
||
if (!categoryId || !subcategoryId) {
|
||
return res.status(400).json({
|
||
error_code: 400,
|
||
message: "Category ID and Subcategory ID are required"
|
||
});
|
||
}
|
||
|
||
const subcategory = await SubCategories.findById(subcategoryId);
|
||
if (!subcategory) {
|
||
return res.status(404).json({
|
||
error_code: 404,
|
||
message: "Subcategory not found"
|
||
});
|
||
}
|
||
|
||
const baseUrl = `${req.protocol}://${req.get('host')}`;
|
||
const imagePath = `uploads/${req.file.filename}`;
|
||
const imageUrl = `${baseUrl}/${imagePath}`;
|
||
|
||
const obj = {
|
||
categoryId: categoryId,
|
||
subcategoryId: subcategoryId,
|
||
albumName,
|
||
shortDescription,
|
||
imageUrl: imageUrl,
|
||
image: {
|
||
fileName: req.file.filename,
|
||
fileAddress: req.file.path,
|
||
}
|
||
|
||
};
|
||
const album = await Album.create(obj);
|
||
console.log("🚀 ~ createAlbum ~ album:", album);
|
||
|
||
return res.status(201).json({ error_code: 200, message: "Album created successfully", album: album });
|
||
} catch (err) {
|
||
console.error("Error inside CreateAlbum Controller", err);
|
||
return res.status(500).json({ error_code: 500, message: "Internal Server Error" });
|
||
}
|
||
};
|
||
const deletMany = async (req, res) => {
|
||
try {
|
||
|
||
|
||
const albums = await Album.deleteMany({});
|
||
console.log("<22><><EFBFBD> ~ deletMany ~ albums:", albums);
|
||
|
||
return res.status(200).json({ error_code: 200, message: "Albums deleted successfully", albums: albums });
|
||
|
||
|
||
} catch (error) {
|
||
console.error("Error inside DeleteMany Controller", error);
|
||
return res.status(500).json({ error_code: 500, message: "Internal Server Error" });
|
||
|
||
}
|
||
}
|
||
|
||
|
||
// ----------------------------------------------------
|
||
|
||
// const createAlbum = async (req, res) => {
|
||
// try {
|
||
// const { categoryId, subcategoryId, albumName, shortDescription } = req.body;
|
||
|
||
// // Check if categoryId and subcategoryId are provided
|
||
// if (!categoryId || !subcategoryId) {
|
||
// return res.status(400).json({
|
||
// error_code: 400,
|
||
// message: "Both Category ID and Subcategory ID are required"
|
||
// });
|
||
// }
|
||
|
||
// // Check if the provided category and subcategory exist
|
||
// const category = await Categories.findById(categoryId);
|
||
// const subcategory = await SubCategories.findById(subcategoryId);
|
||
// if (!category || !subcategory) {
|
||
// return res.status(404).json({
|
||
// error_code: 404,
|
||
// message: "Category or Subcategory not found"
|
||
// });
|
||
// }
|
||
|
||
// // Handle image upload
|
||
// let image = undefined;
|
||
// if (req.file) {
|
||
// const baseUrl = `${req.protocol}://${req.get('host')}`;
|
||
// const imagePath = `uploads/${req.file.filename}`;
|
||
// const imageUrl = `${baseUrl}/${imagePath}`;
|
||
// image = {
|
||
// fileName: req.file.filename,
|
||
// fileAddress: req.file.path,
|
||
// imageUrl: imageUrl
|
||
// };
|
||
// }
|
||
|
||
// // Create album object
|
||
// const albumObj = {
|
||
// categoryId: categoryId,
|
||
// subcategoryId: subcategoryId,
|
||
// albumName,
|
||
// shortDescription,
|
||
// image
|
||
// };
|
||
|
||
// // Create album in the database
|
||
// const album = await Album.create(albumObj);
|
||
// console.log("🚀 ~ createAlbum ~ album:", album)
|
||
// return res.status(201).json({ error_code: 200, message: "Album created successfully", album: album });
|
||
// } catch (err) {
|
||
// console.error("Error inside CreateAlbum Controller", err);
|
||
// return res.status(500).json({
|
||
// error_code: 500,
|
||
// message: "Internal Server Error"
|
||
// });
|
||
// }
|
||
// };
|
||
|
||
|
||
|
||
// ------------------------------------------------
|
||
|
||
// const updateAlbum = async (req, res) => {
|
||
// try {
|
||
// const { id } = req.params;
|
||
// const { categoryId, subcategoryId, albumName, shortDescription } = req.body;
|
||
|
||
// // Check if the album ID is provided
|
||
// if (!id) {
|
||
// return res.status(400).json({
|
||
// error_code: 400,
|
||
// message: "Album ID is required"
|
||
// });
|
||
// }
|
||
|
||
// // Check if the required fields are present in the request body
|
||
// if (!categoryId || !subcategoryId) {
|
||
// return res.status(400).json({
|
||
// error_code: 400,
|
||
// message: "Category ID and Subcategory ID are required"
|
||
// });
|
||
// }
|
||
|
||
// // Find the album by ID
|
||
// const album = await Album.findById(id);
|
||
// if (!album) {
|
||
// return res.status(404).json({
|
||
// error_code: 404,
|
||
// message: "Album not found"
|
||
// });
|
||
// }
|
||
|
||
// // Find the category and subcategory by their IDs
|
||
// const category = await Categories.findById(categoryId);
|
||
// const subcategory = await SubCategories.findById(subcategoryId);
|
||
|
||
// // Check if the category and subcategory exist
|
||
// if (!category || !subcategory) {
|
||
// return res.status(404).json({
|
||
// error_code: 404,
|
||
// message: "Category or Subcategory not found"
|
||
// });
|
||
// }
|
||
|
||
// // Update album fields
|
||
// album.set({
|
||
// categoryId,
|
||
// subcategoryId,
|
||
// albumName,
|
||
// shortDescription,
|
||
// image: req.file ? {
|
||
// fileName: req.file.filename,
|
||
// fileAddress: req.file.path
|
||
// } : album.image // Retain existing image if no new file provided
|
||
// });
|
||
|
||
// // Save the updated album
|
||
// await album.save();
|
||
|
||
// return res.status(200).json({
|
||
// error_code: 200,
|
||
// message: "Album updated successfully",
|
||
// album: album
|
||
// });
|
||
// } catch (err) {
|
||
// console.error("Error inside UpdateAlbum Controller", err);
|
||
// return res.status(500).json({
|
||
// error_code: 500,
|
||
// message: "Internal Server Error"
|
||
// });
|
||
// }
|
||
// };
|
||
|
||
// -------------------------------------------
|
||
|
||
const updateAlbum = async (req, res) => {
|
||
try {
|
||
const { id } = req.params;
|
||
const { categoryId, subcategoryId, albumName, shortDescription } = req.body;
|
||
|
||
if (!id) {
|
||
return res.status(400).json({
|
||
error_code: 400,
|
||
message: "Album ID is required"
|
||
});
|
||
}
|
||
|
||
if (!categoryId || !subcategoryId || !albumName || !shortDescription) {
|
||
return res.status(400).json({
|
||
error_code: 400,
|
||
message: "Category ID, Subcategory ID, Album Name, and Short Description are required"
|
||
});
|
||
}
|
||
|
||
const album = await Album.findById(id);
|
||
if (!album) {
|
||
return res.status(404).json({
|
||
error_code: 404,
|
||
message: "Album not found"
|
||
});
|
||
}
|
||
|
||
const category = await Categories.findById(categoryId);
|
||
const subcategory = await SubCategories.findById(subcategoryId);
|
||
|
||
if (!category || !subcategory) {
|
||
return res.status(404).json({
|
||
error_code: 404,
|
||
message: "Category or Subcategory not found"
|
||
});
|
||
}
|
||
|
||
// Handle image upload and update imageUrl
|
||
let imageUrl = album.imageUrl;
|
||
if (req.file) {
|
||
const baseUrl = `${req.protocol}://${req.get('host')}`;
|
||
const imagePath = `uploads/${req.file.filename}`;
|
||
imageUrl = `${baseUrl}/${imagePath}`;
|
||
}
|
||
|
||
// Update album object with all fields
|
||
const updatedAlbum = {
|
||
categoryId: categoryId,
|
||
subcategoryId: subcategoryId,
|
||
albumName: albumName,
|
||
shortDescription: shortDescription,
|
||
imageUrl: imageUrl,
|
||
image: req.file ? {
|
||
fileName: req.file.filename,
|
||
fileAddress: req.file.path,
|
||
} : album.image
|
||
};
|
||
|
||
// Save the updated album
|
||
await Album.findByIdAndUpdate(id, updatedAlbum);
|
||
|
||
return res.status(200).json({
|
||
error_code: 200,
|
||
message: "Album updated successfully",
|
||
album: updatedAlbum
|
||
});
|
||
} catch (err) {
|
||
console.error("Error inside UpdateAlbum Controller", err);
|
||
return res.status(500).json({
|
||
error_code: 500,
|
||
message: "Internal Server Error"
|
||
});
|
||
}
|
||
};
|
||
|
||
|
||
// ------------------------------------------------------------------
|
||
|
||
const deleteAlbum = async (req, res) => {
|
||
try {
|
||
// Find the album by ID and delete it
|
||
const deletedAlbum = await Album.findByIdAndDelete(req.params.id);
|
||
|
||
if (!deletedAlbum) {
|
||
return res.status(404).send({
|
||
error_code: 404,
|
||
message: "Album not found"
|
||
});
|
||
}
|
||
|
||
return res.status(200).send({
|
||
error_code: 200,
|
||
message: "Album deleted successfully"
|
||
});
|
||
} catch (err) {
|
||
console.log("Error inside DeleteAlbum Controller", err);
|
||
return res.status(500).send({
|
||
error_code: 500,
|
||
message: "Internal Server Error"
|
||
});
|
||
}
|
||
}
|
||
|
||
|
||
const changeAlbumStatus = async (req, res) => {
|
||
try {
|
||
const { id } = req.params;
|
||
const albumData = await Album.findById(id);
|
||
if (!albumData) {
|
||
return res.status(400).send({
|
||
error_code: 400,
|
||
message: 'album not found'
|
||
});
|
||
}
|
||
|
||
albumData.status = albumData.status === 'activate' ? 'deactivate' : 'activate';
|
||
|
||
await albumData.save();
|
||
res.status(200).send({
|
||
message: `ads status toggled successfully to ${albumData.status}`,
|
||
albumData: albumData
|
||
});
|
||
} catch (err) {
|
||
console.error('Error inside update admin', err);
|
||
res.status(500).send({
|
||
error_code: 500,
|
||
message: 'Internal Server Error'
|
||
});
|
||
}
|
||
};
|
||
|
||
|
||
|
||
const getAlbums = async (req, res) => {
|
||
try {
|
||
// Pagination parameters
|
||
const { page = 1, limit = 10, search: searchQuery = '' } = req.query;
|
||
const skip = (page - 1) * limit;
|
||
|
||
// Find albums with pagination and search
|
||
const albums = await Album.find({
|
||
$or: [
|
||
{ albumName: { $regex: searchQuery, $options: 'i' } },
|
||
{ shortDescription: { $regex: searchQuery, $options: 'i' } }
|
||
]
|
||
})
|
||
.populate('categoryId')
|
||
.populate('subcategoryId')
|
||
.skip(skip)
|
||
.limit(limit);
|
||
|
||
const totalCount = await Album.countDocuments({
|
||
$or: [
|
||
{ albumName: { $regex: searchQuery, $options: 'i' } },
|
||
{ shortDescription: { $regex: searchQuery, $options: 'i' } }
|
||
]
|
||
});
|
||
|
||
const totalPages = Math.ceil(totalCount / limit);
|
||
|
||
return res.status(200).json({
|
||
error_code: 200,
|
||
message: "Albums retrieved successfully",
|
||
data: albums.map(album => ({
|
||
_id: album._id,
|
||
status: album.status,
|
||
image: album.image,
|
||
imageUrl: album.imageUrl,
|
||
albumName: album.albumName,
|
||
shortDescription: album.shortDescription,
|
||
category: album.categoryId ? album.categoryId.name : null,
|
||
subcategory: album.subcategoryId ? album.subcategoryId.SubCategoriesName : null
|
||
})),
|
||
totalPages: totalPages,
|
||
currentPage: page
|
||
});
|
||
} catch (err) {
|
||
console.log("Error inside GetAlbums Controller", err);
|
||
return res.status(500).json({
|
||
error_code: 500,
|
||
message: "Internal Server Error"
|
||
});
|
||
}
|
||
};
|
||
|
||
|
||
// const getAlbums = async (req, res) => {
|
||
// try {
|
||
// // Pagination parameters
|
||
// const { page = 1, limit = 10 } = req.query;
|
||
// const skip = (page - 1) * limit;
|
||
// const searchQuery = req.query.search || '';
|
||
|
||
|
||
// const matchQuery = {
|
||
// SubCategoriesName: { $regex: searchQuery, $options: 'i' },
|
||
// 'CategoriesId.deleted': { $ne: true },
|
||
// 'subcategoryId.deleted':{$ne:true},
|
||
// 'deleted': { $ne: true }
|
||
// };
|
||
|
||
// // Aggregation pipeline to exclude albums with deleted categories or subcategories
|
||
// const albums = await Album.aggregate([
|
||
// {$match:matchQuery },
|
||
// {
|
||
// $lookup: {
|
||
// from: 'categories',
|
||
// localField: 'categoryId',
|
||
// foreignField: '_id',
|
||
// as: 'category'
|
||
// }
|
||
// },
|
||
// {
|
||
// $lookup: {
|
||
// from: 'subcategories',
|
||
// localField: 'subcategoryId',
|
||
// foreignField: '_id',
|
||
// as: 'subcategory'
|
||
// }
|
||
// },
|
||
// {
|
||
// $match: {
|
||
// $and: [
|
||
// { 'category': { $not: { $elemMatch: { 'deleted': true } } } }, // Exclude albums with deleted categories
|
||
// { 'subcategory': { $not: { $elemMatch: { 'deleted': true } } } } // Exclude albums with deleted subcategories
|
||
// ]
|
||
// }
|
||
// },
|
||
// { $skip: skip },
|
||
// { $limit: limit }
|
||
// ]);
|
||
|
||
// const totalCount = await Album.countDocuments({
|
||
// $or: [
|
||
// { albumName: { $regex: searchQuery, $options: 'i' } },
|
||
// { shortDescription: { $regex: searchQuery, $options: 'i' } }
|
||
// ]
|
||
// });
|
||
|
||
// const totalPages = Math.ceil(totalCount / limit);
|
||
|
||
// return res.status(200).json({
|
||
// error_code: 200,
|
||
// message: "Albums retrieved successfully",
|
||
// data: albums.map(album => ({
|
||
// _id: album._id,
|
||
// status: album.status,
|
||
// image: album.image,
|
||
// imageUrl: album.imageUrl,
|
||
// albumName: album.albumName,
|
||
// shortDescription: album.shortDescription,
|
||
// category: album.category[0] ? album.category[0].name : null,
|
||
// subcategory: album.subcategory[0] ? album.subcategory[0].SubCategoriesName : null
|
||
// })),
|
||
// totalPages: totalPages,
|
||
// currentPage: page
|
||
// });
|
||
// } catch (err) {
|
||
// console.log("Error inside GetAlbums Controller", err);
|
||
// return res.status(500).json({
|
||
// error_code: 500,
|
||
// message: "Internal Server Error"
|
||
// });
|
||
// }
|
||
// };
|
||
|
||
const allAlbums =async(req,res)=>{
|
||
try {
|
||
|
||
const albums = await Album.find();
|
||
return res.status(200).json({
|
||
error_code: 200,
|
||
message: 'Albums fetched successfully',
|
||
albums
|
||
});
|
||
|
||
} catch (error) {
|
||
console.log("Error inside GetAlbums Controller", err);
|
||
return res.status(500).json({
|
||
error_code: 500,
|
||
message: "Internal Server Error"
|
||
});
|
||
}
|
||
}
|
||
const getsubcategories = async (req, res) => {
|
||
try {
|
||
const { subcategoryId } = req.params;
|
||
|
||
|
||
const subCategories = await Album.find({ subcategoryId: subcategoryId });
|
||
if (!subCategories || subCategories.length === 0) {
|
||
return res.status(400).send({
|
||
error_code: 400,
|
||
message: 'subCategories not found for the given subCategories ID'
|
||
});
|
||
}
|
||
|
||
res.status(200).json({
|
||
error_code: 200,
|
||
message: 'Categories retrieved successfully',
|
||
subCategories: subCategories
|
||
});
|
||
|
||
} catch (err) {
|
||
console.error('Error inside getCategories', err);
|
||
res.status(500).send({
|
||
error_code: 500,
|
||
message: 'Internal Server Error'
|
||
});
|
||
}
|
||
};
|
||
|
||
|
||
|
||
|
||
|
||
|
||
module.exports = {
|
||
createAlbum,
|
||
updateAlbum,
|
||
deleteAlbum,
|
||
changeAlbumStatus,
|
||
getAlbums,
|
||
allAlbums,
|
||
deletMany,
|
||
getsubcategories
|
||
|
||
|
||
} |