189 lines
6.4 KiB
JavaScript
189 lines
6.4 KiB
JavaScript
/* Guys Im creating this resuable CRUD funtions so that you no need to write these
|
|
things again and again you have to just pass them in arguments
|
|
feel free to make any changes here if you want to improve the code
|
|
here:-
|
|
remember you can import this in controllers ONLY not anywhere else!!!
|
|
Entity to pass is Schema Name which you import in controller e.g import { CalendarEvent } from "./calendarEventModel"; so Entity will be CalendarEvent in this case
|
|
by default I have kept the boolean arguments as false. you can pass it as true whenever needed.
|
|
|
|
*/
|
|
//author: Tazim K Madre
|
|
|
|
//imports
|
|
import cloudinary from "./cloudinary.js";
|
|
|
|
const getEntities = async (
|
|
req,
|
|
res,
|
|
Entity,
|
|
isUser = false,
|
|
criteria = false,
|
|
log = false
|
|
) => {
|
|
//pagination added filter can change so it needs to be dynamic will add it in future
|
|
let { page, limit } = req.query;
|
|
page = page * 1;
|
|
limit = limit * 1;
|
|
let limitVal = limit;
|
|
let skipeValue = (page - 1) * limitVal;
|
|
if (isUser) {
|
|
if (!req.user) return res.status(400).json({ message: "User not found." });
|
|
}
|
|
try {
|
|
if (criteria) {
|
|
const entity = await Entity.find({ createdBy: req.user._id });
|
|
return res.status(200).json({ status: "OK", data: entity });
|
|
}
|
|
const totalRecords = await Entity.countDocuments({});
|
|
const entity = await Entity.find({})
|
|
.sort({ createdAt: -1 })
|
|
.limit(limitVal)
|
|
.skip(skipeValue);
|
|
res
|
|
.status(200)
|
|
.json({ status: "OK", totalRecords: totalRecords, data: entity });
|
|
} catch (err) {
|
|
log && console.log(err);
|
|
return res.status(500).json({ message: "Unable to fetch." });
|
|
}
|
|
};
|
|
|
|
const getEntity = async (req, res, Entity, isUser = false, log = false) => {
|
|
if (isUser) {
|
|
1;
|
|
if (!req.user) return res.status(400).json({ message: "User not found." });
|
|
}
|
|
try {
|
|
const entity = await Entity.findById(req.params.id);
|
|
if (!entity) {
|
|
return res.status(400).json({ message: "Not found" });
|
|
}
|
|
res.status(200).json({ status: "OK", data: entity });
|
|
} catch (err) {
|
|
log && console.log(err);
|
|
return res.status(500).json({ message: "Unable to find" });
|
|
}
|
|
};
|
|
|
|
const addEntity = async (
|
|
req,
|
|
res,
|
|
Entity,
|
|
isUser = false,
|
|
isSingleImage = false,
|
|
isMultipleImages = false,
|
|
isCreatedBy = false,
|
|
log = false
|
|
) => {
|
|
if (isUser) {
|
|
if (!req.user) return res.status(400).json({ message: "User not found." });
|
|
}
|
|
try {
|
|
if (isCreatedBy) {
|
|
req.body.createdBy = req.user._id;
|
|
}
|
|
if (isSingleImage) {
|
|
if (req.file) {
|
|
const result = await cloudinary.v2.uploader.upload(req.file.path);
|
|
const image = { url: result.secure_url, public_id: result.public_id };
|
|
req.body.image = image;
|
|
}
|
|
}
|
|
if (isMultipleImages) {
|
|
const imageUrlList = [];
|
|
for (var i = 0; i < req.files.length; i++) {
|
|
const locaFilePath = req.files[i].path;
|
|
const result = await cloudinary.v2.uploader.upload(locaFilePath);
|
|
imageUrlList.push({ url: result.url, public_id: result.public_id });
|
|
}
|
|
req.body.files = imageUrlList;
|
|
}
|
|
const entity = await Entity.create(req.body);
|
|
res.status(200).json({ status: "OK", data: entity });
|
|
} catch (err) {
|
|
log && console.log(err);
|
|
return res.status(500).json({ message: "Unable to create." });
|
|
}
|
|
};
|
|
|
|
const updateEntity = async (
|
|
req,
|
|
res,
|
|
Entity,
|
|
isUser = false,
|
|
isSingleImage = false,
|
|
isMultipleImages = false,
|
|
log = false
|
|
) => {
|
|
if (isUser) {
|
|
if (!req.user) return res.status(400).json({ message: "User not found." });
|
|
}
|
|
let entity = await Entity.findById(req.params.id);
|
|
if (!entity) {
|
|
return res.status(400).json({ message: "Not found" });
|
|
}
|
|
try {
|
|
if (isSingleImage) {
|
|
await cloudinary.v2.uploader.destroy(req.body.public_id);
|
|
if (req.file) {
|
|
const result = await cloudinary.v2.uploader.upload(req.file.path);
|
|
const image = { url: result.url, public_id: result.public_id };
|
|
req.body.image = image;
|
|
}
|
|
}
|
|
if (isMultipleImages) {
|
|
for (let i = 0; i < req.body.publicIdArray; i++) {
|
|
await cloudinary.v2.uploader.destroy(req.body.publicIdArray[i]);
|
|
}
|
|
const imageUrlList = [];
|
|
for (var i = 0; i < req.files.length; i++) {
|
|
const locaFilePath = req.files[i].path;
|
|
const result = await cloudinary.v2.uploader.upload(locaFilePath);
|
|
imageUrlList.push({ url: result.url, public_id: result.public_id });
|
|
}
|
|
req.body.files = imageUrlList;
|
|
}
|
|
entity = await Entity.findByIdAndUpdate(req.params.id, req.body, {
|
|
new: true,
|
|
});
|
|
res.status(200).json({ status: "OK", data: entity });
|
|
} catch (err) {
|
|
log && console.log(err);
|
|
return res.status(500).json({ message: "Unable to update." });
|
|
}
|
|
};
|
|
|
|
const deleteEntity = async (
|
|
req,
|
|
res,
|
|
Entity,
|
|
isUser = false,
|
|
isSingleImage = false,
|
|
isMultipleImages = false,
|
|
log = false
|
|
) => {
|
|
if (isUser) {
|
|
if (!req.user) return res.status(400).json({ message: "User not found." });
|
|
}
|
|
// if (isSingleImage) {
|
|
// req.body.imageUrl = req.file.location;
|
|
// }
|
|
try {
|
|
// if (isSingleImage) {
|
|
// await cloudinary.v2.uploader.destroy(entity.image.public_id);
|
|
// }
|
|
// if (isMultipleImages) {
|
|
// for (let i = 0; i < entity.files.length; i++) {
|
|
// await cloudinary.v2.uploader.destroy(entity.files[i].public_id);
|
|
// }
|
|
// }
|
|
await Entity.deleteOne({ _id: req.params.id });
|
|
res.status(200).json({ status: "OK", message: "Deleted Successfully" });
|
|
} catch (err) {
|
|
log && console.log(err);
|
|
return res.status(500).json({ message: "Unable to delete" });
|
|
}
|
|
};
|
|
|
|
export { getEntities, getEntity, addEntity, updateEntity, deleteEntity };
|