index.ts 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104
  1. import { Request, Response } from "express";
  2. interface PRASResponse extends Response {
  3. pras: {
  4. ok: (message: string, data: any, code: string, extra: any) => void;
  5. created: (message: string, data: any, code: string, extra: any) => void;
  6. badRequest: (message: string, data: any, code: string, extra: any) => void;
  7. unauthorized: (
  8. message: string,
  9. data: any,
  10. code: string,
  11. extra: any
  12. ) => void;
  13. forbidden: (message: string, data: any, code: string, extra: any) => void;
  14. notFound: (message: string, data: any, code: string, extra: any) => void;
  15. serverError: (message: string, data: any, code: string, extra: any) => void;
  16. customMessage: (
  17. statusCode: number,
  18. message: string,
  19. data: any,
  20. code: string,
  21. extra: any
  22. ) => void;
  23. };
  24. }
  25. export class PRAS {
  26. private getPRASResultObject(
  27. status: string,
  28. message: string,
  29. data: any,
  30. code: string,
  31. extra: any
  32. ) {
  33. return {
  34. status: status || "OK",
  35. message: message || "",
  36. data: data || null,
  37. code: code || "UNKNOWN_CODE",
  38. extra: extra || null,
  39. };
  40. }
  41. public responseMiddleware() {
  42. return (req: Request, res: PRASResponse, next: Function): void => {
  43. res.pras = {
  44. ok: (message, data, code, extra) => {
  45. res
  46. .status(200)
  47. .json(this.getPRASResultObject("OK", message, data, code, extra));
  48. },
  49. created: (message, data, code, extra) => {
  50. res
  51. .status(201)
  52. .json(this.getPRASResultObject("OK", message, data, code, extra));
  53. },
  54. badRequest: (message, data, code, extra) => {
  55. res
  56. .status(400)
  57. .json(this.getPRASResultObject("FAIL", message, data, code, extra));
  58. },
  59. unauthorized: (message, data, code, extra) => {
  60. res
  61. .status(401)
  62. .json(this.getPRASResultObject("FAIL", message, data, code, extra));
  63. },
  64. forbidden: (message, data, code, extra) => {
  65. res
  66. .status(403)
  67. .json(this.getPRASResultObject("FAIL", message, data, code, extra));
  68. },
  69. notFound: (message, data, code, extra) => {
  70. res
  71. .status(404)
  72. .json(this.getPRASResultObject("FAIL", message, data, code, extra));
  73. },
  74. serverError: (message, data, code, extra) => {
  75. res
  76. .status(500)
  77. .json(
  78. this.getPRASResultObject("ERROR", message, data, code, extra)
  79. );
  80. },
  81. customMessage: (statusCode, message, data, code, extra) => {
  82. let status;
  83. if (statusCode >= 500) {
  84. status = "ERROR";
  85. } else if (statusCode >= 400) {
  86. status = "FAIL";
  87. } else {
  88. status = "OK";
  89. }
  90. res
  91. .status(statusCode)
  92. .json(this.getPRASResultObject(status, message, data, code, extra));
  93. },
  94. };
  95. next();
  96. };
  97. }
  98. }
  99. export default new PRAS();