HelpController.ts 2.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. import * as Yup from "yup";
  2. import { Request, Response } from "express";
  3. import { getIO } from "../libs/socket";
  4. import ListService from "../services/HelpServices/ListService";
  5. import CreateService from "../services/HelpServices/CreateService";
  6. import ShowService from "../services/HelpServices/ShowService";
  7. import UpdateService from "../services/HelpServices/UpdateService";
  8. import DeleteService from "../services/HelpServices/DeleteService";
  9. import FindService from "../services/HelpServices/FindService";
  10. import Help from "../models/Help";
  11. import AppError from "../errors/AppError";
  12. type IndexQuery = {
  13. searchParam: string;
  14. pageNumber: string;
  15. };
  16. type StoreData = {
  17. title: string;
  18. description: string;
  19. video?: string;
  20. link?: string;
  21. };
  22. export const index = async (req: Request, res: Response): Promise<Response> => {
  23. const { searchParam, pageNumber } = req.query as IndexQuery;
  24. const { records, count, hasMore } = await ListService({
  25. searchParam,
  26. pageNumber
  27. });
  28. return res.json({ records, count, hasMore });
  29. };
  30. export const store = async (req: Request, res: Response): Promise<Response> => {
  31. const { companyId } = req.user;
  32. const data = req.body as StoreData;
  33. const schema = Yup.object().shape({
  34. title: Yup.string().required()
  35. });
  36. try {
  37. await schema.validate(data);
  38. } catch (err) {
  39. throw new AppError(err.message);
  40. }
  41. const record = await CreateService({
  42. ...data
  43. });
  44. const io = getIO();
  45. io.to(`company-${companyId}-mainchannel`).emit(`company-${companyId}-help`, {
  46. action: "create",
  47. record
  48. });
  49. return res.status(200).json(record);
  50. };
  51. export const show = async (req: Request, res: Response): Promise<Response> => {
  52. const { id } = req.params;
  53. const record = await ShowService(id);
  54. return res.status(200).json(record);
  55. };
  56. export const update = async (
  57. req: Request,
  58. res: Response
  59. ): Promise<Response> => {
  60. const data = req.body as StoreData;
  61. const { companyId } = req.user;
  62. const schema = Yup.object().shape({
  63. title: Yup.string().required()
  64. });
  65. try {
  66. await schema.validate(data);
  67. } catch (err) {
  68. throw new AppError(err.message);
  69. }
  70. const { id } = req.params;
  71. const record = await UpdateService({
  72. ...data,
  73. id
  74. });
  75. const io = getIO();
  76. io.to(`company-${companyId}-mainchannel`).emit(`company-${companyId}-help`, {
  77. action: "update",
  78. record
  79. });
  80. return res.status(200).json(record);
  81. };
  82. export const remove = async (
  83. req: Request,
  84. res: Response
  85. ): Promise<Response> => {
  86. const { id } = req.params;
  87. const { companyId } = req.user;
  88. await DeleteService(id);
  89. const io = getIO();
  90. io.to(`company-${companyId}-mainchannel`).emit(`company-${companyId}-help`, {
  91. action: "delete",
  92. id
  93. });
  94. return res.status(200).json({ message: "Help deleted" });
  95. };
  96. export const findList = async (
  97. req: Request,
  98. res: Response
  99. ): Promise<Response> => {
  100. const records: Help[] = await FindService();
  101. return res.status(200).json(records);
  102. };