File size: 941 Bytes
2c16c8c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
import { Response } from "express";
import { ApiResponseType } from "./api-response";
import { logger } from "../logger/logger";
import { HttpStatusCode } from "./status-code";

export class RequestHandler {
  static async handle<T>(
    serviceMethod: () => Promise<ApiResponseType<T>>,
    res: Response
  ): Promise<void> {
    try {
      const result = await serviceMethod();

      if (result.success) {
        return res.success(result.data, result.message);
      }

      return res.error(
        result.statusCode || HttpStatusCode.INTERNAL_SERVER_ERROR,
        result.errorCode || "INTERNAL_SERVER_ERROR",
        result.message,
        result.errors
      );
    } catch (error) {
      logger.error(error);

      return res.error(HttpStatusCode.INTERNAL_SERVER_ERROR, "UNEXPECTED_ERROR", "An unexpected error occurred", [
        { message: (error as Error).message },
      ]);
    }
  }
}