From e7cf93ebdaa3f7007c1024d606d2b6a8af56560d Mon Sep 17 00:00:00 2001 From: mincheol Date: Wed, 11 Dec 2024 18:36:21 +0900 Subject: [PATCH] =?UTF-8?q?[=EA=B9=80=EB=AF=BC=EC=B2=A0]=20=ED=95=9C=20?= =?UTF-8?q?=EC=9D=BC=20:=201.=20cooking=5Fsource=20->=20recipe=5Fsource=20?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=BC=EA=B4=84=20=EB=B3=80=EA=B2=BD.=202.=20?= =?UTF-8?q?=EC=83=9D=EC=84=B1=EC=9A=A9=20Category,=20Repository,=20Request?= =?UTF-8?q?,=20=EC=B6=94=EA=B0=80=203.=20=EC=9D=BD=EA=B8=B0=20=EC=9A=A9=20?= =?UTF-8?q?Repository,=20response=20=EC=B6=94=EA=B0=80=204.=20UserDummyRep?= =?UTF-8?q?ository=20=EC=83=9D=EC=84=B1=205.=20=EC=9E=84=EC=8B=9C=20recipe?= =?UTF-8?q?=5Fsource=5Ftype,=20recipe=5Fsource=5Fcategory=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 문제점 : 1. recipe에 recipe 적을 란이 없다. 2. RecipeCreateTime이 저장되는데 format을 안된다. 해야할 일 : 1. 문제점 수정 2. UD 생성 --- refrigerator/.idea/dataSources.xml | 6 +- .../refrigerator/aggregate/recipe/Recipe.java | 18 ++++-- .../aggregate/recipe/RecipeSource.java | 22 +++---- .../aggregate/recipe/RecipeSourceType.java | 8 +-- .../controller/recipe/RecipeController.java | 18 +++++- .../recipe/request/RecipeCreateRequest.java | 22 +++++++ .../request/RecipeSourceCreateRequest.java | 15 +++++ .../dto/recipe/response/RecipeResponse.java | 23 ++++++++ .../recipe/RecipeCategoryRepositoy.java | 10 ++++ .../repository/recipe/RecipeRepository.java | 2 + .../recipe/RecipeSourceRepository.java | 7 +++ .../repository/user/UserRepository.java | 7 +++ .../service/recipe/RecipeService.java | 10 ++++ .../service/recipe/RecipeServiceImpl.java | 58 ++++++++++++++++++- 14 files changed, 201 insertions(+), 25 deletions(-) create mode 100644 refrigerator/src/main/java/moja/refrigerator/dto/recipe/request/RecipeCreateRequest.java create mode 100644 refrigerator/src/main/java/moja/refrigerator/dto/recipe/request/RecipeSourceCreateRequest.java create mode 100644 refrigerator/src/main/java/moja/refrigerator/dto/recipe/response/RecipeResponse.java create mode 100644 refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeCategoryRepositoy.java create mode 100644 refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeSourceRepository.java create mode 100644 refrigerator/src/main/java/moja/refrigerator/repository/user/UserRepository.java diff --git a/refrigerator/.idea/dataSources.xml b/refrigerator/.idea/dataSources.xml index 6ce6193..acfaa41 100644 --- a/refrigerator/.idea/dataSources.xml +++ b/refrigerator/.idea/dataSources.xml @@ -1,13 +1,11 @@ - + mysql.8 true - true - $PROJECT_DIR$/src/main/resources/application.yml com.mysql.cj.jdbc.Driver - jdbc:mysql://localhost:3306/refrigerator + jdbc:mysql://localhost:3306 diff --git a/refrigerator/src/main/java/moja/refrigerator/aggregate/recipe/Recipe.java b/refrigerator/src/main/java/moja/refrigerator/aggregate/recipe/Recipe.java index aa32223..fdac2ea 100644 --- a/refrigerator/src/main/java/moja/refrigerator/aggregate/recipe/Recipe.java +++ b/refrigerator/src/main/java/moja/refrigerator/aggregate/recipe/Recipe.java @@ -1,8 +1,13 @@ package moja.refrigerator.aggregate.recipe; +import com.fasterxml.jackson.annotation.JsonFormat; import jakarta.persistence.*; import lombok.Data; import moja.refrigerator.aggregate.user.User; +import org.hibernate.annotations.CreationTimestamp; +import org.hibernate.annotations.UpdateTimestamp; + +import java.time.LocalDateTime; @Data @Entity @@ -20,23 +25,28 @@ public class Recipe { @Column(name = "recipe_cooking_time") private int recipeCookingTime; + + @CreationTimestamp @Column(name = "recipe_create_time") - private String recipeCreateTime; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd", timezone = "Asia/Seoul") + private LocalDateTime recipeCreateTime; + @UpdateTimestamp @Column(name = "recipe_update_time") - private String recipeUpdateTime; + @JsonFormat(shape = JsonFormat.Shape.STRING, pattern = "yyyy.MM.dd", timezone = "Asia/Seoul") + private LocalDateTime recipeUpdateTime; @Column(name = "recipe_difficulty") private int recipeDifficulty; @Column(name = "recipe_views") - private long recipeViews; + private long recipeViews = 0; @JoinColumn(name = "user") @ManyToOne private User user; - @JoinColumn(name = "cooking_source") + @JoinColumn(name = "recipe_source") @ManyToOne private RecipeSource recipeSource; diff --git a/refrigerator/src/main/java/moja/refrigerator/aggregate/recipe/RecipeSource.java b/refrigerator/src/main/java/moja/refrigerator/aggregate/recipe/RecipeSource.java index 6f16f80..8750ffd 100644 --- a/refrigerator/src/main/java/moja/refrigerator/aggregate/recipe/RecipeSource.java +++ b/refrigerator/src/main/java/moja/refrigerator/aggregate/recipe/RecipeSource.java @@ -4,27 +4,29 @@ import jakarta.persistence.*; import lombok.Data; +import java.time.LocalDateTime; + @Data @Entity @Table(name="tbl_recipe_source") public class RecipeSource { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "cooking_source_pk") - private long cookingSourcePk; + @Column(name = "recipe_source_pk") + private long recipeSourcePk; - @Column(name = "cooking_source_save") - private String cookingSourceSave; + @Column(name = "recipe_source_save") + private String recipeSourceSave; - @Column(name = "cooking_source_create_time") - private String cookingSourceCreateTime; + @Column(name = "recipe_source_create_time") + private String recipeSourceCreateTime = LocalDateTime.now().toString(); - @Column(name = "cooking_source_file_name") - private String cookingSourceFileName; + @Column(name = "recipe_source_file_name") + private String recipeSourceFileName; - @JoinColumn(name = "cooking_source_type") + @JoinColumn(name = "recipe_source_type") @OneToOne - private RecipeSourceType cookingSourceType; + private RecipeSourceType recipeSourceType; } diff --git a/refrigerator/src/main/java/moja/refrigerator/aggregate/recipe/RecipeSourceType.java b/refrigerator/src/main/java/moja/refrigerator/aggregate/recipe/RecipeSourceType.java index e785111..8ace140 100644 --- a/refrigerator/src/main/java/moja/refrigerator/aggregate/recipe/RecipeSourceType.java +++ b/refrigerator/src/main/java/moja/refrigerator/aggregate/recipe/RecipeSourceType.java @@ -10,9 +10,9 @@ public class RecipeSourceType { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - @Column(name = "cooking_source_type_pk") - private int cookingSourceTypePk; + @Column(name = "recipe_source_type_pk") + private int recipeSourceTypePk; - @Column(name = "cooking_source_type",length = 50) - private String cookingSourceType; + @Column(name = "recipe_source_type",length = 50) + private String recipeSourceType; } diff --git a/refrigerator/src/main/java/moja/refrigerator/controller/recipe/RecipeController.java b/refrigerator/src/main/java/moja/refrigerator/controller/recipe/RecipeController.java index ce53d0b..69971e9 100644 --- a/refrigerator/src/main/java/moja/refrigerator/controller/recipe/RecipeController.java +++ b/refrigerator/src/main/java/moja/refrigerator/controller/recipe/RecipeController.java @@ -1,9 +1,13 @@ package moja.refrigerator.controller.recipe; +import moja.refrigerator.aggregate.recipe.Recipe; +import moja.refrigerator.dto.recipe.request.RecipeCreateRequest; +import moja.refrigerator.dto.recipe.response.RecipeResponse; import moja.refrigerator.service.recipe.RecipeService; import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.List; @RestController @RequestMapping("/recipe") @@ -14,4 +18,14 @@ public class RecipeController { public RecipeController(RecipeService recipeService) { this.recipeService = recipeService; } + + @PostMapping + public void createRecipe(@RequestBody RecipeCreateRequest request){ + recipeService.createRecipe(request); + } + + @GetMapping + public List getAllRecipes(){ + return recipeService.getAllRecipes(); + } } diff --git a/refrigerator/src/main/java/moja/refrigerator/dto/recipe/request/RecipeCreateRequest.java b/refrigerator/src/main/java/moja/refrigerator/dto/recipe/request/RecipeCreateRequest.java new file mode 100644 index 0000000..cf56252 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/dto/recipe/request/RecipeCreateRequest.java @@ -0,0 +1,22 @@ +package moja.refrigerator.dto.recipe.request; + +import lombok.Data; +import moja.refrigerator.aggregate.recipe.RecipeCategory; +import moja.refrigerator.aggregate.recipe.RecipeSource; +import moja.refrigerator.aggregate.user.User; + +@Data +public class RecipeCreateRequest { + private String recipeName; + private int recipeCookingTime; + private int recipeDifficulty; + + private String recipeSource; + private String recipeCategory; + private String userPk; + +// private long recipePk; // 자동 추가 +// private String recipeCreateTime; //자동 추가 +// private String recipeUpdateTime; //자동 추가 +// private long recipeViews; // 조회 시 올리는 것으로 +} diff --git a/refrigerator/src/main/java/moja/refrigerator/dto/recipe/request/RecipeSourceCreateRequest.java b/refrigerator/src/main/java/moja/refrigerator/dto/recipe/request/RecipeSourceCreateRequest.java new file mode 100644 index 0000000..68b71d4 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/dto/recipe/request/RecipeSourceCreateRequest.java @@ -0,0 +1,15 @@ +package moja.refrigerator.dto.recipe.request; + +import jakarta.persistence.*; +import lombok.Data; +import moja.refrigerator.aggregate.recipe.RecipeSourceType; + +@Data +public class RecipeSourceCreateRequest { + private String recipeSourceFileName; + private String recipeSourceSave; + private RecipeSourceType recipeSourceType; + +// private long recipeSourcePk; +// private String recipeSourceCreateTime; +} diff --git a/refrigerator/src/main/java/moja/refrigerator/dto/recipe/response/RecipeResponse.java b/refrigerator/src/main/java/moja/refrigerator/dto/recipe/response/RecipeResponse.java new file mode 100644 index 0000000..73d7888 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/dto/recipe/response/RecipeResponse.java @@ -0,0 +1,23 @@ +package moja.refrigerator.dto.recipe.response; + +import lombok.Data; + +import java.time.LocalDateTime; + +@Data +public class RecipeResponse { + + private long recipePk; + private String recipeName; + private int recipeCookingTime; + private int recipeDifficulty; + private long recipeViews; + + private LocalDateTime recipeCreateTime;; + private LocalDateTime recipeUpdateTime; + + private String recipeSource; + private String userPk; + private String recipeCategory; + +} diff --git a/refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeCategoryRepositoy.java b/refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeCategoryRepositoy.java new file mode 100644 index 0000000..e3a435a --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeCategoryRepositoy.java @@ -0,0 +1,10 @@ +package moja.refrigerator.repository.recipe; + +import moja.refrigerator.aggregate.recipe.RecipeCategory; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +@Repository +public interface RecipeCategoryRepositoy extends JpaRepository { + +} diff --git a/refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeRepository.java b/refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeRepository.java index 28dc01e..29b436a 100644 --- a/refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeRepository.java +++ b/refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeRepository.java @@ -2,7 +2,9 @@ import moja.refrigerator.aggregate.recipe.Recipe; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +@Repository public interface RecipeRepository extends JpaRepository { } diff --git a/refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeSourceRepository.java b/refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeSourceRepository.java new file mode 100644 index 0000000..bdcf4d0 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeSourceRepository.java @@ -0,0 +1,7 @@ +package moja.refrigerator.repository.recipe; + +import moja.refrigerator.aggregate.recipe.RecipeSource; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface RecipeSourceRepository extends JpaRepository { +} diff --git a/refrigerator/src/main/java/moja/refrigerator/repository/user/UserRepository.java b/refrigerator/src/main/java/moja/refrigerator/repository/user/UserRepository.java new file mode 100644 index 0000000..f24e3d5 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/repository/user/UserRepository.java @@ -0,0 +1,7 @@ +package moja.refrigerator.repository.user; + +import moja.refrigerator.aggregate.user.User; +import org.springframework.data.jpa.repository.JpaRepository; + +public interface UserRepository extends JpaRepository{ +} diff --git a/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeService.java b/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeService.java index ca44892..abc8532 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeService.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeService.java @@ -1,4 +1,14 @@ package moja.refrigerator.service.recipe; +import moja.refrigerator.aggregate.recipe.Recipe; +import moja.refrigerator.dto.recipe.request.RecipeCreateRequest; +import moja.refrigerator.dto.recipe.response.RecipeResponse; +import moja.refrigerator.repository.recipe.RecipeRepository; +import org.springframework.stereotype.Service; + +import java.util.List; + public interface RecipeService { + void createRecipe(RecipeCreateRequest request); + List getAllRecipes(); } diff --git a/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeServiceImpl.java b/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeServiceImpl.java index 63d5c90..f358ca8 100644 --- a/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeServiceImpl.java +++ b/refrigerator/src/main/java/moja/refrigerator/service/recipe/RecipeServiceImpl.java @@ -1,20 +1,76 @@ package moja.refrigerator.service.recipe; +import moja.refrigerator.aggregate.recipe.Recipe; +import moja.refrigerator.aggregate.recipe.RecipeCategory; +import moja.refrigerator.aggregate.recipe.RecipeSource; +import moja.refrigerator.dto.recipe.request.RecipeCreateRequest; +import moja.refrigerator.dto.recipe.response.RecipeResponse; +import moja.refrigerator.repository.recipe.RecipeCategoryRepositoy; import moja.refrigerator.repository.recipe.RecipeRepository; +import moja.refrigerator.repository.recipe.RecipeSourceRepository; +import moja.refrigerator.repository.user.UserRepository; import org.modelmapper.ModelMapper; +import org.modelmapper.PropertyMap; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; +import org.springframework.transaction.annotation.Transactional; + +import java.util.List; +import java.util.stream.Collectors; @Service public class RecipeServiceImpl implements RecipeService { private RecipeRepository recipeRepository; + private UserRepository userRepository; + private RecipeSourceRepository recipeSourceRepository; + private RecipeCategoryRepositoy recipeCategoryRepositoy; private ModelMapper mapper; @Autowired - public RecipeServiceImpl(RecipeRepository recipeRepository, ModelMapper mapper) { + public RecipeServiceImpl( + RecipeRepository recipeRepository, + ModelMapper mapper, + RecipeSourceRepository recipeSourceRepository, + UserRepository userRepository, + RecipeCategoryRepositoy recipeCategoryRepositoy + ) { this.recipeRepository = recipeRepository; this.mapper = mapper; + this.recipeSourceRepository = recipeSourceRepository; + this.userRepository = userRepository; + this.recipeCategoryRepositoy = recipeCategoryRepositoy; } + + @Override + @Transactional + public void createRecipe(RecipeCreateRequest request) { + + Recipe recipe = mapper.map(request, Recipe.class); + +// //User 조회 +// User user = userRepository.findById(request.getUserId) +// .orElseThrow(IllegalArgumentException::new); +// recipe.setUserPk(user); + +// //RecipeSource 조회 +// RecipeSource recipeSource = recipeSourceRepository.findById(request.getRecipeSource()) +// .orElseThrow(IllegalArgumentException::new); +// recipe.setRecipeSource(recipeSource); + + //RecipeCategory +// RecipeCategory recipeCategory = .findById(request.getRecipeCategory()) +// .orElseThrow(IllegalArgumentException::new); +// recipe.setRecipeCategory(recipeCategory); + + recipeRepository.save(recipe); + } + + @Override + public List getAllRecipes(){ + return recipeRepository.findAll().stream() + .map(recipe -> mapper.map(recipe, RecipeResponse.class)) + .collect(Collectors.toList()); + }; } \ No newline at end of file