-
Notifications
You must be signed in to change notification settings - Fork 0
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
* [FEAT] Review 도메인 구현 * [FEAT] Review Exception 구현 * [FEAT] Review Repository 구현 * [FEAT] Review 생성 서비스 기능 구현 * [FEAT] 잔디력 증감 알고리즘 구현 * [FIX] 메소드명 변경에 따른 빌드 실패 오류 수정 * [RENAME] 잔디력 로직 생성에 따른 기본 값 변경
- Loading branch information
Showing
10 changed files
with
247 additions
and
11 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
56 changes: 56 additions & 0 deletions
56
src/main/java/io/oeid/mogakgo/domain/review/application/ReviewService.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,56 @@ | ||
package io.oeid.mogakgo.domain.review.application; | ||
|
||
import io.oeid.mogakgo.domain.project.infrastructure.ProjectJpaRepository; | ||
import io.oeid.mogakgo.domain.review.application.dto.req.ReviewCreateReq; | ||
import io.oeid.mogakgo.domain.review.application.dto.res.ReviewCreateRes; | ||
import io.oeid.mogakgo.domain.review.domain.Review; | ||
import io.oeid.mogakgo.domain.review.exception.ReviewException; | ||
import io.oeid.mogakgo.domain.review.infrastructure.ReviewJpaRepository; | ||
import io.oeid.mogakgo.domain.user.application.UserCommonService; | ||
import io.oeid.mogakgo.exception.code.ErrorCode400; | ||
import io.oeid.mogakgo.exception.code.ErrorCode404; | ||
import java.time.Duration; | ||
import java.time.LocalDateTime; | ||
import lombok.RequiredArgsConstructor; | ||
import org.springframework.stereotype.Service; | ||
import org.springframework.transaction.annotation.Transactional; | ||
|
||
@Service | ||
@RequiredArgsConstructor | ||
public class ReviewService { | ||
|
||
private final ReviewJpaRepository reviewRepository; | ||
private final ProjectJpaRepository projectRepository; | ||
private final UserCommonService userCommonService; | ||
|
||
@Transactional | ||
public ReviewCreateRes createNewReview(ReviewCreateReq request) { | ||
reviewRepository.findReviewByProjectData(request.getSenderId(), request.getReceiverId(), | ||
request.getProjectId()).ifPresent(review -> { | ||
throw new ReviewException(ErrorCode400.REVIEW_ALREADY_EXISTS); | ||
}); | ||
var sender = userCommonService.getUserById(request.getSenderId()); | ||
var receiver = userCommonService.getUserById(request.getReceiverId()); | ||
var project = projectRepository.findById(request.getProjectId()) | ||
.orElseThrow(() -> new ReviewException(ErrorCode404.PROJECT_NOT_FOUND)); | ||
var review = reviewRepository.save(Review.builder() | ||
.sender(sender) | ||
.receiver(receiver) | ||
.project(project) | ||
.rating(request.getRating()) | ||
.build() | ||
); | ||
receiver.updateJandiRateByReview(review.getRating(), | ||
calculateProjectTime(project.getMeetingInfo().getMeetStartTime(), | ||
project.getMeetingInfo().getMeetEndTime())); | ||
return ReviewCreateRes.from(review); | ||
} | ||
|
||
private double calculateProjectTime(LocalDateTime meetStartTime, LocalDateTime meetEndTime) { | ||
Duration duration = Duration.between(meetStartTime, meetEndTime); | ||
double hours = duration.toHours(); | ||
double minutes = duration.toMinutes() % 60; | ||
return hours + minutes / 60; | ||
} | ||
|
||
} |
14 changes: 14 additions & 0 deletions
14
src/main/java/io/oeid/mogakgo/domain/review/application/dto/req/ReviewCreateReq.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package io.oeid.mogakgo.domain.review.application.dto.req; | ||
|
||
import io.oeid.mogakgo.domain.review.domain.enums.ReviewRating; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
@AllArgsConstructor | ||
public class ReviewCreateReq { | ||
private Long senderId; | ||
private Long receiverId; | ||
private Long projectId; | ||
private ReviewRating rating; | ||
} |
30 changes: 30 additions & 0 deletions
30
src/main/java/io/oeid/mogakgo/domain/review/application/dto/res/ReviewCreateRes.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,30 @@ | ||
package io.oeid.mogakgo.domain.review.application.dto.res; | ||
|
||
import io.oeid.mogakgo.domain.review.domain.Review; | ||
import io.oeid.mogakgo.domain.review.domain.enums.ReviewRating; | ||
import java.time.LocalDateTime; | ||
import lombok.AccessLevel; | ||
import lombok.AllArgsConstructor; | ||
import lombok.Getter; | ||
|
||
@Getter | ||
@AllArgsConstructor(access = AccessLevel.PRIVATE) | ||
public class ReviewCreateRes { | ||
private Long id; | ||
private Long senderId; | ||
private Long receiverId; | ||
private Long projectId; | ||
private ReviewRating rating; | ||
private LocalDateTime createdAt; | ||
|
||
public static ReviewCreateRes from(Review review) { | ||
return new ReviewCreateRes( | ||
review.getId(), | ||
review.getSender().getId(), | ||
review.getReceiver().getId(), | ||
review.getProject().getId(), | ||
review.getRating(), | ||
review.getCreatedAt() | ||
); | ||
} | ||
} |
81 changes: 81 additions & 0 deletions
81
src/main/java/io/oeid/mogakgo/domain/review/domain/Review.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,81 @@ | ||
package io.oeid.mogakgo.domain.review.domain; | ||
|
||
import static jakarta.persistence.GenerationType.IDENTITY; | ||
import static lombok.AccessLevel.PROTECTED; | ||
|
||
import io.oeid.mogakgo.domain.project.domain.entity.Project; | ||
import io.oeid.mogakgo.domain.review.domain.enums.ReviewRating; | ||
import io.oeid.mogakgo.domain.review.exception.ReviewException; | ||
import io.oeid.mogakgo.domain.user.domain.User; | ||
import io.oeid.mogakgo.exception.code.ErrorCode400; | ||
import jakarta.persistence.Column; | ||
import jakarta.persistence.Entity; | ||
import jakarta.persistence.EnumType; | ||
import jakarta.persistence.Enumerated; | ||
import jakarta.persistence.GeneratedValue; | ||
import jakarta.persistence.Id; | ||
import jakarta.persistence.JoinColumn; | ||
import jakarta.persistence.ManyToOne; | ||
import jakarta.persistence.Table; | ||
import java.time.LocalDateTime; | ||
import lombok.Builder; | ||
import lombok.Getter; | ||
import lombok.NoArgsConstructor; | ||
import org.hibernate.annotations.CreationTimestamp; | ||
|
||
@Getter | ||
@Entity | ||
@Table(name = "review_tb") | ||
@NoArgsConstructor(access = PROTECTED) | ||
public class Review { | ||
|
||
@Id | ||
@GeneratedValue(strategy = IDENTITY) | ||
@Column(name = "id") | ||
private Long id; | ||
|
||
@ManyToOne | ||
@JoinColumn(name = "sender_id") | ||
private User sender; | ||
|
||
@ManyToOne | ||
@JoinColumn(name = "receiver_id") | ||
private User receiver; | ||
|
||
@ManyToOne | ||
@JoinColumn(name = "project_id") | ||
private Project project; | ||
|
||
@Enumerated(EnumType.STRING) | ||
@Column(name = "rating") | ||
private ReviewRating rating; | ||
|
||
@CreationTimestamp | ||
@Column(name = "created_at") | ||
LocalDateTime createdAt; | ||
|
||
@Builder | ||
private Review(User sender, User receiver, Project project, ReviewRating rating) { | ||
validateUsers(sender, receiver); | ||
this.sender = sender; | ||
this.receiver = receiver; | ||
this.project = validateProject(project); | ||
this.rating = rating; | ||
} | ||
|
||
private void validateUsers(User sender, User receiver) { | ||
if (sender == null || receiver == null) { | ||
throw new ReviewException(ErrorCode400.REVIEW_SENDER_OR_RECEIVER_NOT_FOUND); | ||
} | ||
if (sender.getId().equals(receiver.getId())) { | ||
throw new ReviewException(ErrorCode400.REVIEW_USER_DUPLICATED); | ||
} | ||
} | ||
|
||
private Project validateProject(Project project) { | ||
if (project == null) { | ||
throw new ReviewException(ErrorCode400.REVIEW_PROJECT_NOT_NULL); | ||
} | ||
return project; | ||
} | ||
} |
18 changes: 18 additions & 0 deletions
18
src/main/java/io/oeid/mogakgo/domain/review/domain/enums/ReviewRating.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,18 @@ | ||
package io.oeid.mogakgo.domain.review.domain.enums; | ||
|
||
import lombok.Getter; | ||
|
||
@Getter | ||
public enum ReviewRating { | ||
ONE(-2), | ||
TWO(-1), | ||
THREE(1), | ||
FOUR(2), | ||
FIVE(3); | ||
|
||
private final int value; | ||
|
||
ReviewRating(int value) { | ||
this.value = value; | ||
} | ||
} |
11 changes: 11 additions & 0 deletions
11
src/main/java/io/oeid/mogakgo/domain/review/exception/ReviewException.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,11 @@ | ||
package io.oeid.mogakgo.domain.review.exception; | ||
|
||
import io.oeid.mogakgo.exception.code.ErrorCode; | ||
import io.oeid.mogakgo.exception.exception_class.CustomException; | ||
|
||
public class ReviewException extends CustomException { | ||
|
||
public ReviewException(ErrorCode errorCode) { | ||
super(errorCode); | ||
} | ||
} |
14 changes: 14 additions & 0 deletions
14
src/main/java/io/oeid/mogakgo/domain/review/infrastructure/ReviewJpaRepository.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,14 @@ | ||
package io.oeid.mogakgo.domain.review.infrastructure; | ||
|
||
import io.oeid.mogakgo.domain.review.domain.Review; | ||
import java.util.Optional; | ||
import org.springframework.data.jpa.repository.JpaRepository; | ||
import org.springframework.data.jpa.repository.Query; | ||
import org.springframework.stereotype.Repository; | ||
|
||
@Repository | ||
public interface ReviewJpaRepository extends JpaRepository<Review, Long> { | ||
|
||
@Query("select r from Review r where r.sender.id = ?1 and r.receiver.id = ?2 and r.project.id = ?3") | ||
Optional<Review> findReviewByProjectData(Long id, Long id1, Long id2); | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters