Skip to content

Commit e5ce817

Browse files
committed
feat(review): 리뷰 생성 기능 추가
1 parent a2389e7 commit e5ce817

File tree

3 files changed

+99
-0
lines changed

3 files changed

+99
-0
lines changed
Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
package com.somemore.review.dto.request;
2+
3+
import com.fasterxml.jackson.databind.PropertyNamingStrategies;
4+
import com.fasterxml.jackson.databind.annotation.JsonNaming;
5+
import com.somemore.review.domain.Review;
6+
import com.somemore.volunteerapply.domain.VolunteerApply;
7+
import io.swagger.v3.oas.annotations.media.Schema;
8+
import jakarta.validation.constraints.NotBlank;
9+
import jakarta.validation.constraints.NotNull;
10+
import java.util.UUID;
11+
import lombok.Builder;
12+
13+
@JsonNaming(PropertyNamingStrategies.SnakeCaseStrategy.class)
14+
@Builder
15+
public record ReviewCreateRequestDto(
16+
@Schema(description = "봉사 모집글 아이디", example = "1")
17+
@NotNull(message = "봉사 모집글 아이디는 필수 값입니다.")
18+
Long recruitBoardId,
19+
@Schema(description = "리뷰 제목", example = "내 인생 최고의 봉사 활동")
20+
@NotBlank(message = "리뷰 제목은 필수 값입니다.")
21+
String title,
22+
@Schema(description = "리뷰 내용", example = "담당자님도 정말 친절하였고 정말 보람찬 봉사였어요 더보기..<br>")
23+
@NotBlank(message = "리뷰 내용은 필수 값입니다.")
24+
String content
25+
) {
26+
27+
public Review toEntity(VolunteerApply apply, UUID volunteerId, String imgUrl) {
28+
return Review.builder()
29+
.volunteerApplyId(apply.getId())
30+
.volunteerId(volunteerId)
31+
.title(title)
32+
.content(content)
33+
.imgUrl(imgUrl)
34+
.build();
35+
}
36+
}
Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
package com.somemore.review.service;
2+
3+
import static com.somemore.global.exception.ExceptionMessage.REVIEW_ALREADY_EXISTS;
4+
import static com.somemore.global.exception.ExceptionMessage.REVIEW_RESTRICTED_TO_ATTENDED;
5+
6+
import com.somemore.global.exception.BadRequestException;
7+
import com.somemore.review.domain.Review;
8+
import com.somemore.review.dto.request.ReviewCreateRequestDto;
9+
import com.somemore.review.repository.ReviewRepository;
10+
import com.somemore.review.usecase.CreateReviewUseCase;
11+
import com.somemore.volunteerapply.domain.VolunteerApply;
12+
import com.somemore.volunteerapply.usecase.VolunteerApplyQueryUseCase;
13+
import java.util.UUID;
14+
import lombok.RequiredArgsConstructor;
15+
import org.springframework.stereotype.Service;
16+
import org.springframework.transaction.annotation.Transactional;
17+
18+
@RequiredArgsConstructor
19+
@Transactional
20+
@Service
21+
public class CreateReviewService implements CreateReviewUseCase {
22+
23+
private final ReviewRepository reviewRepository;
24+
private final VolunteerApplyQueryUseCase volunteerApplyQueryUseCase;
25+
26+
@Override
27+
public Long createReview(ReviewCreateRequestDto requestDto, UUID volunteerId, String imgUrl) {
28+
VolunteerApply apply = getVolunteerApply(requestDto.recruitBoardId(), volunteerId);
29+
validateReviewNotExist(apply);
30+
validateActivityCompletion(apply);
31+
32+
Review review = requestDto.toEntity(apply, volunteerId, imgUrl);
33+
return reviewRepository.save(review).getId();
34+
}
35+
36+
private VolunteerApply getVolunteerApply(Long recruitBoardId, UUID volunteerId) {
37+
return volunteerApplyQueryUseCase.getByRecruitIdAndVolunteerId(recruitBoardId, volunteerId);
38+
}
39+
40+
private void validateReviewNotExist(VolunteerApply apply) {
41+
if (reviewRepository.existsByVolunteerApplyId(apply.getId())) {
42+
throw new BadRequestException(REVIEW_ALREADY_EXISTS.getMessage());
43+
}
44+
}
45+
46+
private void validateActivityCompletion(VolunteerApply apply) {
47+
if (apply.isVolunteerActivityCompleted()) {
48+
return;
49+
}
50+
throw new BadRequestException(REVIEW_RESTRICTED_TO_ATTENDED.getMessage());
51+
}
52+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
package com.somemore.review.usecase;
2+
3+
import com.somemore.review.dto.request.ReviewCreateRequestDto;
4+
import java.util.UUID;
5+
6+
public interface CreateReviewUseCase {
7+
8+
Long createReview(ReviewCreateRequestDto requestDto, UUID volunteerId, String imgUrl);
9+
10+
11+
}

0 commit comments

Comments
 (0)