bugfix(recipe): eliminado uso de RecipeDocument en las interfaces CRUD de receta

parent 3e985f7d
...@@ -3,38 +3,17 @@ package com.example.apprecetas.recipe.application.impl; ...@@ -3,38 +3,17 @@ 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.entity.Recipe;
import com.example.apprecetas.recipe.domain.repository.CreateRecipeRepository; import com.example.apprecetas.recipe.domain.repository.CreateRecipeRepository;
import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import java.time.LocalDateTime;
@Service @Service
@RequiredArgsConstructor @RequiredArgsConstructor
public class CreateRecipeUseCaseImpl implements CreateRecipeUseCase { public class CreateRecipeUseCaseImpl implements CreateRecipeUseCase {
private final CreateRecipeRepository createRecipeRepository; private final CreateRecipeRepository createRecipeRepository;
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@Override @Override
public Recipe create(Recipe recipe) { public Recipe create(Recipe recipe) {
RecipeDocument recipeDocument = mapper.mapDocument(recipe); return createRecipeRepository.create(recipe);
// Obtener userId del token
String userId = SecurityContextHolder.getContext().getAuthentication().getName();
// Añadir userId
recipeDocument.setUserId(userId);
// Valores por defecto
recipeDocument.setFavorite(false);
recipeDocument.setCreatedAt(LocalDateTime.now());
RecipeDocument savedRecipe = createRecipeRepository.create(recipeDocument);
return mapper.mapDocument(savedRecipe);
} }
} }
package com.example.apprecetas.recipe.application.impl; package com.example.apprecetas.recipe.application.impl;
import com.example.apprecetas.exception.EntityNotFoundException;
import com.example.apprecetas.recipe.application.DeleteRecipeUseCase; import com.example.apprecetas.recipe.application.DeleteRecipeUseCase;
import com.example.apprecetas.recipe.domain.repository.DeleteRecipeRepository; import com.example.apprecetas.recipe.domain.repository.DeleteRecipeRepository;
import com.example.apprecetas.recipe.domain.repository.ReadRecipeRepository;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -13,12 +10,9 @@ import org.springframework.stereotype.Service; ...@@ -13,12 +10,9 @@ import org.springframework.stereotype.Service;
public class DeleteRecipeUseCaseImpl implements DeleteRecipeUseCase { public class DeleteRecipeUseCaseImpl implements DeleteRecipeUseCase {
private final DeleteRecipeRepository deleteRepository; private final DeleteRecipeRepository deleteRepository;
private final ReadRecipeRepository readRepository;
@Override @Override
public void delete(String id) { public void delete(String id) {
RecipeDocument recipeDocument = readRepository.readById(id) deleteRepository.delete(id);
.orElseThrow(() -> new EntityNotFoundException("Receta con id " + id + " no encontrada"));
deleteRepository.delete(recipeDocument);
} }
} }
package com.example.apprecetas.recipe.application.impl; 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.application.ReadRecipeUseCase;
import com.example.apprecetas.recipe.domain.entity.Recipe; 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.mapper.RecipeMapper;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -18,30 +14,23 @@ public class ReadRecipeUseCaseImpl implements ReadRecipeUseCase { ...@@ -18,30 +14,23 @@ public class ReadRecipeUseCaseImpl implements ReadRecipeUseCase {
private final ReadRecipeRepository repository; private final ReadRecipeRepository repository;
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@Override @Override
public Recipe readById(String id) { public Recipe readById(String id) {
RecipeDocument recipeDocument = repository.readById(id) return repository.readById(id);
.orElseThrow(() -> new EntityNotFoundException("Receta con id " + id + " no encontrada"));
return mapper.mapDocument(recipeDocument);
} }
@Override @Override
public Page<Recipe> readAllByUser(String userId, Pageable pageable) { public Page<Recipe> readAllByUser(String userId, Pageable pageable) {
return repository.readAllByUser(userId, pageable) return repository.readAllByUser(userId, pageable);
.map(mapper::mapDocument);
} }
@Override @Override
public Page<Recipe> readFavoritesByUser(String userId, Pageable pageable) { public Page<Recipe> readFavoritesByUser(String userId, Pageable pageable) {
return repository.readFavoritesByUser(userId, pageable) return repository.readFavoritesByUser(userId, pageable);
.map(mapper::mapDocument);
} }
@Override @Override
public Page<Recipe> searchRecipes(String userId, String query, Pageable pageable) { public Page<Recipe> searchRecipes(String userId, String query, Pageable pageable) {
return repository.searchRecipes(userId, query, query, pageable) return repository.searchRecipes(userId, query, query, pageable);
.map(mapper::mapDocument);
} }
} }
...@@ -19,9 +19,7 @@ public class UpdateRecipeUseCaseImpl implements UpdateRecipeUseCase { ...@@ -19,9 +19,7 @@ public class UpdateRecipeUseCaseImpl implements UpdateRecipeUseCase {
@Override @Override
public Recipe update(String id, Recipe recipe) { public Recipe update(String id, Recipe recipe) {
RecipeDocument recipeDocument = mapper.mapDocument(recipe); return repository.update(id, recipe);
RecipeDocument updatedRecipe = repository.update(id, recipeDocument);
return mapper.mapDocument(updatedRecipe);
} }
@Override @Override
......
package com.example.apprecetas.recipe.domain.repository; package com.example.apprecetas.recipe.domain.repository;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument; import com.example.apprecetas.recipe.domain.entity.Recipe;
public interface CreateRecipeRepository { public interface CreateRecipeRepository {
RecipeDocument create(RecipeDocument recipeDocument); Recipe create(Recipe recipe);
} }
package com.example.apprecetas.recipe.domain.repository; package com.example.apprecetas.recipe.domain.repository;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument; import com.example.apprecetas.recipe.domain.entity.Recipe;
public interface DeleteRecipeRepository { public interface DeleteRecipeRepository {
void delete(RecipeDocument recipeDocument); void delete(String id);
} }
package com.example.apprecetas.recipe.domain.repository; package com.example.apprecetas.recipe.domain.repository;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument; import com.example.apprecetas.recipe.domain.entity.Recipe;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import java.util.Optional;
public interface ReadRecipeRepository { public interface ReadRecipeRepository {
Optional<RecipeDocument> readById(String id); Recipe readById(String id);
Page<RecipeDocument> readAllByUser(String userId, Pageable pageable); Page<Recipe> readAllByUser(String userId, Pageable pageable);
Page<RecipeDocument> readFavoritesByUser(String userId, Pageable pageable); Page<Recipe> readFavoritesByUser(String userId, Pageable pageable);
Page<RecipeDocument> searchRecipes(String userId, String name, String ingredients, Pageable pageable); Page<Recipe> searchRecipes(String userId, String name, String ingredients, Pageable pageable);
} }
package com.example.apprecetas.recipe.domain.repository; package com.example.apprecetas.recipe.domain.repository;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument; import com.example.apprecetas.recipe.domain.entity.Recipe;
public interface UpdateRecipeRepository { public interface UpdateRecipeRepository {
RecipeDocument update(String id, RecipeDocument recipeDocument); Recipe update(String id, Recipe recipe);
void madeFavorite(String id); void madeFavorite(String id);
......
package com.example.apprecetas.recipe.infrastructure.repository.impl; package com.example.apprecetas.recipe.infrastructure.repository.impl;
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.mapper.RecipeMapper;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeRepository; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.security.core.context.SecurityContextHolder;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.time.LocalDateTime;
@Repository @Repository
@RequiredArgsConstructor @RequiredArgsConstructor
public class CreateRecipeRepositoryImpl implements CreateRecipeRepository { public class CreateRecipeRepositoryImpl implements CreateRecipeRepository {
private final RecipeRepository recipeRepository; private final RecipeRepository recipeRepository;
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@Override @Override
public RecipeDocument create(RecipeDocument recipeDocument) { public Recipe create(Recipe recipe) {
return recipeRepository.save(recipeDocument); RecipeDocument recipeDocument = mapper.mapDocument(recipe);
// Obtener userId del token
String userId = SecurityContextHolder.getContext().getAuthentication().getName();
// Añadir userId
recipeDocument.setUserId(userId);
// Valores por defecto
recipeDocument.setFavorite(false);
recipeDocument.setCreatedAt(LocalDateTime.now());
return mapper.mapDocument(recipeRepository.save(mapper.mapDocument(recipe)));
} }
} }
package com.example.apprecetas.recipe.infrastructure.repository.impl; package com.example.apprecetas.recipe.infrastructure.repository.impl;
import com.example.apprecetas.exception.EntityNotFoundException;
import com.example.apprecetas.recipe.domain.repository.DeleteRecipeRepository; import com.example.apprecetas.recipe.domain.repository.DeleteRecipeRepository;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeRepository; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeRepository;
...@@ -13,7 +14,10 @@ public class DeleteRecipeRepositoryImpl implements DeleteRecipeRepository { ...@@ -13,7 +14,10 @@ public class DeleteRecipeRepositoryImpl implements DeleteRecipeRepository {
private final RecipeRepository recipeRepository; private final RecipeRepository recipeRepository;
@Override @Override
public void delete(RecipeDocument recipeDocument) { public void delete(String id) {
RecipeDocument recipeDocument = recipeRepository.findById(id)
.orElseThrow(() -> new EntityNotFoundException("Receta con id " + id + " no encontrada"));
recipeRepository.delete(recipeDocument); recipeRepository.delete(recipeDocument);
} }
} }
package com.example.apprecetas.recipe.infrastructure.repository.impl; package com.example.apprecetas.recipe.infrastructure.repository.impl;
import com.example.apprecetas.exception.EntityNotFoundException;
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.mapper.RecipeMapper;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeRepository; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.data.domain.Page; import org.springframework.data.domain.Page;
import org.springframework.data.domain.Pageable; import org.springframework.data.domain.Pageable;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository @Repository
@RequiredArgsConstructor @RequiredArgsConstructor
public class ReadRecipeRepositoryImpl implements ReadRecipeRepository { public class ReadRecipeRepositoryImpl implements ReadRecipeRepository {
private final RecipeRepository recipeRepository; private final RecipeRepository recipeRepository;
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@Override @Override
public Optional<RecipeDocument> readById(String id) { public Recipe readById(String id) {
return recipeRepository.findById(id); RecipeDocument recipeDocument = recipeRepository.findById(id)
.orElseThrow(() -> new EntityNotFoundException("Receta con id " + id + " no encontrada"));
return mapper.mapDocument(recipeDocument);
} }
@Override @Override
public Page<RecipeDocument> readAllByUser(String userId, Pageable pageable) { public Page<Recipe> readAllByUser(String userId, Pageable pageable) {
return recipeRepository.findByUserId(userId, pageable); return recipeRepository.findByUserId(userId, pageable)
.map(mapper::mapDocument);
} }
@Override @Override
public Page<RecipeDocument> readFavoritesByUser(String userId, Pageable pageable) { public Page<Recipe> readFavoritesByUser(String userId, Pageable pageable) {
return recipeRepository.findByUserIdAndIsFavoriteTrue(userId, pageable); return recipeRepository.findByUserIdAndIsFavoriteTrue(userId, pageable)
.map(mapper::mapDocument);
} }
@Override @Override
public Page<RecipeDocument> searchRecipes(String userId, String name, String ingredients, Pageable pageable) { public Page<Recipe> searchRecipes(String userId, String name, String ingredients, Pageable pageable) {
return recipeRepository.findByUserIdAndNameIgnoreCaseContainingOrIngredientsNameIgnoreCaseContaining(userId, name, ingredients, pageable); return recipeRepository.findByUserIdAndNameIgnoreCaseContainingOrIngredientsNameIgnoreCaseContaining(userId, name, ingredients, pageable)
.map(mapper::mapDocument);
} }
} }
package com.example.apprecetas.recipe.infrastructure.repository.impl; package com.example.apprecetas.recipe.infrastructure.repository.impl;
import com.example.apprecetas.exception.EntityNotFoundException; import com.example.apprecetas.exception.EntityNotFoundException;
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.mapper.IngredientMapper;
import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper;
import com.example.apprecetas.recipe.infrastructure.mapper.StepMapper;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeRepository; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
import java.util.stream.Collectors;
@Repository @Repository
@RequiredArgsConstructor @RequiredArgsConstructor
public class UpdateRecipeRepositoryImpl implements UpdateRecipeRepository { public class UpdateRecipeRepositoryImpl implements UpdateRecipeRepository {
private final RecipeRepository recipeRepository; private final RecipeRepository recipeRepository;
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
private final IngredientMapper ingredientMapper = Mappers.getMapper(IngredientMapper.class);
private final StepMapper stepMapper = Mappers.getMapper(StepMapper.class);
@Override @Override
public RecipeDocument update(String id, RecipeDocument recipeDocument) { public Recipe update(String id, Recipe recipe) {
RecipeDocument recipe = recipeRepository.findById(id) RecipeDocument recipeDocument = recipeRepository.findById(id)
.orElseThrow(() -> new EntityNotFoundException("Receta con id " + id + " no encontrada")); .orElseThrow(() -> new EntityNotFoundException("Receta con id " + id + " no encontrada"));
recipe.setName(recipeDocument.getName()); recipeDocument.setName(recipe.getName());
recipe.setDescription(recipeDocument.getDescription()); recipeDocument.setDescription(recipe.getDescription());
recipe.setPicture(recipeDocument.getPicture()); recipeDocument.setPicture(recipe.getPicture());
recipe.setIngredients(recipeDocument.getIngredients()); recipeDocument.setIngredients(recipe.getIngredients().stream().map(ingredientMapper::map).collect(Collectors.toList()));
recipe.setSteps(recipeDocument.getSteps()); recipeDocument.setSteps(recipe.getSteps().stream().map(stepMapper::map).collect(Collectors.toList()));
return recipeRepository.save(recipe); RecipeDocument updatedRecipe = recipeRepository.save(recipeDocument);
return mapper.mapDocument(updatedRecipe);
} }
@Override @Override
......
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