All files / handlers/api router.ts

100% Statements 10/10
75% Branches 3/4
100% Functions 1/1
100% Lines 10/10

Press n or j to go to the next uncovered block, b, p or k for the previous block.

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 251x 1x 1x         1x           1x 6x 6x 6x 6x       2x      
import * as imageController from '../../controllers/imageController';
import { ApiResponse } from '../../common/apiResponse';
import { handleError } from '../../common/errorHandler';
import { LambdaEvent } from '../../dto/image.dto';
 
type Handler = (event: LambdaEvent) => Promise<ApiResponse> | ApiResponse;
 
const routes: Record<string, Handler> = {
  'POST /images/presign': imageController.presignUpload,
  'GET /images/{id}': imageController.getImage,
  'DELETE /images/{id}': imageController.deleteImage,
};
 
export async function dispatch(event: LambdaEvent): Promise<ApiResponse> {
  try {
    const key = event.routeKey ?? `${event.httpMethod} ${event.resource}`;
    const handler = routes[key];
    return handler
      ? await handler(event)
      : ApiResponse.notFound('Route not found');
  } catch (error) {
    return handleError(error);
  }
}