api/resources/Supports/supportController.js
2024-03-20 10:32:02 +05:30

292 lines
7.8 KiB
JavaScript

import { Support } from "./supportModel.js";
import cloudinary from "../../Utils/cloudinary.js";
export const createSupport = async (req, res) => {
// console.log(req.body);
// console.log(req.files.image);
try {
// const { ticketId, createdOn, subject, description } = req.body;
if(req.files && req.files.image){
let images = [];
let Allfiles = req.files.image;
if (typeof Allfiles.tempFilePath === "string") {
let filepath = Allfiles.tempFilePath;
images.push(filepath);
} else {
Allfiles.map((item) => {
images.push(item.tempFilePath);
});
}
const imagesLinks = [];
for (let i = 0; i < images.length; i++) {
const result = await cloudinary.v2.uploader.upload(images[i], {
folder: "smellica/CustomerSupport",
});
imagesLinks.push({
public_id: result.public_id,
url: result.secure_url,
});
}
req.body.image = imagesLinks;
}
req.body.addedBy = req.user._id;
// Check if any required field is missing
// if (!ticketId || !createdOn || !subject || !description) {
// return res.status(400).json({
// success: false,
// msg: "All fields are required.",
// });
// }
// Create the support ticket
// const support = await Support.create({
// ticketId,
// createdOn,
// subject,
// description,
// addedBy: req.user._id,
// image: imagesLinks,
// });
const support = await Support.create({ ...req.body });
// Return the created support ticket
res.status(201).json({
success: true,
data: support,
msg: "Support ticket created successfully.",
});
} catch (error) {
console.error(error);
// Handle errors
res.status(500).json({
success: false,
msg: error.message,
});
}
};
// ****************************
export const getAllSupportTicket = async (req, res) => {
try {
// Use the find method to retrieve all support tickets
const support = await Support.find().sort({ createdAt: -1 });
// Check if support tickets were found
if (support) {
return res.status(200).json({
success: true,
support,
});
}
} catch (error) {
// Handle errors
// console.error(error);
res.status(500).json({
success: false,
msg: error.message ? error.message : "Something went wrong!",
});
}
};
export const getOneSupportTicket = async (req, res) => {
try {
// console.log(req.params.id);
const support = await Support.findOne({ ticketId: req.params.id });
if (support) {
return res.status(200).json({
success: true,
support,
});
} else {
return res.status(404).json({
success: false,
msg: "Support ticket not found",
});
}
} catch (error) {
res.status(500).json({
success: false,
msg: error.message ? error.message : "Something went wrong!",
});
}
};
// ************************8
export const getAllSupportTicketofuser = async (req, res) => {
try {
// Retrieve the user ID from the request
const userId = req.user._id;
// Use the find method to retrieve all support tickets created by the user
const support = await Support.find({ addedBy: userId }).sort({
createdAt: -1,
});
// Check if support tickets were found
if (support) {
return res.status(200).json({
success: true,
support,
});
} else {
return res.status(404).json({
success: false,
msg: "No support tickets found for the user.",
});
}
} catch (error) {
// Handle errors
// console.error(error);
res.status(500).json({
success: false,
msg: error.message ? error.message : "Something went wrong!",
});
}
};
// ************************8
export const deleteSupport = async (req, res) => {
try {
if (!req.params.id) {
return res.status(400).json({
success: false,
msg: "Please Provide Support ID!",
});
}
// console.log(req.params.id);
const getSupport = await Support.findById(req.params.id);
if (!getSupport) {
return res.status(404).json({
success: false,
msg: "Support not Found!",
});
}
// Deleting Images From Cloudinary
for (let i = 0; i < getSupport.image.length; i++) {
await cloudinary.v2.uploader.destroy(getSupport.image[i].public_id);
}
//-------------------------//
const supportticket = await Support.findByIdAndDelete(req.params.id);
if (!supportticket) {
return res.status(404).json({ message: "Support Not Found" });
}
await supportticket.remove();
res.status(200).json({
success: true,
msg: "Support Deleted Successfully!!",
});
} catch (error) {
res.status(500).json({
success: false,
msg: error.message ? error.message : "Something went wrong!",
});
}
};
export const updateSupport = async (req, res) => {
try {
const { status, message } = req.body;
// console.log(req.params.id);
// Prepare an array for the images
// const jsonArray = JSON.parse(image);
// const AllImages = jsonArray.map(({ public_id, url }) => ({
// public_id,
// url,
// }));
// if (req.files && req.files.newImages) {
// const newuploadImages = Array.isArray(req.files.newImages)
// ? req.files.newImages
// : [req.files.newImages];
// const imagesLinks = [];
// for (let i = 0; i < newuploadImages.length; i++) {
// const result = await cloudinary.v2.uploader.upload(
// newuploadImages[i].tempFilePath,
// {
// folder: "smellica/product",
// }
// );
// imagesLinks.push({
// public_id: result.public_id,
// url: result.secure_url,
// });
// }
// Combine the existing images and the newly uploaded images
// const updatedImages = [...AllImages, ...imagesLinks];
// Perform the product update
// Find the support ticket by ID
const supportTicket = await Support.findOne({ ticketId: req.params.id });
// Check if the support ticket exists
if (!supportTicket) {
return res.status(404).json({
success: false,
msg: "Support ticket not found",
});
}
// Update the support ticket fields
if (status) {
supportTicket.status = status;
}
if (message) {
const newMessage = {
message: message.message,
user: message.user,
replyDate: message.replyDate, // Add a timestamp to the message object
};
supportTicket.message.push(newMessage);
// Update the last reply to the timestamp of the new message if the user is admin
if (message.user === "admin") {
supportTicket.lastreply = newMessage.replyDate;
}
}
// Save the updated support ticket
const updatedSupportTicket = await supportTicket.save();
return res.status(200).json({
success: true,
updatedSupportTicket,
});
} catch (error) {
// Handle errors
// console.error(error);
res.status(500).json({
success: false,
msg: error.message ? error.message : "Something went wrong!",
});
}
};
export const deleteImageFromCloudinary = async (req, res) => {
const { public_id } = req.params;
try {
if (!public_id) {
return res.status(400).json({
success: false,
msg: "Please Provide Product ID!",
});
}
const response = await cloudinary.v2.uploader.destroy(public_id);
if (response) {
res.status(200).json({
success: true,
msg: "CustomerSupport Deleted Successfully!!",
});
}
} catch (error) {
res.status(500).json({
success: false,
msg: error.message ? error.message : "Something went wrong!",
});
}
};