Skip to content

Commit 006f2b3

Browse files
author
bu2000
committed
create logic making recipereview
1 parent b9439e6 commit 006f2b3

8 files changed

Lines changed: 148 additions & 1 deletion

File tree

Lines changed: 35 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,35 @@
1+
package com.webservice.algorithmchef.controller;
2+
3+
import org.springframework.http.HttpStatus;
4+
import org.springframework.http.ResponseEntity;
5+
import org.springframework.security.core.annotation.AuthenticationPrincipal;
6+
import org.springframework.security.core.userdetails.UserDetails;
7+
import org.springframework.web.bind.annotation.PostMapping;
8+
import org.springframework.web.bind.annotation.RequestBody;
9+
import org.springframework.web.bind.annotation.RestController;
10+
11+
import com.webservice.algorithmchef.dto.recipereview.RecipeReviewRequest;
12+
import com.webservice.algorithmchef.dto.recipereview.RecipeReviewResponse;
13+
import com.webservice.algorithmchef.service.RecipeReviewService;
14+
15+
import lombok.RequiredArgsConstructor;
16+
17+
@RestController
18+
@RequiredArgsConstructor
19+
public class RecipeReviewController {
20+
21+
private final RecipeReviewService rService;
22+
23+
@PostMapping("/recipe/review")
24+
public ResponseEntity<?> makeReview(@RequestBody RecipeReviewRequest request,
25+
@AuthenticationPrincipal UserDetails userDetails){
26+
try {
27+
String userId = userDetails.getUsername();
28+
RecipeReviewResponse response = rService.makeReview(request, userId);
29+
return ResponseEntity.status(HttpStatus.CREATED).body(response);
30+
}catch (IllegalArgumentException e) {
31+
return ResponseEntity.badRequest().body(e.getMessage());
32+
}
33+
}
34+
35+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package com.webservice.algorithmchef.dto.recipereview;
2+
3+
import lombok.Getter;
4+
import lombok.NoArgsConstructor;
5+
6+
@Getter
7+
@NoArgsConstructor
8+
public class RecipeReviewRequest {
9+
10+
private String name;
11+
private float rating;
12+
private String content;
13+
}
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
package com.webservice.algorithmchef.dto.recipereview;
2+
3+
import com.webservice.algorithmchef.model.RecipeReview;
4+
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
8+
@Getter
9+
@NoArgsConstructor
10+
public class RecipeReviewResponse {
11+
12+
private String name;
13+
private String userId;
14+
private float rating;
15+
16+
public RecipeReviewResponse(RecipeReview review) {
17+
this.name = review.getRecipe().getName();
18+
this.userId = review.getUser().getUserId();
19+
this.rating = review.getRating();
20+
}
21+
}

src/main/java/com/webservice/algorithmchef/model/Recipe.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,7 +64,6 @@ public class Recipe {
6464
@Column
6565
private String tip;
6666

67-
6867
@OneToMany(mappedBy = "recipe", orphanRemoval = true)
6968
private List<RecipeReview> recipeReviews;
7069

src/main/java/com/webservice/algorithmchef/model/RecipeReview.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@
1111
import jakarta.persistence.GenerationType;
1212
import jakarta.persistence.Id;
1313
import jakarta.persistence.JoinColumn;
14+
import jakarta.persistence.Lob;
1415
import jakarta.persistence.ManyToOne;
1516
import lombok.AllArgsConstructor;
1617
import lombok.Builder;
@@ -44,6 +45,10 @@ public class RecipeReview {
4445
@Column(nullable = false)
4546
private float rating;
4647

48+
@Column
49+
@Lob
50+
private String content;
51+
4752
@CreationTimestamp
4853
private LocalDateTime createdAt;
4954

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.webservice.algorithmchef.repository;
2+
3+
import java.util.Optional;
4+
5+
import org.springframework.data.jpa.repository.JpaRepository;
6+
7+
import com.webservice.algorithmchef.model.Recipe;
8+
9+
public interface RecipeRepository extends JpaRepository<Recipe, Long>{
10+
11+
public Optional<Recipe> findByName(String name);
12+
}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package com.webservice.algorithmchef.repository;
2+
3+
import org.springframework.data.jpa.repository.JpaRepository;
4+
5+
import com.webservice.algorithmchef.model.Recipe;
6+
import com.webservice.algorithmchef.model.RecipeReview;
7+
import com.webservice.algorithmchef.model.User;
8+
9+
public interface RecipeReviewRepository extends JpaRepository<RecipeReview, Long> {
10+
11+
boolean existsByUserAndRecipe(User user, Recipe recipe);
12+
}
Lines changed: 50 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,50 @@
1+
package com.webservice.algorithmchef.service;
2+
3+
import org.springframework.stereotype.Service;
4+
import org.springframework.transaction.annotation.Transactional;
5+
6+
import com.webservice.algorithmchef.dto.recipereview.RecipeReviewRequest;
7+
import com.webservice.algorithmchef.dto.recipereview.RecipeReviewResponse;
8+
import com.webservice.algorithmchef.model.Recipe;
9+
import com.webservice.algorithmchef.model.RecipeReview;
10+
import com.webservice.algorithmchef.model.User;
11+
import com.webservice.algorithmchef.repository.RecipeRepository;
12+
import com.webservice.algorithmchef.repository.RecipeReviewRepository;
13+
import com.webservice.algorithmchef.repository.UserRepository;
14+
15+
import lombok.RequiredArgsConstructor;
16+
17+
@Service
18+
@RequiredArgsConstructor
19+
public class RecipeReviewService {
20+
21+
private final RecipeRepository recipeRepository;
22+
private final RecipeReviewRepository recipeReviewRepository;
23+
private final UserRepository userRepository;
24+
25+
26+
@Transactional
27+
public RecipeReviewResponse makeReview(RecipeReviewRequest reviewRequest, String userId) {
28+
User user = userRepository.findByUserId(userId)
29+
.orElseThrow(()-> new IllegalArgumentException("해당하는 아이디의 사용작 없습니다."));
30+
String recipeName = reviewRequest.getName();
31+
float rating = reviewRequest.getRating();
32+
String content = reviewRequest.getContent();
33+
Recipe recipe = recipeRepository.findByName(recipeName)
34+
.orElseThrow(()-> new IllegalArgumentException("해당하는 이름의 recipe가 존재하지 않습니다."));
35+
if (recipeReviewRepository.existsByUserAndRecipe(user, recipe)) {
36+
throw new IllegalStateException("이미 리뷰를 작성한 레시피입니다.");
37+
}
38+
RecipeReview review = RecipeReview.builder()
39+
.content(content)
40+
.rating(rating)
41+
.user(user)
42+
.recipe(recipe)
43+
.build();
44+
45+
RecipeReview recipeReview = recipeReviewRepository.save(review);
46+
return new RecipeReviewResponse(recipeReview);
47+
48+
}
49+
50+
}

0 commit comments

Comments
 (0)