Skip to content

Commit

Permalink
Merge pull request #353 from kookmin-sw/#352-review
Browse files Browse the repository at this point in the history
#352 review
  • Loading branch information
tmdtmdqorekf authored May 23, 2024
2 parents d30af64 + 611b041 commit a530235
Show file tree
Hide file tree
Showing 9 changed files with 81 additions and 17 deletions.
12 changes: 12 additions & 0 deletions backend/.jpb/jpb-settings.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
<?xml version="1.0" encoding="UTF-8"?>
<project version="4">
<component name="PersistenceUnitSettings">
<persistence-units>
<persistence-unit moduleName="backend.main" name="Default">
<packages>
<package value="com.coffee.backend" />
</packages>
</persistence-unit>
</persistence-units>
</component>
</project>
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
import com.coffee.backend.domain.match.dto.MatchReceivedInfoDto;
import com.coffee.backend.domain.match.dto.MatchRequestDto;
import com.coffee.backend.domain.match.dto.MatchStatusDto;
import com.coffee.backend.domain.match.dto.ReviewCheckDto;
import com.coffee.backend.domain.match.dto.ReviewDto;
import com.coffee.backend.domain.match.entity.Review;
import com.coffee.backend.domain.match.service.MatchService;
Expand Down Expand Up @@ -112,4 +113,14 @@ public ResponseEntity<ApiResponse<Review>> submitReview(@RequestBody ReviewDto d
Review response = matchService.saveReview(dto);
return ResponseEntity.ok(ApiResponse.success(response));
}

