perf(Recipe): eliminado uso de DTOs en el servicio

parent f51a7bbd
package com.example.apprecetas.recipe.application; package com.example.apprecetas.recipe.application;
import com.example.apprecetas.recipe.domain.entity.Recipe;
import com.example.apprecetas.recipe.infrastructure.controller.dto.input.RecipeInputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.input.RecipeInputDto;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
public interface CreateRecipeUseCase { public interface CreateRecipeUseCase {
RecipeOutputDto create(RecipeInputDto recipeInputDto); Recipe create(Recipe recipe);
} }
package com.example.apprecetas.recipe.application; package com.example.apprecetas.recipe.application;
import com.example.apprecetas.recipe.domain.entity.Recipe;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
import java.util.List; import java.util.List;
public interface ReadRecipeUseCase { public interface ReadRecipeUseCase {
RecipeOutputDto readById(Long id); Recipe readById(Long id);
List<RecipeOutputDto> readAll(); List<Recipe> readAll();
} }
package com.example.apprecetas.recipe.application; package com.example.apprecetas.recipe.application;
import com.example.apprecetas.recipe.domain.entity.Recipe;
import com.example.apprecetas.recipe.infrastructure.controller.dto.input.RecipeInputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.input.RecipeInputDto;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
public interface UpdateRecipeUseCase { public interface UpdateRecipeUseCase {
RecipeOutputDto update(Long id, RecipeInputDto recipeInputDto); Recipe update(Long id, Recipe recipe);
} }
package com.example.apprecetas.recipe.application.impl; package com.example.apprecetas.recipe.application.impl;
import com.example.apprecetas.recipe.application.CreateRecipeUseCase; import com.example.apprecetas.recipe.application.CreateRecipeUseCase;
import com.example.apprecetas.recipe.domain.entity.Recipe;
import com.example.apprecetas.recipe.domain.repository.CreateRecipeRepository; import com.example.apprecetas.recipe.domain.repository.CreateRecipeRepository;
import com.example.apprecetas.recipe.infrastructure.controller.dto.input.RecipeInputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.input.RecipeInputDto;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
...@@ -19,8 +20,8 @@ public class CreateRecipeUseCaseImpl implements CreateRecipeUseCase { ...@@ -19,8 +20,8 @@ public class CreateRecipeUseCaseImpl implements CreateRecipeUseCase {
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class); private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@Override @Override
public RecipeOutputDto create(RecipeInputDto recipeInputDto) { public Recipe create(Recipe recipe) {
RecipeJpa recipeJpa = mapper.mapJpa(mapper.map(recipeInputDto)); RecipeJpa recipeJpa = mapper.mapJpa(recipe);
recipeJpa.getSteps().forEach(step -> { recipeJpa.getSteps().forEach(step -> {
step.setRecipe(recipeJpa); step.setRecipe(recipeJpa);
...@@ -30,6 +31,6 @@ public class CreateRecipeUseCaseImpl implements CreateRecipeUseCase { ...@@ -30,6 +31,6 @@ public class CreateRecipeUseCaseImpl implements CreateRecipeUseCase {
}); });
RecipeJpa savedRecipe = repository.create(recipeJpa); RecipeJpa savedRecipe = repository.create(recipeJpa);
return mapper.map(mapper.mapJpa(savedRecipe)); return mapper.mapJpa(savedRecipe);
} }
} }
...@@ -2,6 +2,7 @@ package com.example.apprecetas.recipe.application.impl; ...@@ -2,6 +2,7 @@ package com.example.apprecetas.recipe.application.impl;
import com.example.apprecetas.exception.EntityNotFoundException; import com.example.apprecetas.exception.EntityNotFoundException;
import com.example.apprecetas.recipe.application.ReadRecipeUseCase; import com.example.apprecetas.recipe.application.ReadRecipeUseCase;
import com.example.apprecetas.recipe.domain.entity.Recipe;
import com.example.apprecetas.recipe.domain.repository.ReadRecipeRepository; import com.example.apprecetas.recipe.domain.repository.ReadRecipeRepository;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper; import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper;
...@@ -21,17 +22,16 @@ public class ReadRecipeUseCaseImpl implements ReadRecipeUseCase { ...@@ -21,17 +22,16 @@ public class ReadRecipeUseCaseImpl implements ReadRecipeUseCase {
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class); private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@Override @Override
public RecipeOutputDto readById(Long id) { public Recipe readById(Long id) {
RecipeJpa recipeJpa = repository.readById(id) RecipeJpa recipeJpa = repository.readById(id)
.orElseThrow(() -> new EntityNotFoundException("La receta con id " + id + " no existe")); .orElseThrow(() -> new EntityNotFoundException("La receta con id " + id + " no existe"));
return mapper.map(mapper.mapJpa(recipeJpa)); return mapper.mapJpa(recipeJpa);
} }
@Override @Override
public List<RecipeOutputDto> readAll() { public List<Recipe> readAll() {
return repository.readAll().stream() return repository.readAll().stream()
.map(mapper::mapJpa) .map(mapper::mapJpa)
.map(mapper::map)
.toList(); .toList();
} }
} }
package com.example.apprecetas.recipe.application.impl; package com.example.apprecetas.recipe.application.impl;
import com.example.apprecetas.recipe.application.UpdateRecipeUseCase; import com.example.apprecetas.recipe.application.UpdateRecipeUseCase;
import com.example.apprecetas.recipe.domain.entity.Recipe;
import com.example.apprecetas.recipe.domain.repository.UpdateRecipeRepository; import com.example.apprecetas.recipe.domain.repository.UpdateRecipeRepository;
import com.example.apprecetas.recipe.infrastructure.controller.dto.input.RecipeInputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.input.RecipeInputDto;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
...@@ -19,9 +20,9 @@ public class UpdateRecipeUseCaseImpl implements UpdateRecipeUseCase { ...@@ -19,9 +20,9 @@ public class UpdateRecipeUseCaseImpl implements UpdateRecipeUseCase {
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class); private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@Override @Override
public RecipeOutputDto update(Long id, RecipeInputDto recipeInputDto) { public Recipe update(Long id, Recipe recipe) {
RecipeJpa recipeJpa = mapper.mapJpa(mapper.map(recipeInputDto)); RecipeJpa recipeJpa = mapper.mapJpa(recipe);
RecipeJpa updatedRecipe = repository.upadte(id, recipeJpa); RecipeJpa updatedRecipe = repository.upadte(id, recipeJpa);
return mapper.map(mapper.mapJpa(updatedRecipe)); return mapper.mapJpa(updatedRecipe);
} }
} }
...@@ -4,8 +4,10 @@ import com.example.apprecetas.exception.UnprocessableEntityException; ...@@ -4,8 +4,10 @@ import com.example.apprecetas.exception.UnprocessableEntityException;
import com.example.apprecetas.recipe.application.CreateRecipeUseCase; import com.example.apprecetas.recipe.application.CreateRecipeUseCase;
import com.example.apprecetas.recipe.infrastructure.controller.dto.input.RecipeInputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.input.RecipeInputDto;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.PostMapping;
...@@ -23,6 +25,8 @@ public class CreateRecipeController { ...@@ -23,6 +25,8 @@ public class CreateRecipeController {
private final CreateRecipeUseCase service; private final CreateRecipeUseCase service;
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@PostMapping @PostMapping
public ResponseEntity<RecipeOutputDto> create(@RequestBody @Valid RecipeInputDto recipeInputDto, BindingResult result) { public ResponseEntity<RecipeOutputDto> create(@RequestBody @Valid RecipeInputDto recipeInputDto, BindingResult result) {
if (result.hasErrors()) { if (result.hasErrors()) {
...@@ -32,7 +36,7 @@ public class CreateRecipeController { ...@@ -32,7 +36,7 @@ public class CreateRecipeController {
throw new UnprocessableEntityException(errorMsg); throw new UnprocessableEntityException(errorMsg);
} }
URI location = URI.create("recipe"); URI location = URI.create("recipe");
return ResponseEntity.created(location).body(service.create(recipeInputDto)); return ResponseEntity.created(location).body(mapper.map(service.create(mapper.map(recipeInputDto))));
} }
} }
...@@ -2,7 +2,9 @@ package com.example.apprecetas.recipe.infrastructure.controller; ...@@ -2,7 +2,9 @@ package com.example.apprecetas.recipe.infrastructure.controller;
import com.example.apprecetas.recipe.application.ReadRecipeUseCase; import com.example.apprecetas.recipe.application.ReadRecipeUseCase;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping; import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable; import org.springframework.web.bind.annotation.PathVariable;
...@@ -18,9 +20,11 @@ public class ReadRecipeController { ...@@ -18,9 +20,11 @@ public class ReadRecipeController {
private final ReadRecipeUseCase service; private final ReadRecipeUseCase service;
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@GetMapping("/{id}") @GetMapping("/{id}")
public ResponseEntity<RecipeOutputDto> readById(@PathVariable Long id) { public ResponseEntity<RecipeOutputDto> readById(@PathVariable Long id) {
return ResponseEntity.ok().body(service.readById(id)); return ResponseEntity.ok().body(mapper.map(service.readById(id)));
} }
@GetMapping @GetMapping
...@@ -28,7 +32,10 @@ public class ReadRecipeController { ...@@ -28,7 +32,10 @@ public class ReadRecipeController {
if (service.readAll().isEmpty()) { if (service.readAll().isEmpty()) {
return ResponseEntity.noContent().build(); return ResponseEntity.noContent().build();
} }
return ResponseEntity.ok().body(service.readAll()); return ResponseEntity.ok().body(service.readAll().stream()
.map(mapper::map)
.toList()
);
} }
} }
...@@ -4,8 +4,10 @@ import com.example.apprecetas.exception.UnprocessableEntityException; ...@@ -4,8 +4,10 @@ import com.example.apprecetas.exception.UnprocessableEntityException;
import com.example.apprecetas.recipe.application.UpdateRecipeUseCase; import com.example.apprecetas.recipe.application.UpdateRecipeUseCase;
import com.example.apprecetas.recipe.infrastructure.controller.dto.input.RecipeInputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.input.RecipeInputDto;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto; import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper;
import jakarta.validation.Valid; import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.http.ResponseEntity; import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult; import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*; import org.springframework.web.bind.annotation.*;
...@@ -19,6 +21,8 @@ public class UpdateRecipeController { ...@@ -19,6 +21,8 @@ public class UpdateRecipeController {
private final UpdateRecipeUseCase service; private final UpdateRecipeUseCase service;
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@PutMapping("/{id}") @PutMapping("/{id}")
public ResponseEntity<RecipeOutputDto> update(@PathVariable Long id, @RequestBody @Valid RecipeInputDto recipeInputDto, BindingResult result) { public ResponseEntity<RecipeOutputDto> update(@PathVariable Long id, @RequestBody @Valid RecipeInputDto recipeInputDto, BindingResult result) {
if (result.hasErrors()) { if (result.hasErrors()) {
...@@ -27,6 +31,6 @@ public class UpdateRecipeController { ...@@ -27,6 +31,6 @@ public class UpdateRecipeController {
.collect(Collectors.joining(";")); .collect(Collectors.joining(";"));
throw new UnprocessableEntityException(errorMsg); throw new UnprocessableEntityException(errorMsg);
} }
return ResponseEntity.ok().body(service.update(id, recipeInputDto)); return ResponseEntity.ok().body(mapper.map(service.update(id, mapper.map(recipeInputDto))));
} }
} }
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or sign in to comment