Skip to content

Commit 72605d2

Browse files
authored
refactor: 리뷰 커맨드 기능 리팩토링 (#334)
* refactor(review): @currentuser -> @RoleId * test(review): @currentuser -> @RoleId 테스트 * refactor(review): 이미지 관련 로직 제거 * test(review): 이미지 관련 로직 제거 테스트 * test(review): 이미지 관련 로직 제거
1 parent eeef7ab commit 72605d2

18 files changed

+112
-290
lines changed

src/main/java/com/somemore/domains/review/controller/ReviewCommandApiController.java

Lines changed: 10 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -5,13 +5,12 @@
55
import com.somemore.domains.review.usecase.CreateReviewUseCase;
66
import com.somemore.domains.review.usecase.DeleteReviewUseCase;
77
import com.somemore.domains.review.usecase.UpdateReviewUseCase;
8-
import com.somemore.global.auth.annotation.CurrentUser;
8+
import com.somemore.global.auth.annotation.RoleId;
99
import com.somemore.global.common.response.ApiResponse;
10-
import com.somemore.global.imageupload.dto.ImageUploadRequestDto;
11-
import com.somemore.global.imageupload.usecase.ImageUploadUseCase;
1210
import io.swagger.v3.oas.annotations.Operation;
1311
import io.swagger.v3.oas.annotations.tags.Tag;
1412
import jakarta.validation.Valid;
13+
import java.util.UUID;
1514
import lombok.RequiredArgsConstructor;
1615
import org.springframework.security.access.annotation.Secured;
1716
import org.springframework.web.bind.annotation.DeleteMapping;
@@ -20,13 +19,7 @@
2019
import org.springframework.web.bind.annotation.PutMapping;
2120
import org.springframework.web.bind.annotation.RequestBody;
2221
import org.springframework.web.bind.annotation.RequestMapping;
23-
import org.springframework.web.bind.annotation.RequestPart;
2422
import org.springframework.web.bind.annotation.RestController;
25-
import org.springframework.web.multipart.MultipartFile;
26-
27-
import java.util.UUID;
28-
29-
import static org.springframework.http.MediaType.MULTIPART_FORM_DATA_VALUE;
3023

3124
@Tag(name = "Review Command API", description = "리뷰 생성 수정 삭제 API")
3225
@RequiredArgsConstructor
@@ -37,20 +30,17 @@ public class ReviewCommandApiController {
3730
private final CreateReviewUseCase createReviewUseCase;
3831
private final UpdateReviewUseCase updateReviewUseCase;
3932
private final DeleteReviewUseCase deleteReviewUseCase;
40-
private final ImageUploadUseCase imageUploadUseCase;
4133

4234
@Secured("ROLE_VOLUNTEER")
4335
@Operation(summary = "리뷰 등록", description = "리뷰를 등록합니다.")
44-
@PostMapping(value = "/review", consumes = MULTIPART_FORM_DATA_VALUE)
36+
@PostMapping(value = "/review")
4537
public ApiResponse<Long> createReview(
46-
@CurrentUser UUID userId,
47-
@Valid @RequestPart("data") ReviewCreateRequestDto requestDto,
48-
@RequestPart(value = "img_file", required = false) MultipartFile image) {
38+
@RoleId UUID volunteerId,
39+
@Valid @RequestBody ReviewCreateRequestDto requestDto) {
4940

50-
String imgUrl = imageUploadUseCase.uploadImage(new ImageUploadRequestDto(image));
5141
return ApiResponse.ok(
5242
201,
53-
createReviewUseCase.createReview(requestDto, userId, imgUrl),
43+
createReviewUseCase.createReview(requestDto, volunteerId),
5444
"리뷰 등록 성공"
5545
);
5646
}
@@ -59,42 +49,26 @@ public ApiResponse<Long> createReview(
5949
@Operation(summary = "리뷰 수정", description = "리뷰를 수정합니다.")
6050
@PutMapping(value = "/review/{id}")
6151
public ApiResponse<String> updateReview(
62-
@CurrentUser UUID userId,
52+
@RoleId UUID volunteerId,
6353
@PathVariable Long id,
6454
@Valid @RequestBody ReviewUpdateRequestDto requestDto) {
6555

66-
updateReviewUseCase.updateReview(id, userId, requestDto);
56+
updateReviewUseCase.updateReview(id, volunteerId, requestDto);
6757

6858
return ApiResponse.ok(
6959
200,
7060
"리뷰 수정 성공"
7161
);
7262
}
7363

74-
@Secured("ROLE_VOLUNTEER")
75-
@Operation(summary = "리뷰 이미지 수정", description = "리뷰 이미지를 수정합니다.")
76-
@PutMapping(value = "/review/{id}", consumes = MULTIPART_FORM_DATA_VALUE)
77-
public ApiResponse<String> updateReviewImage(
78-
@CurrentUser UUID userId,
79-
@PathVariable Long id,
80-
@RequestPart(value = "img_file", required = false) MultipartFile image) {
81-
82-
String newImgUrl = imageUploadUseCase.uploadImage(new ImageUploadRequestDto(image));
83-
updateReviewUseCase.updateReviewImageUrl(id, userId, newImgUrl);
84-
return ApiResponse.ok(
85-
200,
86-
"리뷰 이미지 수정 성공"
87-
);
88-
}
89-
9064
@Secured("ROLE_VOLUNTEER")
9165
@Operation(summary = "리뷰 삭제", description = "리뷰를 삭제합니다.")
9266
@DeleteMapping(value = "/review/{id}")
9367
public ApiResponse<String> createReview(
94-
@CurrentUser UUID userId,
68+
@RoleId UUID volunteerId,
9569
@PathVariable Long id
9670
) {
97-
deleteReviewUseCase.deleteReview(userId, id);
71+
deleteReviewUseCase.deleteReview(volunteerId, id);
9872
return ApiResponse.ok("리뷰 삭제 성공");
9973
}
10074

src/main/java/com/somemore/domains/review/domain/Review.java

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.somemore.domains.review.domain;
22

3+
import static jakarta.persistence.GenerationType.IDENTITY;
4+
import static lombok.AccessLevel.PROTECTED;
5+
36
import com.somemore.domains.review.dto.request.ReviewUpdateRequestDto;
47
import com.somemore.global.common.entity.BaseEntity;
58
import jakarta.persistence.Column;
@@ -8,15 +11,11 @@
811
import jakarta.persistence.Id;
912
import jakarta.persistence.Lob;
1013
import jakarta.persistence.Table;
14+
import java.util.UUID;
1115
import lombok.Builder;
1216
import lombok.Getter;
1317
import lombok.NoArgsConstructor;
1418

15-
import java.util.UUID;
16-
17-
import static jakarta.persistence.GenerationType.IDENTITY;
18-
import static lombok.AccessLevel.PROTECTED;
19-
2019
@Getter
2120
@NoArgsConstructor(access = PROTECTED)
2221
@Entity
@@ -40,17 +39,12 @@ public class Review extends BaseEntity {
4039
@Column(name = "content", length = 1000, nullable = false)
4140
private String content;
4241

43-
@Column(name = "img_url", nullable = false)
44-
private String imgUrl;
45-
4642
@Builder
47-
public Review(Long volunteerApplyId, UUID volunteerId, String title,
48-
String content, String imgUrl) {
43+
public Review(Long volunteerApplyId, UUID volunteerId, String title, String content) {
4944
this.volunteerApplyId = volunteerApplyId;
5045
this.volunteerId = volunteerId;
5146
this.title = title;
5247
this.content = content;
53-
this.imgUrl = imgUrl;
5448
}
5549

5650
public boolean isWriter(UUID volunteerId) {
@@ -62,7 +56,4 @@ public void updateWith(ReviewUpdateRequestDto dto) {
6256
this.content = dto.content();
6357
}
6458

65-
public void updateWith(String imgUrl) {
66-
this.imgUrl = imgUrl;
67-
}
6859
}

src/main/java/com/somemore/domains/review/dto/request/ReviewCreateRequestDto.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,13 +24,12 @@ public record ReviewCreateRequestDto(
2424
String content
2525
) {
2626

27-
public Review toEntity(UUID volunteerId, String imgUrl) {
27+
public Review toEntity(UUID volunteerId) {
2828
return Review.builder()
2929
.volunteerApplyId(volunteerApplyId)
3030
.volunteerId(volunteerId)
3131
.title(title)
3232
.content(content)
33-
.imgUrl(imgUrl)
3433
.build();
3534
}
3635
}

src/main/java/com/somemore/domains/review/dto/response/ReviewDetailResponseDto.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -21,8 +21,6 @@ public record ReviewDetailResponseDto(
2121
String title,
2222
@Schema(description = "리뷰 내용", example = "정말 유익했습니다. 더보기..")
2323
String content,
24-
@Schema(description = "이미지 링크", example = "https://image.domain.com/links")
25-
String imgUrl,
2624
@Schema(description = "작성 일자", example = "2024-12-01T09:00:00", type = "string")
2725
LocalDateTime createdAt,
2826
@Schema(description = "수정 일자", example = "2024-12-01T09:00:00", type = "string")
@@ -35,7 +33,6 @@ public static ReviewDetailResponseDto from(Review review) {
3533
.volunteerId(review.getVolunteerId())
3634
.title(review.getTitle())
3735
.content(review.getContent())
38-
.imgUrl(review.getImgUrl())
3936
.createdAt(review.getCreatedAt())
4037
.updatedAt(review.getUpdatedAt())
4138
.build();

src/main/java/com/somemore/domains/review/dto/response/ReviewDetailWithNicknameResponseDto.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@ public record ReviewDetailWithNicknameResponseDto(
2323
String title,
2424
@Schema(description = "리뷰 내용", example = "정말 유익했습니다. 더보기..")
2525
String content,
26-
@Schema(description = "이미지 링크", example = "https://image.domain.com/links")
27-
String imgUrl,
2826
@Schema(description = "작성 일자", example = "2024-12-01T09:00:00", type = "string")
2927
LocalDateTime createdAt,
3028
@Schema(description = "수정 일자", example = "2024-12-01T09:00:00", type = "string")
@@ -38,7 +36,6 @@ public static ReviewDetailWithNicknameResponseDto from(Review review, String vol
3836
.volunteerNickname(volunteerNickname)
3937
.title(review.getTitle())
4038
.content(review.getContent())
41-
.imgUrl(review.getImgUrl())
4239
.createdAt(review.getCreatedAt())
4340
.updateAt(review.getUpdatedAt())
4441
.build();

src/main/java/com/somemore/domains/review/service/CreateReviewService.java

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,8 @@
11
package com.somemore.domains.review.service;
22

3+
import static com.somemore.global.exception.ExceptionMessage.REVIEW_ALREADY_EXISTS;
4+
import static com.somemore.global.exception.ExceptionMessage.REVIEW_RESTRICTED_TO_ATTENDED;
5+
36
import com.somemore.domains.review.domain.Review;
47
import com.somemore.domains.review.dto.request.ReviewCreateRequestDto;
58
import com.somemore.domains.review.repository.ReviewRepository;
@@ -9,15 +12,11 @@
912
import com.somemore.domains.volunteerapply.usecase.VolunteerApplyQueryUseCase;
1013
import com.somemore.global.exception.BadRequestException;
1114
import com.somemore.global.exception.DuplicateException;
15+
import java.util.UUID;
1216
import lombok.RequiredArgsConstructor;
1317
import org.springframework.stereotype.Service;
1418
import org.springframework.transaction.annotation.Transactional;
1519

16-
import java.util.UUID;
17-
18-
import static com.somemore.global.exception.ExceptionMessage.REVIEW_ALREADY_EXISTS;
19-
import static com.somemore.global.exception.ExceptionMessage.REVIEW_RESTRICTED_TO_ATTENDED;
20-
2120
@RequiredArgsConstructor
2221
@Transactional
2322
@Service
@@ -28,13 +27,13 @@ public class CreateReviewService implements CreateReviewUseCase {
2827
private final VolunteerApplyQueryUseCase volunteerApplyQueryUseCase;
2928

3029
@Override
31-
public Long createReview(ReviewCreateRequestDto requestDto, UUID volunteerId, String imgUrl) {
30+
public Long createReview(ReviewCreateRequestDto requestDto, UUID volunteerId) {
3231
validateDuplicateReview(requestDto.volunteerApplyId());
3332

3433
VolunteerApply apply = volunteerApplyQueryUseCase.getById(requestDto.volunteerApplyId());
3534
validateActivityCompletion(apply);
3635

37-
Review review = requestDto.toEntity(volunteerId, imgUrl);
36+
Review review = requestDto.toEntity(volunteerId);
3837
reviewRepository.save(review);
3938

4039
return review.getId();

src/main/java/com/somemore/domains/review/service/UpdateReviewService.java

Lines changed: 1 addition & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,12 +5,11 @@
55
import com.somemore.domains.review.service.validator.ReviewValidator;
66
import com.somemore.domains.review.usecase.ReviewQueryUseCase;
77
import com.somemore.domains.review.usecase.UpdateReviewUseCase;
8+
import java.util.UUID;
89
import lombok.RequiredArgsConstructor;
910
import org.springframework.stereotype.Service;
1011
import org.springframework.transaction.annotation.Transactional;
1112

12-
import java.util.UUID;
13-
1413
@RequiredArgsConstructor
1514
@Transactional
1615
@Service
@@ -26,11 +25,4 @@ public void updateReview(Long id, UUID volunteerId, ReviewUpdateRequestDto reque
2625
review.updateWith(requestDto);
2726
}
2827

29-
@Override
30-
public void updateReviewImageUrl(Long id, UUID volunteerId, String imgUrl) {
31-
Review review = reviewQueryUseCase.getById(id);
32-
reviewValidator.validateWriter(review, volunteerId);
33-
review.updateWith(imgUrl);
34-
}
35-
3628
}
Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package com.somemore.domains.review.usecase;
22

33
import com.somemore.domains.review.dto.request.ReviewCreateRequestDto;
4-
54
import java.util.UUID;
65

76
public interface CreateReviewUseCase {
87

9-
Long createReview(ReviewCreateRequestDto requestDto, UUID volunteerId, String imgUrl);
10-
8+
Long createReview(ReviewCreateRequestDto requestDto, UUID volunteerId);
119

1210
}
Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,10 @@
11
package com.somemore.domains.review.usecase;
22

33
import com.somemore.domains.review.dto.request.ReviewUpdateRequestDto;
4-
54
import java.util.UUID;
65

76
public interface UpdateReviewUseCase {
87

98
void updateReview(Long id, UUID volunteerId, ReviewUpdateRequestDto requestDto);
109

11-
void updateReviewImageUrl(Long id, UUID volunteerId, String imgUrl);
1210
}

0 commit comments

Comments
 (0)