Files

130 lines
2.8 KiB
JavaScript

const asyncHandler = require("express-async-handler");
const User = require("../models/userModel");
const Ticket = require("../models/ticketModel");
// @desc Get user ticket
// @route GET /api/tickets/:id
// @access Private
const getTicket = asyncHandler(async (req, res) => {
const user = await User.findById(req.user.id);
if (!user) {
res.status(401);
throw new Error("User not found");
}
const ticket = await Ticket.findById(req.params.id);
if (!ticket) {
res.status(404);
throw new Error("Ticket not found");
}
if (ticket.user.toString() !== req.user.id) {
res.status(401);
throw new Error("Not authorized");
}
res.status(201).json(ticket);
});
// @desc Get user tickets
// @route GET /api/tickets
// @access Private
const getTickets = asyncHandler(async (req, res) => {
const user = await User.findById(req.user.id);
if (!user) {
res.status(401);
throw new Error("User not found");
}
const tickets = await Ticket.find({ user: req.user.id });
res.status(200).json(tickets);
});
// @desc Create a ticket
// @route POST /api/tickets
// @access Private
const createTicket = asyncHandler(async (req, res) => {
const { product, description } = req.body;
if (!product || !description) {
res.status(400);
throw new Error("Please provide a product and description");
}
const user = await User.findById(req.user.id);
if (!user) {
res.status(401);
throw new Error("User not found");
}
const ticket = await Ticket.create({
product,
description,
user: req.user.id,
});
res.status(201).json(ticket);
});
// @desc Delete a ticket
// @route DELETE /api/ticket:id
// @access Private
const deleteTicket = asyncHandler(async (req, res) => {
const user = await User.findById(req.user.id);
if (!user) {
res.status(401);
throw new Error("User not found");
}
const ticket = await Ticket.findById(req.params.id);
if (!ticket) {
res.status(404);
throw new Error("Ticket not found");
}
if (ticket.user.toString() !== req.user.id) {
res.status(401);
throw new Error("Not authorized");
}
res.status(200).json({ success: true });
});
const updateTicket = asyncHandler(async (req, res) => {
const user = await User.findById(req.user.id);
if (!user) {
res.status(401);
throw new Error("User not found");
}
const ticket = await Ticket.findById(req.params.id);
if (!ticket) {
res.status(404);
throw new Error("Ticket not found");
}
if (ticket.user.toString() !== req.user.id) {
res.status(401);
throw new Error("Not authorized");
}
const updatedTicket = await Ticket.findByIdAndUpdate(
req.params.id,
req.body,
{
new: true,
}
);
res.status(200).json(updatedTicket);
});
module.exports = {
updateTicket,
deleteTicket,
getTicket,
getTickets,
createTicket,
};