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