-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy pathReviewController.java
More file actions
97 lines (84 loc) · 3.99 KB
/
ReviewController.java
File metadata and controls
97 lines (84 loc) · 3.99 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
package com.onebridge.ouch.controller.review;
import java.util.List;
import org.springframework.http.ResponseEntity;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.DeleteMapping;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.PathVariable;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.PutMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;
import com.onebridge.ouch.apiPayload.ApiResponse;
import com.onebridge.ouch.dto.review.ReviewRequest;
import com.onebridge.ouch.dto.review.ReviewResponse;
import com.onebridge.ouch.security.authorization.UserId;
import com.onebridge.ouch.service.review.ReviewService;
import io.swagger.v3.oas.annotations.Operation;
import io.swagger.v3.oas.annotations.tags.Tag;
import lombok.RequiredArgsConstructor;
@Tag(name = "리뷰 API", description = "리뷰 CRUD API")
@RestController
@RequestMapping("/reviews")
@RequiredArgsConstructor
public class ReviewController {
private final ReviewService reviewService;
@Operation(summary = "리뷰 작성 API", description = "리뷰 생성 API 입니다.")
@PostMapping
public ResponseEntity<ApiResponse<Void>> createReview(
@RequestBody @Validated ReviewRequest request,
@UserId Long userId
) {
reviewService.createReview(userId, request);
return ResponseEntity.ok(ApiResponse.successWithNoData());
}
@Operation(summary = "(테스트용)특정 리뷰 조회 API", description = "리뷰ID로 특정 리뷰를 조회하는 API입니다.")
@GetMapping("/{reviewId}")
public ResponseEntity<ReviewResponse> getReview(@PathVariable("reviewId") Long reviewId) {
ReviewResponse response = reviewService.getReview(reviewId);
return ResponseEntity.ok(response);
}
@Operation(summary = "(테스트용)모든 리뷰 조회 API", description = "모든 리뷰를 조회합니다.")
@GetMapping
public ResponseEntity<List<ReviewResponse>> getAllReviews() {
List<ReviewResponse> list = reviewService.getAllReviews();
return ResponseEntity.ok(list);
}
// 4) 특정 병원(ykiho) 리뷰 목록 조회
@Operation(summary = "특정 병원 리뷰 조회 API", description = "병원 Id를 활용하여 특정 병원의 모든 리뷰를 조회합니다.")
@GetMapping("/hospitals/{ykiho}")
public ResponseEntity<List<ReviewResponse>> getReviewsByHospital(@PathVariable("ykiho") String ykiho) {
List<ReviewResponse> list = reviewService.getReviewsByHospital(ykiho);
return ResponseEntity.ok(list);
}
@Operation(summary = "리뷰 수정 API", description = "리뷰 ID로 리뷰를 수정하는 API입니다.")
@PutMapping("/{reviewId}")
public ResponseEntity<ApiResponse<Void>> updateReview(
@PathVariable("reviewId") Long reviewId,
@RequestBody @Validated ReviewRequest request,
@UserId Long userId
) {
ReviewResponse updated = reviewService.updateReview(reviewId, userId, request);
return ResponseEntity.ok(ApiResponse.successWithNoData());
}
// 6) 리뷰 삭제 (JWT에서 추출한 userId로 작성자 검증)
@Operation(summary = "리뷰 삭제 API", description = "리뷰 ID로 리뷰를 삭제하는 API입니다.")
@DeleteMapping("/{reivewId}")
public ResponseEntity<Void> deleteReview(
@PathVariable("reivewId") Long reviewId,
@UserId Long userId
) {
reviewService.deleteReview(reviewId, userId);
return ResponseEntity.noContent().build();
}
// 7) 내가 쓴 리뷰 목록 조회
@Operation(summary = "내 리뷰 목록 조회 API", description = "내가 작성한 리뷰 목록을 조회하는 API입니다.")
@GetMapping("/me")
public ResponseEntity<List<ReviewResponse>> getMyReviews(
@UserId Long userId
) {
List<ReviewResponse> list = reviewService.getMyReviews(userId);
return ResponseEntity.ok(list);
}
}