response.util.ts 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. import { ResponseMessage } from './message.constant'
  2. import { ApiResponse, ServiceResponse } from './response.interface'
  3. import { HttpStatusCode, BusinessCode } from './status-code.enum'
  4. export class ResponseUtil {
  5. private static readonly statusCodeMap: Record<number, number> = {
  6. [HttpStatusCode.OK]: BusinessCode.SUCCESS,
  7. [HttpStatusCode.BAD_REQUEST]: BusinessCode.BAD_REQUEST,
  8. [HttpStatusCode.UNAUTHORIZED]: BusinessCode.UNAUTHORIZED,
  9. [HttpStatusCode.FORBIDDEN]: BusinessCode.FORBIDDEN,
  10. [HttpStatusCode.NOT_FOUND]: BusinessCode.NOT_FOUND,
  11. [HttpStatusCode.INTERNAL_SERVER_ERROR]: BusinessCode.INTERNAL_SERVER_ERROR,
  12. [HttpStatusCode.TOO_MANY_REQUESTS]: BusinessCode.TOO_MANY_REQUESTS
  13. }
  14. private static readonly defaultMessages: Record<number, string> = {
  15. [HttpStatusCode.OK]: ResponseMessage.SUCCESS,
  16. [HttpStatusCode.BAD_REQUEST]: ResponseMessage.BAD_REQUEST,
  17. [HttpStatusCode.UNAUTHORIZED]: ResponseMessage.UNAUTHORIZED,
  18. [HttpStatusCode.FORBIDDEN]: ResponseMessage.FORBIDDEN,
  19. [HttpStatusCode.NOT_FOUND]: ResponseMessage.NOT_FOUND,
  20. [HttpStatusCode.INTERNAL_SERVER_ERROR]:
  21. ResponseMessage.INTERNAL_SERVER_ERROR,
  22. [HttpStatusCode.TOO_MANY_REQUESTS]: ResponseMessage.TOO_MANY_REQUESTS
  23. }
  24. static handleResponse<T>(response: ServiceResponse<T>): ApiResponse<T> {
  25. const { code, msg, data } = response
  26. const businessCode = this.statusCodeMap[code] || BusinessCode.UNKNOWN_ERROR
  27. const message =
  28. msg || this.defaultMessages[code] || ResponseMessage.UNKNOWN_ERROR
  29. return {
  30. code: businessCode,
  31. msg: message,
  32. data: businessCode === BusinessCode.SUCCESS ? data : null
  33. }
  34. }
  35. }