diff --git a/refrigerator/src/main/java/moja/refrigerator/aggregate/ingredient/IngredientBookmark.java b/refrigerator/src/main/java/moja/refrigerator/aggregate/ingredient/IngredientBookmark.java index 5f7a32b..5140c88 100644 --- a/refrigerator/src/main/java/moja/refrigerator/aggregate/ingredient/IngredientBookmark.java +++ b/refrigerator/src/main/java/moja/refrigerator/aggregate/ingredient/IngredientBookmark.java @@ -15,10 +15,10 @@ public class IngredientBookmark { private long ingredientBookmarkPk; @ManyToOne - @JoinColumn(name = "user") + @JoinColumn(name = "user_pk") private User user; @ManyToOne - @JoinColumn(name = "ingredient_management") + @JoinColumn(name = "ingredient_management_pk") private IngredientManagement ingredientManagement; } diff --git a/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java b/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java index 0e821ac..aaa434e 100644 --- a/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java +++ b/refrigerator/src/main/java/moja/refrigerator/controller/ingredient/IngredientController.java @@ -1,6 +1,16 @@ package moja.refrigerator.controller.ingredient; import moja.refrigerator.dto.ingredient.request.IngredientCreateRequest; +import moja.refrigerator.dto.ingredient.request.RequestRegistIngredientBookmark; +import moja.refrigerator.dto.ingredient.response.ResponseRegistIngredientBookmark; +import moja.refrigerator.service.ingredient.IngredientService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; import moja.refrigerator.dto.ingredient.response.IngredientResponse; import moja.refrigerator.service.ingredient.IngredientService; import org.springframework.beans.factory.annotation.Autowired; @@ -8,6 +18,7 @@ import java.util.List; + @RestController @RequestMapping("/ingredient") public class IngredientController { @@ -24,9 +35,20 @@ public void createIngredient(@RequestBody IngredientCreateRequest request) { ingredientService.createIngredient(request); } + + @PostMapping("/bookmark/regist") + public ResponseEntity createIngredientBookmark( + @RequestBody RequestRegistIngredientBookmark requestBookmark + ) { + ResponseRegistIngredientBookmark responseBookmark = + ingredientService.createIngredientBookmark(requestBookmark); + + return ResponseEntity.status(HttpStatus.CREATED).body(responseBookmark); + // 재료 조회 @GetMapping public List getIngredient() { return ingredientService.getIngredient(); + } } diff --git a/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/RequestRegistIngredientBookmark.java b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/RequestRegistIngredientBookmark.java new file mode 100644 index 0000000..33c0ccf --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/request/RequestRegistIngredientBookmark.java @@ -0,0 +1,9 @@ +package moja.refrigerator.dto.ingredient.request; + +import lombok.Data; + +@Data +public class RequestRegistIngredientBookmark { + private long userPk; + private long ingredientPk; +} diff --git a/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/response/ResponseRegistIngredientBookmark.java b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/response/ResponseRegistIngredientBookmark.java new file mode 100644 index 0000000..41c5dab --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/dto/ingredient/response/ResponseRegistIngredientBookmark.java @@ -0,0 +1,13 @@ +package moja.refrigerator.dto.ingredient.response; + +import lombok.Data; +import moja.refrigerator.aggregate.ingredient.IngredientBookmark; +import moja.refrigerator.aggregate.ingredient.IngredientManagement; +import moja.refrigerator.aggregate.user.User; + +@Data +public class ResponseRegistIngredientBookmark { + private long ingredientBookmarkPk; + private User user; + private IngredientManagement ingredientManagement; +} diff --git a/refrigerator/src/main/java/moja/refrigerator/repository/ingredient/IngredientBookmarkRepository.java b/refrigerator/src/main/java/moja/refrigerator/repository/ingredient/IngredientBookmarkRepository.java new file mode 100644 index 0000000..90c2e54 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/repository/ingredient/IngredientBookmarkRepository.java @@ -0,0 +1,7 @@ +package moja.refrigerator.repository.ingredient; + +import moja.refrigerator.aggregate.ingredient.IngredientBookmark; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface IngredientBookmarkRepository extends JpaRepository { +} diff --git a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java index 45d10c0..d377ab6 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientService.java @@ -1,11 +1,18 @@ package moja.refrigerator.service.ingredient; import moja.refrigerator.dto.ingredient.request.IngredientCreateRequest; -import moja.refrigerator.dto.ingredient.response.IngredientResponse; - +import moja.refrigerator.dto.ingredient.request.RequestRegistIngredientBookmark; +import moja.refrigerator.dto.ingredient.response.ResponseRegistIngredientBookmark; import java.util.List; +import moja.refrigerator.dto.ingredient.response.IngredientResponse; public interface IngredientService { + void createIngredient(IngredientCreateRequest request); + + ResponseRegistIngredientBookmark createIngredientBookmark(RequestRegistIngredientBookmark requestBookmark); + void createIngredient(IngredientCreateRequest request); // 재료 등록 메서드 + List getIngredient(); // 재료 조회 메서드 + } diff --git a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java index 92465ca..146ea82 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/ingredient/IngredientServiceImpl.java @@ -1,14 +1,22 @@ package moja.refrigerator.service.ingredient; //import moja.refrigerator.aggregate.ingredient.IngredientCategory; +import jakarta.persistence.EntityNotFoundException; +import moja.refrigerator.aggregate.ingredient.IngredientBookmark; import moja.refrigerator.aggregate.ingredient.IngredientManagement; //import moja.refrigerator.aggregate.ingredient.IngredientStorage; +import moja.refrigerator.aggregate.user.User; import moja.refrigerator.dto.ingredient.request.IngredientCreateRequest; //import moja.refrigerator.repository.ingredient.IngredientCategoryRepository; +import moja.refrigerator.dto.ingredient.request.RequestRegistIngredientBookmark; +import moja.refrigerator.dto.ingredient.response.ResponseRegistIngredientBookmark; +import moja.refrigerator.repository.ingredient.IngredientBookmarkRepository; import moja.refrigerator.dto.ingredient.response.IngredientResponse; import moja.refrigerator.repository.ingredient.IngredientManagementRepository; //import moja.refrigerator.repository.ingredient.IngredientStorageRepository; +import moja.refrigerator.repository.user.UserRepository; import org.modelmapper.ModelMapper; +import org.modelmapper.convention.MatchingStrategies; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -22,16 +30,22 @@ public class IngredientServiceImpl implements IngredientService{ private IngredientManagementRepository ingredientManagementRepository; // private IngredientStorageRepository ingredientStorageRepository; // private IngredientCategoryRepository ingredientCategoryRepository; + private IngredientBookmarkRepository ingredientBookmarkRepository; + private UserRepository userRepository; private ModelMapper mapper; @Autowired public IngredientServiceImpl(IngredientManagementRepository ingredientManagementRepository, // IngredientStorageRepository ingredientStorageRepository, // IngredientCategoryRepository ingredientCategoryRepository, + IngredientBookmarkRepository ingredientBookmarkRepository, + UserRepository userRepository, ModelMapper mapper) { this.ingredientManagementRepository = ingredientManagementRepository; // this.ingredientStorageRepository = ingredientStorageRepository; // this.ingredientCategoryRepository = ingredientCategoryRepository; + this.ingredientBookmarkRepository = ingredientBookmarkRepository; + this.userRepository = userRepository; this.mapper = mapper; } @@ -54,6 +68,27 @@ public void createIngredient(IngredientCreateRequest request) { } @Override + + public ResponseRegistIngredientBookmark createIngredientBookmark(RequestRegistIngredientBookmark requestBookmark) { + User user = userRepository.findById(requestBookmark.getUserPk()) + .orElseThrow(() -> new EntityNotFoundException("회원을 찾을 수 없습니다.")); + + IngredientManagement ingredientManagement = ingredientManagementRepository + .findById(requestBookmark.getIngredientPk()) + .orElseThrow(() -> new EntityNotFoundException("재료를 찾을 수 없습니다.")); + + IngredientBookmark ingredientBookmark = new IngredientBookmark(); + + ingredientBookmark.setUser(user); + ingredientBookmark.setIngredientManagement(ingredientManagement); + + ingredientBookmarkRepository.save(ingredientBookmark); + + mapper.getConfiguration().setMatchingStrategy(MatchingStrategies.STRICT); + + return mapper.map(ingredientBookmark, ResponseRegistIngredientBookmark.class); + } + @Transactional(readOnly = true) public List getIngredient() { List ingredients = ingredientManagementRepository.findAll();