728x90
반응형
문제
3. 리뷰 API
3.1. 리뷰 작성
새로운 리뷰를 작성하는 API입니다.
- URL: /api/v1/reviews
- Method: POST
- 설명:
- 인증된 사용자만 리뷰를 작성할 수 있습니다.
- 동일한 메뉴에 대해 한 사용자는 하나의 리뷰만 작성 가능합니다.
- 리뷰 작성 시 해당 음식점의 평균 평점이 자동으로 갱신됩니다.
- 음식점과 메뉴의 리뷰 카운트가 자동으로 증가합니다.
- Request Header:
Authorization: Bearer {accessToken}
- Request Body:
{
"restaurantId": 1,
"menuId": 1,
"rating": 5,
"content": "정말 맛있었습니다!"
}
- Validation:
- rating: 1-5 사이의 정수만 가능
- content: 최소 10자 이상 작성
- restaurantId: 유효한 음식점 ID
- menuId: 해당 음식점의 유효한 메뉴 ID
- Response:
- 성공 201 문제있을경우 400
3.2. 리뷰 수정
기존 리뷰를 수정하는 API입니다.
- URL: /api/v1/reviews/{id}
- Method: PUT
- 설명:
- 리뷰 작성자만 수정이 가능합니다.
- 리뷰 수정 시 음식점의 평균 평점이 자동으로 갱신됩니다.
- 리뷰 내용과 평점만 수정 가능합니다.
- 존재하지 않는 리뷰 ID인 경우 404 에러를 반환합니다.
- Request Header:
Authorization: Bearer {accessToken}
- Request Body:
{
"rating": 4,
"content": "맛있었지만 조금 짰어요"
}
- Response:
- 성공 200 문제있을경우 400
풀이
3.1. 리뷰 작성
새로운 리뷰를 작성하는 API입니다.
Postman
- URL: /api/v1/reviews
- Method: POST
- 설명:
- 인증된 사용자만 리뷰를 작성할 수 있습니다.
- 동일한 메뉴에 대해 한 사용자는 하나의 리뷰만 작성 가능합니다.
- 리뷰 작성 시 해당 음식점의 평균 평점이 자동으로 갱신됩니다.
- 음식점과 메뉴의 리뷰 카운트가 자동으로 증가합니다.
intelliJ
@RestController
public class ReviewController {
@Autowired
ReviewService reviewService;
@PostMapping("/api/v1/reviews")
ResponseEntity<Object> createReview(@RequestHeader("Authorization") String token,
@RequestBody ReviewRequest reviewRequest) {
int result = reviewService.createReview(token, reviewRequest);
// 성공 201 문제있을경우 400
if (result != 1) {
// result 가 1이 라는 경우는, 테이블에 행이 추가되었다는 의미입니다.
// result 가 1이 아닌 경우는, 테이블에 행이 추가되지 않았다는 의미입니다.
return ResponseEntity.status(400).build();
}
return ResponseEntity.status(201).build();
}
- Request Header:
Authorization: Bearer {accessToken}
intelliJ
@Service
public class ReviewService {
@Autowired
JwtConfig jwtConfig;
@Autowired
private ReviewDAO reviewDAO;
public int createReview(String token, ReviewRequest reviewRequest){
// 토큰은 Bearer 를 제외한 나머지지 부분이기 때문에
// substring(7)을 사용하여 Bearer 를 제외한 나머지를 가져옵니다.
long userId =
Long.parseLong( jwtConfig.getTokenClaims(token.substring(7)).getSubject());
// Long.parseLong 는 문자열을 long 타입으로 변환하는 메소드입니다.
return reviewDAO.createReview(userId, reviewRequest);
}
- Validation:
- rating: 1-5 사이의 정수만 가능
- content: 최소 10자 이상 작성
- restaurantId: 유효한 음식점 ID
- menuId: 해당 음식점의 유효한 메뉴 ID
intelliJ
@Repository
public class ReviewDAO {
@Autowired
private JdbcTemplate jdbcTemplate;
public int createReview(long userId, ReviewRequest reviewRequest){
String sql = "INSERT INTO review(user_id, " +
"restaurant_id,menu_id,rating,content)\n" +
"values(?,?,?,?,?);";
return jdbcTemplate.update(sql, userId, reviewRequest.restaurantId,
reviewRequest.menuId, reviewRequest.rating, reviewRequest.content);
}
package com.example.jwt3.dto;
public class ReviewRequest {
public long restaurantId;
public long menuId;
public double rating;
public String content;
public ReviewRequest() {
}
public ReviewRequest(long restaurantId,
long menuId, double rating, String content) {
this.restaurantId = restaurantId;
this.menuId = menuId;
this.rating = rating;
this.content = content;
}
}
Postman
3.2. 리뷰 수정
기존 리뷰를 수정하는 API입니다.
Postman
- URL: /api/v1/reviews/{id}
- Method: PUT
- 설명:
- 리뷰 작성자만 수정이 가능합니다.
- 리뷰 수정 시 음식점의 평균 평점이 자동으로 갱신됩니다.
- 리뷰 내용과 평점만 수정 가능합니다.
- 존재하지 않는 리뷰 ID인 경우 404 에러를 반환합니다.
- Response:
- 성공 200 문제있을경우 400
intelliJ
- Request Header:
Authorization: Bearer {accessToken}
Postman
intelliJ
- Request Body:
{
"rating": 4,
"content": "맛있었지만 조금 짰어요"
}
Postman
728x90
반응형
'API > 실습' 카테고리의 다른 글
53. [ JAVA ] Spring Boot를 이용한 API 통신 : 뉴스 검색 예시 (1) | 2025.01.11 |
---|---|
48. [ JAVA ] API 문서 문제 : JWT(Json Web Token)(보안) / Admin(1) (0) | 2025.01.06 |
46. [ JAVA ] API 문서 문제 : JWT(Json Web Token)(보안) / User (1) (0) | 2025.01.04 |
42. [ JAVA ] API 문서 문제 : review_db (1) (3) | 2024.12.25 |
41. [ JAVA ] API 문서 문제 : 유저 관리(sb-user-server) (0) | 2024.12.21 |