@GetMapping("/check/reviewed")
public ResponseEntity<ApiResponse<ReviewCheckDto>> checkReviewed(@RequestParam("matchId") String matchId,
@RequestParam("enderId") Long enderId) {
DtoLogger.requestParam("matchId", matchId);
DtoLogger.requestParam("enderId", enderId);

ReviewCheckDto response = matchService.checkReviewed(matchId, enderId);
return ResponseEntity.ok(ApiResponse.success(response));
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
package com.coffee.backend.domain.match.dto;

import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class ReviewCheckDto {
private boolean hasReviewed;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,9 @@
@Getter
@Setter
public class ReviewDto {
private Long senderId;
private Long receiverId;
private String matchId;
private Long reviewerId;
private Long revieweeId;
private int rating;
private String comment;
}
Original file line number Diff line number Diff line change
Expand Up @@ -19,14 +19,15 @@ public class Review {
@Id
@GeneratedValue(strategy = GenerationType.IDENTITY)
private Long reviewId;
private String matchId;

@ManyToOne
@JoinColumn(name = "sender_id")
private User sender;
@JoinColumn(name = "reviewer_id")
private User reviewer;

@ManyToOne
@JoinColumn(name = "receiver_id")
private User receiver;
@JoinColumn(name = "reviewee_id")
private User reviewee;

private int rating; // 커피콩 (1-5)
@Column(length = 1024)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
package com.coffee.backend.domain.match.repository;

import com.coffee.backend.domain.match.entity.Review;
import java.util.List;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.stereotype.Repository;

@Repository
public interface ReviewRepository extends JpaRepository<Review, Long> {
int countByReceiverUserId(Long receiverId);
List<Review> findByMatchId(String matchId);
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
import com.coffee.backend.domain.match.dto.MatchReceivedInfoDto;
import com.coffee.backend.domain.match.dto.MatchRequestDto;
import com.coffee.backend.domain.match.dto.MatchStatusDto;
import com.coffee.backend.domain.match.dto.ReviewCheckDto;
import com.coffee.backend.domain.match.dto.ReviewDto;
import com.coffee.backend.domain.match.entity.Review;
import com.coffee.backend.domain.match.repository.ReviewRepository;
Expand Down Expand Up @@ -469,29 +470,51 @@ public Review saveReview(ReviewDto dto) {
throw new CustomException(ErrorCode.VALUE_ERROR);
}

User sender = userRepository.findByUserId(dto.getSenderId()).orElseThrow();
User receiver = userRepository.findByUserId(dto.getReceiverId()).orElseThrow();
User reviewer = userRepository.findByUserId(dto.getReviewerId()).orElseThrow();
User reviewee = userRepository.findByUserId(dto.getRevieweeId()).orElseThrow();

int numberOfReviews = reviewRepository.countByReceiverUserId(receiver.getUserId());
double oldCoffeeBean = receiver.getCoffeeBean();
double oldCoffeeBean = reviewee.getCoffeeBean();

double standard = 3.0;
double randomRatio = 0.3 + (1.0 - 0.3) * Math.random(); //0.3 ~ 1.0
double randomRatio = 0.3 + (1.0 - 0.3) * Math.random(); // 0.3 ~ 1.0

// 기존 평점 + (새로운 평점 - 기준 평점) * 랜덤 반영 비율
double newCoffeeBean = oldCoffeeBean + (dto.getRating() - standard) * randomRatio;
double newCoffeeBeanDouble = Double.parseDouble(String.format("%.3f", newCoffeeBean)); // 소수점 3자리까지

receiver.setCoffeeBean(newCoffeeBeanDouble);
userRepository.save(receiver);
reviewee.setCoffeeBean(newCoffeeBeanDouble);
userRepository.save(reviewee);

Review review = new Review();
review.setSender(sender);
review.setReceiver(receiver);
review.setMatchId(dto.getMatchId());
review.setReviewer(reviewer);
review.setReviewee(reviewee);
review.setRating(dto.getRating());
review.setComment(dto.getComment());
review.setCreatedAt(new Date());
reviewRepository.save(review);
return review;
}

public ReviewCheckDto checkReviewed(String matchId, Long enderId) {
List<Review> reviews = reviewRepository.findByMatchId(matchId);

boolean hasReviewed = false;
if (reviews.isEmpty()) {
ReviewCheckDto response = new ReviewCheckDto();
response.setHasReviewed(hasReviewed);
return response;
}

for (Review review : reviews) {
User reviewer = review.getReviewer();
if (!enderId.equals(reviewer.getUserId())) {
hasReviewed = true;
break;
}
}
ReviewCheckDto response = new ReviewCheckDto();
response.setHasReviewed(hasReviewed);
return response;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -10,14 +10,15 @@
public enum ErrorCode {
TOKEN_EXPIRED(HttpStatus.UNAUTHORIZED, "1401", "JWT 토큰이 만료되었습니다."),
LOGIN_FAILED(HttpStatus.NOT_FOUND, "1404", "로그인 또는 패스워드가 일치하지 않습니다."),
USER_NOT_FOUND(HttpStatus.NOT_FOUND, "4404", "해당 사용자를 찾을 수 없습니다."),
USER_NOT_FOUND(HttpStatus.NOT_FOUND, "1404", "해당 사용자를 찾을 수 없습니다."),
LOGIN_ID_DUPLICATED(HttpStatus.CONFLICT, "1409", "로그인 ID가 중복됩니다"),
DELETE_USER_FAILED(HttpStatus.INTERNAL_SERVER_ERROR, "1500", "사용자 탈퇴 처리 중 오류가 발생했습니다."),

ILLEGAL_ARGUMENT_POSITION(HttpStatus.NOT_FOUND, "2404", "잘못 된 직무를 입력했습니다."),

REDIS_ACCESS_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "3500", "Redis 접근 중 오류가 발생했습니다."),

REVIEW_NOT_FOUND(HttpStatus.NOT_FOUND, "4404", "해당 리뷰를 찾을 수 없습니다."),

FCM_ACCESS_TOKEN_ERROR(HttpStatus.INTERNAL_SERVER_ERROR, "5500", "FCM 액세스 토큰을 가져오는 중 오류가 발생했습니다."),
FCM_MESSAGE_FORMAT_ERROR(HttpStatus.BAD_REQUEST, "5400", "FCM 메시지 포맷이 잘못되었습니다."),
Expand Down
4 changes: 4 additions & 0 deletions backend/src/main/resources/db/migration/V4__add_matchid.sql
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
ALTER TABLE review
ADD COLUMN match_id VARCHAR(255),
CHANGE COLUMN sender_id reviewer_id BIGINT,
CHANGE COLUMN receiver_id reviewee_id BIGINT;

0 comments on commit a530235

Please sign in to comment.