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

parent f51a7bbd
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.output.RecipeOutputDto;
public interface CreateRecipeUseCase {
RecipeOutputDto create(RecipeInputDto recipeInputDto);
Recipe create(Recipe recipe);
}
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 java.util.List;
public interface ReadRecipeUseCase {
RecipeOutputDto readById(Long id);
Recipe readById(Long id);
List<RecipeOutputDto> readAll();
List<Recipe> readAll();
}
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.output.RecipeOutputDto;
public interface UpdateRecipeUseCase {
RecipeOutputDto update(Long id, RecipeInputDto recipeInputDto);
Recipe update(Long id, Recipe recipe);
}
package com.example.apprecetas.recipe.application.impl;
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.infrastructure.controller.dto.input.RecipeInputDto;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
......@@ -19,8 +20,8 @@ public class CreateRecipeUseCaseImpl implements CreateRecipeUseCase {
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@Override
public RecipeOutputDto create(RecipeInputDto recipeInputDto) {
RecipeJpa recipeJpa = mapper.mapJpa(mapper.map(recipeInputDto));
public Recipe create(Recipe recipe) {
RecipeJpa recipeJpa = mapper.mapJpa(recipe);
recipeJpa.getSteps().forEach(step -> {
step.setRecipe(recipeJpa);
......@@ -30,6 +31,6 @@ public class CreateRecipeUseCaseImpl implements CreateRecipeUseCase {
});
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;
import com.example.apprecetas.exception.EntityNotFoundException;
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.infrastructure.controller.dto.output.RecipeOutputDto;
import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper;
......@@ -21,17 +22,16 @@ public class ReadRecipeUseCaseImpl implements ReadRecipeUseCase {
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@Override
public RecipeOutputDto readById(Long id) {
public Recipe readById(Long id) {
RecipeJpa recipeJpa = repository.readById(id)
.orElseThrow(() -> new EntityNotFoundException("La receta con id " + id + " no existe"));
return mapper.map(mapper.mapJpa(recipeJpa));
return mapper.mapJpa(recipeJpa);
}
@Override
public List<RecipeOutputDto> readAll() {
public List<Recipe> readAll() {
return repository.readAll().stream()
.map(mapper::mapJpa)
.map(mapper::map)
.toList();
}
}
package com.example.apprecetas.recipe.application.impl;
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.infrastructure.controller.dto.input.RecipeInputDto;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
......@@ -19,9 +20,9 @@ public class UpdateRecipeUseCaseImpl implements UpdateRecipeUseCase {
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@Override
public RecipeOutputDto update(Long id, RecipeInputDto recipeInputDto) {
RecipeJpa recipeJpa = mapper.mapJpa(mapper.map(recipeInputDto));
public Recipe update(Long id, Recipe recipe) {
RecipeJpa recipeJpa = mapper.mapJpa(recipe);
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;
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.output.RecipeOutputDto;
import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.PostMapping;
......@@ -23,6 +25,8 @@ public class CreateRecipeController {
private final CreateRecipeUseCase service;
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@PostMapping
public ResponseEntity<RecipeOutputDto> create(@RequestBody @Valid RecipeInputDto recipeInputDto, BindingResult result) {
if (result.hasErrors()) {
......@@ -32,7 +36,7 @@ public class CreateRecipeController {
throw new UnprocessableEntityException(errorMsg);
}
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;
import com.example.apprecetas.recipe.application.ReadRecipeUseCase;
import com.example.apprecetas.recipe.infrastructure.controller.dto.output.RecipeOutputDto;
import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper;
import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
......@@ -18,9 +20,11 @@ public class ReadRecipeController {
private final ReadRecipeUseCase service;
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@GetMapping("/{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
......@@ -28,7 +32,10 @@ public class ReadRecipeController {
if (service.readAll().isEmpty()) {
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;
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.output.RecipeOutputDto;
import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper;
import jakarta.validation.Valid;
import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.*;
......@@ -19,6 +21,8 @@ public class UpdateRecipeController {
private final UpdateRecipeUseCase service;
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@PutMapping("/{id}")
public ResponseEntity<RecipeOutputDto> update(@PathVariable Long id, @RequestBody @Valid RecipeInputDto recipeInputDto, BindingResult result) {
if (result.hasErrors()) {
......@@ -27,6 +31,6 @@ public class UpdateRecipeController {
.collect(Collectors.joining(";"));
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