Vegan-Life / VeganLife-Backend

채식주의자를 위한 식단 및 영양관리 앱 BE
2 stars 0 forks source link

[REFACTOR] 레시피 domain리팩토링 #260

Open soun997 opened 9 months ago

soun997 commented 9 months ago

Description

Recipe domain을 리팩토링한다.

Todo

ETC

Recipe 엔티티는 연관된 하위의 엔티티들이 많은 편이다.(RecipeDescription, RecipeImage 등등...) 때문에 RecipeMappertoEntity 메서드가 매우 크고 뚱뚱하다.

    default Recipe toEntity(RecipeAddRequest request, Member member) {

        // TODO: 이 로직이 매핑 로직인지, 서비스 로직인지 모호함, 리팩토링 단계에서 추가적으로 고민
        Recipe recipe = Recipe.builder().name(request.name()).member(member).build();

        List<RecipeType> recipeTypes =
                request.recipeType().stream()
                        .map(vegetarianType -> toRecipeType(vegetarianType, recipe))
                        .toList();
        List<RecipeImage> recipeImages =
                request.imageUrls().stream()
                        .map(imageUrl -> toRecipeImage(imageUrl, recipe))
                        .toList();
        List<RecipeIngredient> ingredients =
                request.ingredients().stream()
                        .map(ingredient -> toRecipeIngredient(ingredient, recipe))
                        .toList();
        List<RecipeDescription> descriptions =
                IntStream.range(0, request.descriptions().size())
                        .mapToObj(
                                idx ->
                                        this.toRecipeDescription(
                                                idx + 1, request.descriptions().get(idx), recipe))
                        .toList();

        // TODO: update 내부에서 Recipe와 Recipe 하위 엔티티의 관계를 설정하도록 수정
        recipe.update(recipeTypes, recipeImages, ingredients, descriptions);

        return recipe;
    }

해당 코드들은 mapper의 책임이 맞을까, service의 책임이 맞을까?