TicketNoteController.ts 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138
  1. import * as Yup from "yup";
  2. import { Request, Response } from "express";
  3. import AppError from "../errors/AppError";
  4. import TicketNote from "../models/TicketNote";
  5. import ListTicketNotesService from "../services/TicketNoteService/ListTicketNotesService";
  6. import CreateTicketNoteService from "../services/TicketNoteService/CreateTicketNoteService";
  7. import UpdateTicketNoteService from "../services/TicketNoteService/UpdateTicketNoteService";
  8. import ShowTicketNoteService from "../services/TicketNoteService/ShowTicketNoteService";
  9. import FindAllTicketNotesService from "../services/TicketNoteService/FindAllTicketNotesService";
  10. import DeleteTicketNoteService from "../services/TicketNoteService/DeleteTicketNoteService";
  11. import FindNotesByContactIdAndTicketId from "../services/TicketNoteService/FindNotesByContactIdAndTicketId";
  12. type IndexQuery = {
  13. searchParam: string;
  14. pageNumber: string;
  15. };
  16. type StoreTicketNoteData = {
  17. note: string;
  18. userId: number;
  19. contactId: number | 0;
  20. ticketId: number | 0;
  21. id?: number | string;
  22. };
  23. type UpdateTicketNoteData = {
  24. note: string;
  25. id?: number | string;
  26. userId?: number | 0;
  27. contactId?: number | 0;
  28. ticketId?: number | 0;
  29. };
  30. type QueryFilteredNotes = {
  31. contactId: number | string;
  32. ticketId: number | string;
  33. };
  34. export const index = async (req: Request, res: Response): Promise<Response> => {
  35. const { searchParam, pageNumber } = req.query as IndexQuery;
  36. const { ticketNotes, count, hasMore } = await ListTicketNotesService({
  37. searchParam,
  38. pageNumber
  39. });
  40. return res.json({ ticketNotes, count, hasMore });
  41. };
  42. export const list = async (req: Request, res: Response): Promise<Response> => {
  43. const ticketNotes: TicketNote[] = await FindAllTicketNotesService();
  44. return res.status(200).json(ticketNotes);
  45. };
  46. export const store = async (req: Request, res: Response): Promise<Response> => {
  47. const newTicketNote: StoreTicketNoteData = req.body;
  48. const { id: userId } = req.user;
  49. const schema = Yup.object().shape({
  50. note: Yup.string().required()
  51. });
  52. try {
  53. await schema.validate(newTicketNote);
  54. } catch (err) {
  55. throw new AppError(err.message);
  56. }
  57. const ticketNote = await CreateTicketNoteService({
  58. ...newTicketNote,
  59. userId
  60. });
  61. return res.status(200).json(ticketNote);
  62. };
  63. export const show = async (req: Request, res: Response): Promise<Response> => {
  64. const { id } = req.params;
  65. const ticketNote = await ShowTicketNoteService(id);
  66. return res.status(200).json(ticketNote);
  67. };
  68. export const update = async (
  69. req: Request,
  70. res: Response
  71. ): Promise<Response> => {
  72. const ticketNote: UpdateTicketNoteData = req.body;
  73. const schema = Yup.object().shape({
  74. note: Yup.string()
  75. });
  76. try {
  77. await schema.validate(ticketNote);
  78. } catch (err) {
  79. throw new AppError(err.message);
  80. }
  81. const recordUpdated = await UpdateTicketNoteService(ticketNote);
  82. return res.status(200).json(recordUpdated);
  83. };
  84. export const remove = async (
  85. req: Request,
  86. res: Response
  87. ): Promise<Response> => {
  88. const { id } = req.params;
  89. if (req.user.profile !== "admin") {
  90. throw new AppError("ERR_NO_PERMISSION", 403);
  91. }
  92. await DeleteTicketNoteService(id);
  93. return res.status(200).json({ message: "Observação removida" });
  94. };
  95. export const findFilteredList = async (
  96. req: Request,
  97. res: Response
  98. ): Promise<Response> => {
  99. try {
  100. const { contactId, ticketId } = req.query as QueryFilteredNotes;
  101. const notes: TicketNote[] = await FindNotesByContactIdAndTicketId({
  102. contactId,
  103. ticketId
  104. });
  105. return res.status(200).json(notes);
  106. } catch (e) {
  107. return res.status(500).json({ message: e });
  108. }
  109. };