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..3bb64af 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,14 @@ package moja.refrigerator.controller.recipe; +import moja.refrigerator.aggregate.recipe.Recipe; +import moja.refrigerator.dto.recipe.request.RecipeCreateRequest; +import moja.refrigerator.dto.recipe.request.RecipeUpdateRequest; +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 +19,24 @@ 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(); + } + + @DeleteMapping + public void deleteRecipe(@RequestParam long recipePk){ + recipeService.deleteRecipe(recipePk); + } + + @PutMapping + public void updateRecipe(@RequestBody RecipeUpdateRequest request){ + recipeService.updateRecipe(request); + } } 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/request/RecipeUpdateRequest.java b/refrigerator/src/main/java/moja/refrigerator/dto/recipe/request/RecipeUpdateRequest.java new file mode 100644 index 0000000..dd7c2d9 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/dto/recipe/request/RecipeUpdateRequest.java @@ -0,0 +1,17 @@ +package moja.refrigerator.dto.recipe.request; + + +import lombok.Data; + +@Data +public class RecipeUpdateRequest { + private long recipePk; + private String recipeName; + private int recipeCookingTime; + private int recipeDifficulty; + + private String recipeSource; + private String recipeCategory; + private String userPk; + +} 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..280d996 --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeCategoryRepositoy.java @@ -0,0 +1,12 @@ +package moja.refrigerator.repository.recipe; + +import moja.refrigerator.aggregate.recipe.RecipeCategory; +import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; + +import java.util.Optional; + +@Repository +public interface RecipeCategoryRepositoy extends JpaRepository { + Optional findByRecipeCategory(String RecipeCategory); +} 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..aa514db 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,12 @@ import moja.refrigerator.aggregate.recipe.Recipe; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.stereotype.Repository; +import java.util.Optional; + +@Repository public interface RecipeRepository extends JpaRepository { + Optional findByRecipePk(long recipePk); } 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..d0db45e --- /dev/null +++ b/refrigerator/src/main/java/moja/refrigerator/repository/recipe/RecipeSourceRepository.java @@ -0,0 +1,10 @@ +package moja.refrigerator.repository.recipe; + +import moja.refrigerator.aggregate.recipe.RecipeSource; +import org.springframework.data.jpa.repository.JpaRepository; + +import java.util.Optional; + +public interface RecipeSourceRepository extends JpaRepository { + Optional findByRecipeSourceFileName(String recipeSourceFileName); +} 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..4d6c154 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,17 @@ package moja.refrigerator.service.recipe; +import moja.refrigerator.aggregate.recipe.Recipe; +import moja.refrigerator.dto.recipe.request.RecipeCreateRequest; +import moja.refrigerator.dto.recipe.request.RecipeUpdateRequest; +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(); + void deleteRecipe(long recipePk); + void updateRecipe(RecipeUpdateRequest request); } 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..b857df7 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,102 @@ 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.request.RecipeUpdateRequest; +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()); + }; + + @Override + public void deleteRecipe(long recipePk) { + Recipe recipe = recipeRepository.findByRecipePk(recipePk) + .orElseThrow(IllegalArgumentException::new); + recipeRepository.delete(recipe); + } + + @Override + @Transactional + public void updateRecipe(RecipeUpdateRequest request) { + Recipe recipe = recipeRepository.findByRecipePk(request.getRecipePk()) + .orElseThrow(IllegalArgumentException::new); + + if (request.getRecipeName() != null) recipe.setRecipeName(request.getRecipeName()); + if (request.getRecipeCookingTime() != 0) recipe.setRecipeCookingTime(request.getRecipeCookingTime()); + if (request.getRecipeDifficulty() != 0) recipe.setRecipeDifficulty(request.getRecipeDifficulty()); + if (request.getRecipeSource() != null) recipe.setRecipeSource(recipeSourceRepository.findByRecipeSourceFileName(request.getRecipeSource()) + .orElseThrow(IllegalArgumentException::new)); + if (request.getRecipeCategory() != null) recipe.setRecipeCategory(recipeCategoryRepositoy.findByRecipeCategory(request.getRecipeCategory()) + .orElseThrow(IllegalArgumentException::new)); + + recipeRepository.save(recipe); + } } \ No newline at end of file