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

531 lines
17 KiB
JavaScript
Raw Normal View History

2024-03-07 13:01:44 +00:00
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"
});
}
2024-03-11 12:29:54 +00:00
2024-03-07 13:01:44 +00:00
const subcategory = await SubCategories.findById(subcategoryId);
if (!subcategory) {
return res.status(404).json({
error_code: 404,
message: "Subcategory not found"
});
}
2024-03-11 12:29:54 +00:00
const baseUrl = `${req.protocol}://${req.get('host')}`;
const imagePath = `uploads/${req.file.filename}`;
const imageUrl = `${baseUrl}/${imagePath}`;
const obj = {
2024-03-07 13:01:44 +00:00
categoryId: categoryId,
subcategoryId: subcategoryId,
albumName,
shortDescription,
imageUrl: imageUrl,
2024-03-11 12:29:54 +00:00
image: {
2024-03-07 13:01:44 +00:00
fileName: req.file.filename,
2024-03-11 12:29:54 +00:00
fileAddress: req.file.path,
}
2024-03-07 13:01:44 +00:00
2024-03-11 12:29:54 +00:00
};
const album = await Album.create(obj);
console.log("🚀 ~ createAlbum ~ album:", album);
2024-03-07 13:01:44 +00:00
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" });
}
};
2024-03-11 12:29:54 +00:00
const deletMany = async (req, res) => {
try {
const albums = await Album.deleteMany({});
2024-03-11 12:29:54 +00:00
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"
// });
// }
// };
// -------------------------------------------
2024-03-07 13:01:44 +00:00
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"
});
}
2024-03-11 12:29:54 +00:00
if (!categoryId || !subcategoryId || !albumName || !shortDescription) {
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: "Category ID, Subcategory ID, Album Name, and Short Description are required"
2024-03-07 13:01:44 +00:00
});
}
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"
});
}
2024-03-11 12:29:54 +00:00
// Handle image upload and update imageUrl
let imageUrl = album.imageUrl;
2024-03-11 12:29:54 +00:00
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
};
2024-03-07 13:01:44 +00:00
// Save the updated album
await Album.findByIdAndUpdate(id, updatedAlbum);
2024-03-07 13:01:44 +00:00
return res.status(200).json({
error_code: 200,
message: "Album updated successfully",
album: updatedAlbum
2024-03-07 13:01:44 +00:00
});
} catch (err) {
console.error("Error inside UpdateAlbum 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 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) {
2024-03-11 12:29:54 +00:00
return res.status(400).send({
error_code: 400,
message: 'album not found'
});
2024-03-07 13:01:44 +00:00
}
2024-03-11 12:29:54 +00:00
2024-03-07 13:01:44 +00:00
albumData.status = albumData.status === 'activate' ? 'deactivate' : 'activate';
2024-03-11 12:29:54 +00:00
2024-03-07 13:01:44 +00:00
await albumData.save();
res.status(200).send({
2024-03-11 12:29:54 +00:00
message: `ads status toggled successfully to ${albumData.status}`,
albumData: albumData
2024-03-07 13:01:44 +00:00
});
2024-03-11 12:29:54 +00:00
} catch (err) {
2024-03-07 13:01:44 +00:00
console.error('Error inside update admin', err);
res.status(500).send({
2024-03-11 12:29:54 +00:00
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
2024-03-11 12:29:54 +00:00
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')
2024-03-07 13:01:44 +00:00
.skip(skip)
.limit(limit);
2024-03-11 12:29:54 +00:00
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,
2024-03-11 12:29:54 +00:00
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"
});
}
};
2024-03-07 13:01:44 +00:00
// 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'
});
}
};
2024-03-07 13:01:44 +00:00
module.exports = {
createAlbum,
updateAlbum,
deleteAlbum,
changeAlbumStatus,
2024-03-11 12:29:54 +00:00
getAlbums,
allAlbums,
deletMany,
getsubcategories
2024-03-07 13:01:44 +00:00
}