292 lines
7.8 KiB
JavaScript
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!",
|
|
});
|
|
}
|
|
}; |