Skip to content

Commit 02855d8

Browse files
author
marshmallowing
committed
chore: 리뷰 반영
1 parent 9fcb733 commit 02855d8

File tree

6 files changed

+23
-17
lines changed

6 files changed

+23
-17
lines changed

src/main/java/com/ongil/backend/domain/review/controller/ReviewController.java

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import io.swagger.v3.oas.annotations.Operation;
2626
import io.swagger.v3.oas.annotations.Parameter;
2727
import io.swagger.v3.oas.annotations.tags.Tag;
28+
import jakarta.validation.Valid;
2829
import lombok.RequiredArgsConstructor;
2930

3031
@Tag(name = "Review", description = "리뷰 API (토큰 필요)")
@@ -125,7 +126,7 @@ public DataResponse<ReviewIdResponse> initializeReview(
125126
public DataResponse<ReviewStep1Response> updateReviewStep1(
126127
@AuthenticationPrincipal Long userId,
127128
@PathVariable Long reviewId,
128-
@RequestBody ReviewStep1Request request
129+
@Valid @RequestBody ReviewStep1Request request
129130
) {
130131
ReviewStep1Response response = reviewCommandService.updateReviewStep1(userId, reviewId, request);
131132
return DataResponse.from(response);
@@ -136,7 +137,7 @@ public DataResponse<ReviewStep1Response> updateReviewStep1(
136137
public DataResponse<Void> updateReviewStep2Size(
137138
@AuthenticationPrincipal Long userId,
138139
@PathVariable Long reviewId,
139-
@RequestBody ReviewStep2SizeRequest request
140+
@Valid @RequestBody ReviewStep2SizeRequest request
140141
) {
141142
reviewCommandService.updateReviewStep2Size(userId, reviewId, request);
142143
return DataResponse.ok();
@@ -147,7 +148,7 @@ public DataResponse<Void> updateReviewStep2Size(
147148
public DataResponse<Void> updateReviewStep2Material(
148149
@AuthenticationPrincipal Long userId,
149150
@PathVariable Long reviewId,
150-
@RequestBody ReviewStep2MaterialRequest request
151+
@Valid @RequestBody ReviewStep2MaterialRequest request
151152
) {
152153
reviewCommandService.updateReviewStep2Material(userId, reviewId, request);
153154
return DataResponse.ok();
@@ -193,7 +194,7 @@ public DataResponse<List<String>> uploadReviewImages(
193194
public DataResponse<Void> submitReview(
194195
@AuthenticationPrincipal Long userId,
195196
@PathVariable Long reviewId,
196-
@RequestBody ReviewFinalSubmitRequest request
197+
@Valid @RequestBody ReviewFinalSubmitRequest request
197198
) {
198199
reviewCommandService.submitReview(userId, reviewId, request);
199200
return DataResponse.ok();

src/main/java/com/ongil/backend/domain/review/converter/ReviewWriteConverter.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -30,10 +30,10 @@ public Review toInitialReviewEntity(User user, OrderItem orderItem, ClothingCate
3030
}
3131

3232
public ReviewStep1Response toStep1Response(Review review) {
33-
boolean needsSizeQ = review.getSizeAnswer().isNeedsSecondaryQuestion();
34-
boolean needsMaterialQ = review.getMaterialAnswer().isNeedsSecondaryQuestion();
33+
boolean needsSizeQ = review.getSizeAnswer() != null && review.getSizeAnswer().isNeedsSecondaryQuestion();
34+
boolean needsMaterialQ = review.getMaterialAnswer() != null && review.getMaterialAnswer().isNeedsSecondaryQuestion();
3535

36-
List<String> availableBodyParts = needsSizeQ
36+
List<String> availableBodyParts = (needsSizeQ && review.getClothingCategory() != null)
3737
? review.getClothingCategory().getBodyParts()
3838
: Collections.emptyList();
3939

src/main/java/com/ongil/backend/domain/review/dto/request/ReviewStep1Request.java

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,20 +19,20 @@
1919
@AllArgsConstructor
2020
public class ReviewStep1Request {
2121

22-
@NotBlank(message = "의류 카테고리는 필수입니다.")
22+
@NotNull(message = "의류 카테고리는 필수입니다.")
2323
private ClothingCategory clothingCategory;
2424

2525
@NotNull(message = "별점은 필수입니다.")
2626
@Min(value = 1, message = "별점은 1점 이상이어야 합니다.")
2727
@Max(value = 5, message = "별점은 5점 이하여야 합니다.")
2828
private Integer rating;
2929

30-
@NotBlank(message = "착용감 답변은 필수입니다.")
30+
@NotNull(message = "착용감 답변은 필수입니다.")
3131
private SizeAnswer sizeAnswer;
3232

33-
@NotBlank(message = "색감 답변은 필수입니다.")
33+
@NotNull(message = "색감 답변은 필수입니다.")
3434
private ColorAnswer colorAnswer;
3535

36-
@NotBlank(message = "소재 답변은 필수입니다.")
36+
@NotNull(message = "소재 답변은 필수입니다.")
3737
private MaterialAnswer materialAnswer;
3838
}

src/main/java/com/ongil/backend/domain/review/service/ReviewCommandService.java

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import org.springframework.stereotype.Service;
66
import org.springframework.transaction.annotation.Transactional;
77

8+
import com.ongil.backend.domain.category.entity.Category;
89
import com.ongil.backend.domain.order.entity.OrderItem;
910
import com.ongil.backend.domain.order.repository.OrderItemRepository;
1011
import com.ongil.backend.domain.review.converter.ReviewWriteConverter;
@@ -33,6 +34,8 @@
3334
@Transactional
3435
public class ReviewCommandService {
3536

37+
private static final int REVIEW_REWARD_POINTS = 500;
38+
3639
private final ReviewRepository reviewRepository;
3740
private final UserRepository userRepository;
3841
private final OrderItemRepository orderItemRepository;
@@ -48,7 +51,10 @@ public Long initializeReview(Long userId, Long orderItemId) {
4851
reviewValidator.validateReviewAuthority(orderItem, userId);
4952
reviewValidator.validateInitialReviewAlreadyExists(orderItemId);
5053

51-
String categoryName = orderItem.getProduct().getCategory().getParentCategory().getName();
54+
Category category = orderItem.getProduct().getCategory();
55+
String categoryName = (category.getParentCategory() != null)
56+
? category.getParentCategory().getName()
57+
: category.getName();
5258
ClothingCategory clothingCategory = ClothingCategory.fromDisplayName(categoryName);
5359

5460
Review review = reviewWriteConverter.toInitialReviewEntity(user, orderItem, clothingCategory);
@@ -139,16 +145,15 @@ public void submitReview(Long userId, Long reviewId, ReviewFinalSubmitRequest re
139145
String joinedImages = (request.getReviewImageUrls() != null && !request.getReviewImageUrls().isEmpty())
140146
? String.join(",", request.getReviewImageUrls()) : null;
141147

142-
int rewardAmount = 500;
143148
review.submit(
144149
request.getTextReview(),
145150
joinedImages,
146151
joinedSizeReview,
147152
joinedMaterialReview,
148-
rewardAmount
153+
REVIEW_REWARD_POINTS
149154
);
150155

151-
user.restorePoints(rewardAmount);
156+
user.restorePoints(REVIEW_REWARD_POINTS);
152157
}
153158

154159
private Review getReviewOrThrow(Long reviewId) {

src/main/java/com/ongil/backend/domain/review/service/prompter/SizeReviewPrompter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -112,7 +112,7 @@ public String buildUserMessage(AiReviewGenerateRequest request) {
112112
prompt.append("\n- 위 리스트에 나열된 각 항목(예: 어깨&목, 전반적 등)마다 **반드시 2문장씩** 생성할 것.");
113113

114114
if (request.getFitIssueParts().contains("전반적")) {
115-
prompt.append("\n- '전반적' 항목에 대해서는 특정 신체 부위 언급 없이 전체적인 실루엣이나 조이는 느낌에 대해 2문장을 생성할 것.");
115+
prompt.append("\n- '전반적' 항목에 대해서는 특정 신체 부위 언급 없이 전체적으로 조이거나 답답한 느낌에 대해 2문장을 생성할 것.");
116116
}
117117

118118
prompt.append("\n- 결과적으로 총 ").append(request.getFitIssueParts().size() * 2).append("문장이 생성되어야 함.");

src/main/java/com/ongil/backend/global/config/s3/S3ImageService.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ public String uploadReviewImage(MultipartFile file) {
4747
/**
4848
* 이미지를 S3에 업로드하고 공개 URL을 반환한다.
4949
*/
50-
public String upload(MultipartFile file, String directory) {
50+
private String upload(MultipartFile file, String directory) {
5151
validateFile(file);
5252

5353
String extension = extractExtension(file.getOriginalFilename());

0 commit comments

Comments
 (0)