perf(recipe): cambio a MongoDB

parent f3a3de77
Showing with 86 additions and 115 deletions
package com.example.apprecetas.recipe.application; package com.example.apprecetas.recipe.application;
public interface DeleteRecipeUseCase { public interface DeleteRecipeUseCase {
void delete(Long id); void delete(String id);
} }
...@@ -5,7 +5,7 @@ import com.example.apprecetas.recipe.domain.entity.Recipe; ...@@ -5,7 +5,7 @@ import com.example.apprecetas.recipe.domain.entity.Recipe;
import java.util.List; import java.util.List;
public interface ReadRecipeUseCase { public interface ReadRecipeUseCase {
Recipe readById(Long id); Recipe readById(String id);
List<Recipe> readAll(); List<Recipe> readAll();
} }
...@@ -3,5 +3,5 @@ package com.example.apprecetas.recipe.application; ...@@ -3,5 +3,5 @@ package com.example.apprecetas.recipe.application;
import com.example.apprecetas.recipe.domain.entity.Recipe; import com.example.apprecetas.recipe.domain.entity.Recipe;
public interface UpdateRecipeUseCase { public interface UpdateRecipeUseCase {
Recipe update(Long id, Recipe recipe); Recipe update(String id, Recipe recipe);
} }
...@@ -4,7 +4,7 @@ import com.example.apprecetas.recipe.application.CreateRecipeUseCase; ...@@ -4,7 +4,7 @@ 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.mapper.RecipeMapper;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -19,16 +19,16 @@ public class CreateRecipeUseCaseImpl implements CreateRecipeUseCase { ...@@ -19,16 +19,16 @@ public class CreateRecipeUseCaseImpl implements CreateRecipeUseCase {
@Override @Override
public Recipe create(Recipe recipe) { public Recipe create(Recipe recipe) {
RecipeJpa recipeJpa = mapper.mapJpa(recipe); RecipeDocument recipeDocument = mapper.mapDocument(recipe);
recipeJpa.getSteps().forEach(step -> { /*recipeDocument.getSteps().forEach(step -> {
step.setRecipe(recipeJpa); step.setRecipe(recipeDocument);
});
recipeJpa.getIngredients().forEach(ingredient -> {
ingredient.setRecipe(recipeJpa);
}); });
recipeDocument.getIngredients().forEach(ingredient -> {
ingredient.setRecipe(recipeDocument);
});*/
RecipeJpa savedRecipe = repository.create(recipeJpa); RecipeDocument savedRecipe = repository.create(recipeDocument);
return mapper.mapJpa(savedRecipe); return mapper.mapDocument(savedRecipe);
} }
} }
...@@ -4,7 +4,7 @@ import com.example.apprecetas.exception.EntityNotFoundException; ...@@ -4,7 +4,7 @@ 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.domain.repository.ReadRecipeRepository;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; 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;
...@@ -16,9 +16,9 @@ public class DeleteRecipeUseCaseImpl implements DeleteRecipeUseCase { ...@@ -16,9 +16,9 @@ public class DeleteRecipeUseCaseImpl implements DeleteRecipeUseCase {
private final ReadRecipeRepository readRepository; private final ReadRecipeRepository readRepository;
@Override @Override
public void delete(Long id) { public void delete(String id) {
RecipeJpa recipeJpa = readRepository.readById(id) RecipeDocument recipeDocument = readRepository.readById(id)
.orElseThrow(() -> new EntityNotFoundException("La receta con id " + id + " no existe")); .orElseThrow(() -> new EntityNotFoundException("La receta con id " + id + " no existe"));
deleteRepository.delete(recipeJpa); deleteRepository.delete(recipeDocument);
} }
} }
...@@ -5,7 +5,7 @@ import com.example.apprecetas.recipe.application.ReadRecipeUseCase; ...@@ -5,7 +5,7 @@ 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.mapper.RecipeMapper;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -21,16 +21,16 @@ public class ReadRecipeUseCaseImpl implements ReadRecipeUseCase { ...@@ -21,16 +21,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 Recipe readById(Long id) { public Recipe readById(String id) {
RecipeJpa recipeJpa = repository.readById(id) RecipeDocument recipeDocument = 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.mapJpa(recipeJpa); return mapper.mapDocument(recipeDocument);
} }
@Override @Override
public List<Recipe> readAll() { public List<Recipe> readAll() {
return repository.readAll().stream() return repository.readAll().stream()
.map(mapper::mapJpa) .map(mapper::mapDocument)
.toList(); .toList();
} }
} }
...@@ -4,7 +4,7 @@ import com.example.apprecetas.recipe.application.UpdateRecipeUseCase; ...@@ -4,7 +4,7 @@ import com.example.apprecetas.recipe.application.UpdateRecipeUseCase;
import com.example.apprecetas.recipe.domain.entity.Recipe; 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.RecipeMapper; import com.example.apprecetas.recipe.infrastructure.mapper.RecipeMapper;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.mapstruct.factory.Mappers; import org.mapstruct.factory.Mappers;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
...@@ -18,9 +18,9 @@ public class UpdateRecipeUseCaseImpl implements UpdateRecipeUseCase { ...@@ -18,9 +18,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 Recipe update(Long id, Recipe recipe) { public Recipe update(String id, Recipe recipe) {
RecipeJpa recipeJpa = mapper.mapJpa(recipe); RecipeDocument recipeDocument = mapper.mapDocument(recipe);
RecipeJpa updatedRecipe = repository.upadte(id, recipeJpa); RecipeDocument updatedRecipe = repository.upadte(id, recipeDocument);
return mapper.mapJpa(updatedRecipe); return mapper.mapDocument(updatedRecipe);
} }
} }
...@@ -11,7 +11,7 @@ import java.util.Set; ...@@ -11,7 +11,7 @@ import java.util.Set;
@NoArgsConstructor @NoArgsConstructor
public class Recipe { public class Recipe {
private Long id; private String id;
private String name; private String name;
private String description; private String description;
private String picture; private String picture;
......
package com.example.apprecetas.recipe.domain.repository; package com.example.apprecetas.recipe.domain.repository;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
public interface CreateRecipeRepository { public interface CreateRecipeRepository {
RecipeJpa create(RecipeJpa recipeJpa); RecipeDocument create(RecipeDocument recipeDocument);
} }
package com.example.apprecetas.recipe.domain.repository; package com.example.apprecetas.recipe.domain.repository;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
public interface DeleteRecipeRepository { public interface DeleteRecipeRepository {
void delete(RecipeJpa recipeJpa); void delete(RecipeDocument recipeDocument);
} }
package com.example.apprecetas.recipe.domain.repository; package com.example.apprecetas.recipe.domain.repository;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import java.util.List; import java.util.List;
import java.util.Optional; import java.util.Optional;
public interface ReadRecipeRepository { public interface ReadRecipeRepository {
Optional<RecipeJpa> readById(Long id); Optional<RecipeDocument> readById(String id);
List<RecipeJpa> readAll(); List<RecipeDocument> readAll();
} }
package com.example.apprecetas.recipe.domain.repository; package com.example.apprecetas.recipe.domain.repository;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
public interface UpdateRecipeRepository { public interface UpdateRecipeRepository {
RecipeJpa upadte(Long id, RecipeJpa recipeJpa); RecipeDocument upadte(String id, RecipeDocument recipeDocument);
} }
...@@ -16,7 +16,7 @@ public class DeleteRecipeController { ...@@ -16,7 +16,7 @@ public class DeleteRecipeController {
private final DeleteRecipeUseCase service; private final DeleteRecipeUseCase service;
@DeleteMapping("/{id}") @DeleteMapping("/{id}")
public ResponseEntity<String> delete(@PathVariable Long id) { public ResponseEntity<String> delete(@PathVariable String id) {
service.delete(id); service.delete(id);
return ResponseEntity.ok().body("La receta con id " + id + " se ha eliminado correctamente."); return ResponseEntity.ok().body("La receta con id " + id + " se ha eliminado correctamente.");
} }
......
...@@ -23,7 +23,7 @@ public class ReadRecipeController { ...@@ -23,7 +23,7 @@ public class ReadRecipeController {
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class); private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class);
@GetMapping("/{id}") @GetMapping("/{id}")
public ResponseEntity<RecipeOutputDto> readById(@PathVariable Long id) { public ResponseEntity<RecipeOutputDto> readById(@PathVariable String id) {
return ResponseEntity.ok().body(mapper.map(service.readById(id))); return ResponseEntity.ok().body(mapper.map(service.readById(id)));
} }
......
...@@ -24,7 +24,7 @@ public class UpdateRecipeController { ...@@ -24,7 +24,7 @@ public class UpdateRecipeController {
private final RecipeMapper mapper = Mappers.getMapper(RecipeMapper.class); 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 String id, @RequestBody @Valid RecipeInputDto recipeInputDto, BindingResult result) {
if (result.hasErrors()) { if (result.hasErrors()) {
String errorMsg = result.getFieldErrors().stream() String errorMsg = result.getFieldErrors().stream()
.map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage()) .map(fieldError -> fieldError.getField() + ": " + fieldError.getDefaultMessage())
......
...@@ -28,7 +28,7 @@ public class RecipeInputDto { ...@@ -28,7 +28,7 @@ public class RecipeInputDto {
@Valid @Valid
private Set<IngredientInputDto> ingredients; private Set<IngredientInputDto> ingredients;
@NotEmpty(message = "Debe incluir al menos un ingrediente") @NotEmpty(message = "Debe incluir al menos un paso")
@Valid @Valid
private Set<StepInputDto> steps; private Set<StepInputDto> steps;
......
...@@ -13,7 +13,7 @@ import java.util.Set; ...@@ -13,7 +13,7 @@ import java.util.Set;
@NoArgsConstructor @NoArgsConstructor
public class RecipeOutputDto { public class RecipeOutputDto {
private Long id; private String id;
private String name; private String name;
private String description; private String description;
private String picture; private String picture;
......
...@@ -3,7 +3,7 @@ package com.example.apprecetas.recipe.infrastructure.mapper; ...@@ -3,7 +3,7 @@ package com.example.apprecetas.recipe.infrastructure.mapper;
import com.example.apprecetas.recipe.domain.entity.Recipe; 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;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import org.mapstruct.Mapper; import org.mapstruct.Mapper;
@Mapper @Mapper
...@@ -13,8 +13,8 @@ public interface RecipeMapper { ...@@ -13,8 +13,8 @@ public interface RecipeMapper {
Recipe map(RecipeInputDto recipeInputDto); Recipe map(RecipeInputDto recipeInputDto);
RecipeJpa mapJpa(Recipe recipe); RecipeDocument mapDocument(Recipe recipe);
Recipe mapJpa(RecipeJpa recipeJpa); Recipe mapDocument(RecipeDocument recipeDocument);
} }
package com.example.apprecetas.recipe.infrastructure.repository.impl; package com.example.apprecetas.recipe.infrastructure.repository.impl;
import com.example.apprecetas.recipe.domain.repository.CreateRecipeRepository; import com.example.apprecetas.recipe.domain.repository.CreateRecipeRepository;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeRepositoryJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -10,10 +10,10 @@ import org.springframework.stereotype.Repository; ...@@ -10,10 +10,10 @@ import org.springframework.stereotype.Repository;
@RequiredArgsConstructor @RequiredArgsConstructor
public class CreateRecipeRepositoryImpl implements CreateRecipeRepository { public class CreateRecipeRepositoryImpl implements CreateRecipeRepository {
private final RecipeRepositoryJpa repositoryJpa; private final RecipeRepository repositoryJpa;
@Override @Override
public RecipeJpa create(RecipeJpa recipeJpa) { public RecipeDocument create(RecipeDocument recipeDocument) {
return repositoryJpa.save(recipeJpa); return repositoryJpa.save(recipeDocument);
} }
} }
package com.example.apprecetas.recipe.infrastructure.repository.impl; package com.example.apprecetas.recipe.infrastructure.repository.impl;
import com.example.apprecetas.recipe.domain.repository.DeleteRecipeRepository; import com.example.apprecetas.recipe.domain.repository.DeleteRecipeRepository;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeRepositoryJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -10,10 +10,10 @@ import org.springframework.stereotype.Repository; ...@@ -10,10 +10,10 @@ import org.springframework.stereotype.Repository;
@RequiredArgsConstructor @RequiredArgsConstructor
public class DeleteRecipeRepositoryImpl implements DeleteRecipeRepository { public class DeleteRecipeRepositoryImpl implements DeleteRecipeRepository {
private final RecipeRepositoryJpa repositoryJpa; private final RecipeRepository repositoryJpa;
@Override @Override
public void delete(RecipeJpa recipeJpa) { public void delete(RecipeDocument recipeDocument) {
repositoryJpa.delete(recipeJpa); repositoryJpa.delete(recipeDocument);
} }
} }
package com.example.apprecetas.recipe.infrastructure.repository.impl; package com.example.apprecetas.recipe.infrastructure.repository.impl;
import com.example.apprecetas.recipe.domain.repository.ReadRecipeRepository; import com.example.apprecetas.recipe.domain.repository.ReadRecipeRepository;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeRepositoryJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -13,15 +13,15 @@ import java.util.Optional; ...@@ -13,15 +13,15 @@ import java.util.Optional;
@RequiredArgsConstructor @RequiredArgsConstructor
public class ReadRecipeRepositoryImpl implements ReadRecipeRepository { public class ReadRecipeRepositoryImpl implements ReadRecipeRepository {
private final RecipeRepositoryJpa repositoryJpa; private final RecipeRepository repositoryJpa;
@Override @Override
public Optional<RecipeJpa> readById(Long id) { public Optional<RecipeDocument> readById(String id) {
return repositoryJpa.findById(id); return repositoryJpa.findById(id);
} }
@Override @Override
public List<RecipeJpa> readAll() { public List<RecipeDocument> readAll() {
return repositoryJpa.findAll(); return repositoryJpa.findAll();
} }
} }
...@@ -2,8 +2,8 @@ package com.example.apprecetas.recipe.infrastructure.repository.impl; ...@@ -2,8 +2,8 @@ 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.repository.UpdateRecipeRepository; import com.example.apprecetas.recipe.domain.repository.UpdateRecipeRepository;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeDocument;
import com.example.apprecetas.recipe.infrastructure.repository.jpa.RecipeRepositoryJpa; import com.example.apprecetas.recipe.infrastructure.repository.mongodb.RecipeRepository;
import lombok.RequiredArgsConstructor; import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Repository; import org.springframework.stereotype.Repository;
...@@ -11,17 +11,17 @@ import org.springframework.stereotype.Repository; ...@@ -11,17 +11,17 @@ import org.springframework.stereotype.Repository;
@RequiredArgsConstructor @RequiredArgsConstructor
public class UpdateRecipeRepositoryImpl implements UpdateRecipeRepository { public class UpdateRecipeRepositoryImpl implements UpdateRecipeRepository {
private final RecipeRepositoryJpa repositoryJpa; private final RecipeRepository repositoryJpa;
@Override @Override
public RecipeJpa upadte(Long id, RecipeJpa recipeJpa) { public RecipeDocument upadte(String id, RecipeDocument recipeDocument) {
RecipeJpa recipe = repositoryJpa.findById(id) RecipeDocument recipe = repositoryJpa.findById(id)
.orElseThrow(() -> new EntityNotFoundException("La receta con id " + id + " no existe")); .orElseThrow(() -> new EntityNotFoundException("La receta con id " + id + " no existe"));
recipe.setName(recipeJpa.getName()); recipe.setName(recipeDocument.getName());
recipe.setDescription(recipeJpa.getDescription()); recipe.setDescription(recipeDocument.getDescription());
recipe.setPicture(recipeJpa.getPicture()); recipe.setPicture(recipeDocument.getPicture());
return repositoryJpa.save(recipe); return repositoryJpa.save(recipe);
} }
......
package com.example.apprecetas.recipe.infrastructure.repository.jpa;
import org.springframework.data.jpa.repository.JpaRepository;
public interface RecipeRepositoryJpa extends JpaRepository<RecipeJpa, Long> {
}
package com.example.apprecetas.recipe.infrastructure.repository.jpa; package com.example.apprecetas.recipe.infrastructure.repository.mongodb;
import jakarta.persistence.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
@Entity
@Table(name = "ingredient")
@Getter @Getter
@Setter @Setter
@NoArgsConstructor @NoArgsConstructor
@AllArgsConstructor @AllArgsConstructor
public class IngredientJpa { public class IngredientDocument {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_ingredient")
private Long id;
private String name; private String name;
private int quantity; private int quantity;
private String unitOfMeasure; private String unitOfMeasure;
@ManyToOne
@JoinColumn(name = "recipe_id")
private RecipeJpa recipe;
} }
package com.example.apprecetas.recipe.infrastructure.repository.jpa; package com.example.apprecetas.recipe.infrastructure.repository.mongodb;
import jakarta.persistence.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.util.HashSet;
import java.util.Set; import java.util.Set;
@Entity @Document(collection = "recipes")
@Table(name = "recipe")
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Getter @Getter
@Setter @Setter
public class RecipeJpa { public class RecipeDocument {
@Id @Id
@GeneratedValue(strategy = GenerationType.IDENTITY) private String id;
@Column(name = "id_recipe")
private Long id;
private String name; private String name;
private String description; private String description;
private String picture; private String picture;
@OneToMany(mappedBy = "recipe", cascade = CascadeType.ALL, orphanRemoval = true) private Set<IngredientDocument> ingredients = new HashSet<>();
private Set<IngredientJpa> ingredients; private Set<StepDocument> steps = new HashSet<>();
@OneToMany(mappedBy = "recipe", cascade = CascadeType.ALL, orphanRemoval = true)
private Set<StepJpa> steps;
} }
package com.example.apprecetas.recipe.infrastructure.repository.mongodb;
import org.springframework.data.mongodb.repository.MongoRepository;
public interface RecipeRepository extends MongoRepository<RecipeDocument, String> {
}
package com.example.apprecetas.recipe.infrastructure.repository.jpa; package com.example.apprecetas.recipe.infrastructure.repository.mongodb;
import jakarta.persistence.*;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import lombok.Getter; import lombok.Getter;
import lombok.NoArgsConstructor; import lombok.NoArgsConstructor;
import lombok.Setter; import lombok.Setter;
@Entity
@Table(name = "step")
@AllArgsConstructor @AllArgsConstructor
@NoArgsConstructor @NoArgsConstructor
@Getter @Getter
@Setter @Setter
public class StepJpa { public class StepDocument {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "id_step")
private Long id;
private int number; private int number;
private String description; private String description;
@ManyToOne
@JoinColumn(name = "recipe_id")
private RecipeJpa recipe;
} }
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