recipe-backend/src/endpoints/CompactRecipePoint.ts
2025-10-10 18:04:59 +02:00

33 lines
No EOL
1.2 KiB
TypeScript

import { Router } from "express";
import { asyncHandler } from "../utils/asyncHandler.js";
import { RecipeRepository } from "../repositories/RecipeRepository.js";
import { CompactRecipeHandler } from "../handlers/CompactRecipeHandler.js";
import { CompactRecipeDtoEntityMapper } from "../mappers/CompactRecipeDtoEntityMapper.js";
/**
* Handles all recipe related routes
*/
const router = Router();
// Inject repo + mapper here
const recipeRepository = new RecipeRepository();
const compactRecipeMapper = new CompactRecipeDtoEntityMapper();
const compactRecipeHandler = new CompactRecipeHandler(recipeRepository, compactRecipeMapper);
/**
* Load header data of all recipes
* Responds with a list of CompactRecipeDtos
* @todo request wrapper DTO
* @todo response wrapper DTO
*/
router.get(
"/",
asyncHandler(async (req, res) => {
// extract search string from query parameters, convert to lower case for case insensitive search
const searchString : string = req.query.search ? req.query.search.toString().toLowerCase() : "";
console.log("Searching for recipes with title containing", searchString)
const response = await compactRecipeHandler.getMatchingRecipes(searchString);
res.status(201).json(response);
})
);
export default router;