Skip to content

Commit

Permalink
Merge pull request #23 from LikeLion-Hackathon-T1/feat/review-error
Browse files Browse the repository at this point in the history
Feat/review error
  • Loading branch information
Jeongh00 authored Aug 4, 2024
2 parents c3b2605 + 7441e71 commit 6ec4327
Show file tree
Hide file tree
Showing 12 changed files with 94 additions and 25 deletions.
2 changes: 1 addition & 1 deletion .github/workflows/cd.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ name: Backend CD # actions 이름

on:
push:
branches: [ feat/qa-check ]
branches: [ feat/toss-payment ]

jobs:
deploy:
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
import org.springframework.web.bind.annotation.*;

import java.time.LocalDate;
import java.time.LocalDateTime;
import java.util.List;
import java.util.Map;

Expand All @@ -32,6 +33,24 @@ public class OrderController {
private final PaymentService paymentService;
private final OrderDeleteUseCase orderDeleteUseCase;

// 주문번호 생성
@GetMapping("/generatenum")
@ApiResponses(
value = {
@ApiResponse(
responseCode = "200",
description = "주문번호 생성",
useReturnTypeSchema = true
)
}
)
@Operation(summary = "주문번호 생성 API", description = "주문번호 생성 API 입니다.")
public ApplicationResponse<String> makeOrderNum() {

String orderNum = paymentService.generateOrderNumber(LocalDateTime.now());
return ApplicationResponse.ok(orderNum);
}

// 주문내역 조회
@GetMapping
@ApiResponses(
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,12 @@

public record ApprovalRequest(
List<Long> menuIds,
String orderNum,
String paymentKey,
Integer amount
Integer amount,
String pickUpRoute,
Integer visitHour,
Integer visitMin,
String phoneNum
) {
}
Original file line number Diff line number Diff line change
Expand Up @@ -32,11 +32,11 @@ public PaymentClient(WebClient webClient, PaymentAuthorizationHeaderProvider.Fac

}

public TossPaymentResponse confirmPayment(ApprovalRequest request, String orderNum) {
public TossPaymentResponse confirmPayment(ApprovalRequest request) {

ApproveFinalReq finalReq = new ApproveFinalReq(
request.amount(),
orderNum,
request.orderNum(),
request.paymentKey()
);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ public class PaymentService {
private final JwtUtil jwtUtil;

private static final DateTimeFormatter ORDER_NUMBER_DATE_FORMAT = DateTimeFormatter.ofPattern("yyyyMMdd");
private static final String ALPHANUMERIC = "ABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
private static final SecureRandom random = new SecureRandom();
private final MenuQueryService menuQueryService;

Expand All @@ -46,15 +47,15 @@ public ApprovalResponse approval(String accessToken, ApprovalRequest request) {
User user = userQueryService.findByEmail(email);
Store store = storeQueryService.findStoreById(request.menuIds().get(0));

String orderNum = generateOrderNumber(LocalDateTime.now());

// 토스 페이 결제 승인
TossPaymentResponse tossPaymentResponse = paymentClient.confirmPayment(request, orderNum);
TossPaymentResponse tossPaymentResponse = paymentClient.confirmPayment(request);

// 방문 리스트 준비 중으로 저장 + 주문 테이블 저장
marketQueryService.saveVisitListToPreparing(store.getId(), user.getEmail());

final Order order = Order.builder().orderNum(orderNum).user(user).build();
final Order order = Order.builder().orderNum(request.orderNum()).user(user).
phoneNum(request.phoneNum()).pickUpRoute(request.pickUpRoute()).
visitHour(request.visitHour()).visitMin(request.visitMin()).build();
orderQueryService.saveOrder(order);

for (int i = 0; i < request.menuIds().size(); i++) {
Expand All @@ -71,13 +72,17 @@ public ApprovalResponse approval(String accessToken, ApprovalRequest request) {

public String generateOrderNumber(LocalDateTime createdAt) {
String datePart = createdAt.format(ORDER_NUMBER_DATE_FORMAT);
String orderNumberPart = generateRandomNumber();
return datePart + orderNumberPart;
String randomAlphaNumeric = generateRandomAlphaNumeric();
return datePart + randomAlphaNumeric;
}

private String generateRandomNumber() {
int number = random.nextInt(10000);
return String.format("%04d", number);
private String generateRandomAlphaNumeric() {
StringBuilder alphaNumeric = new StringBuilder(4);
for (int i = 0; i < 4; i++) {
int index = random.nextInt(ALPHANUMERIC.length());
alphaNumeric.append(ALPHANUMERIC.charAt(index));
}
return alphaNumeric.toString();
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,7 @@ public List<ReviewInfo> findAllReviews(String accessToken, Long menuId) {
reviewImages.add(image.getImageUrl());
}

String likeCount = reviewQueryService.findLikeCountByReviewId(review.getId()).toString();
String likeCount = reviewQueryService.countReviewLikeAndUserId(user.getUserId(), review.getId()).toString();

Store store = storeQueryService.findStoreById(menus.get(0).getStore().getId());
String storeName = store.getName();
Expand All @@ -91,7 +91,7 @@ public List<ReviewInfo> findAllReviews(String accessToken, Long menuId) {
Integer weekDifference = dayDifference / 7;

boolean isMine = user.getUserId().equals(myUser.getUserId());
boolean helpfulYn = reviewQueryService.countLikeCountByMine(user.getUserId(), review.getId()) > 0;
boolean helpfulYn = reviewQueryService.countLikeCountByMine(myUser.getUserId(), review.getId()) > 0;
Integer helpfulCnt = reviewQueryService.countAllLikeCount(review.getId());

ReviewInfo reviewInfo = new ReviewInfo(id, name, picture, rating, content, reviewImages,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -82,4 +82,16 @@ public void saveReviewLike(Long reviewId, String accessToken) {
}

}

public void deleteReviewLike(String accessToken, Long reviewId) {
String email = jwtUtil.getEmail(accessToken);
User user = userQueryService.findByEmail(email);

if (reviewQueryService.countReviewLikeAndUserId(reviewId, user.getUserId()) > 0) {
ReviewLike reviewLike = reviewQueryService.findReviewLike(reviewId, user.getUserId());
reviewQueryService.deleteReviewLike(reviewLike.getId());
} else {
throw new ReviewException(ReviewErrorCode.NO_REVIEW_LIKE);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -105,4 +105,22 @@ public ApplicationResponse<String> saveReviewLike(@RequestHeader(AuthConsts.ACCE
reviewSaveUseCase.saveReviewLike(reviewId, accessToken);
return ApplicationResponse.ok("도움이 돼요 저장 완료");
}

@DeleteMapping ("/{reviewId}/like/delete")
@ApiResponses(
value = {
@ApiResponse(
responseCode = "200",
description = "도움이 돼요 저장 성공",
useReturnTypeSchema = true
)
}
)
@Operation(summary = "도움이 돼요 삭제 API", description = "도움이 돼요 삭제 API 입니다.")
public ApplicationResponse<String> deleteReviewLike(@RequestHeader(AuthConsts.ACCESS_TOKEN_HEADER) String accessToken,
@PathVariable Long reviewId) {

reviewSaveUseCase.deleteReviewLike(accessToken, reviewId);
return ApplicationResponse.ok("도움이 돼요 삭제 완료");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -22,5 +22,11 @@ public class Order extends BaseEntity {
@JoinColumn(name = "user_id")
private User user;

@Column(nullable = false, unique = true)
private String orderNum;

private String phoneNum;
private Integer visitHour;
private Integer visitMin;
private String pickUpRoute;
}
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ public enum ReviewErrorCode implements BaseErrorCode {
NO_MENU_INFO(HttpStatus.BAD_REQUEST, "2000", "메뉴 정보가 존재하지 않습니다."),
NO_REVIEW_INFO(HttpStatus.BAD_REQUEST, "2000", "리뷰가 존재하지 않습니다."),
NO_REVIEW_MINE(HttpStatus.BAD_REQUEST, "2000", "본인의 작성 리뷰가 아닙니다."),
NO_REVIEW_LIKE(HttpStatus.BAD_REQUEST, "2000", "도움이 돼요가 존재하지 않습니다."),
EXIST_REVIEW_LIKE(HttpStatus.BAD_REQUEST, "2000", "이미 도움이 돼요에 참여하셨습니다.");;

private final HttpStatus httpStatus;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,16 +1,14 @@
package com.likelion.coremodule.review.repository;

import com.likelion.coremodule.review.domain.ReviewLike;
import io.lettuce.core.dynamic.annotation.Param;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;

public interface ReviewLikeRepository extends JpaRepository<ReviewLike, Long> {

@Query("SELECT COUNT(rl) FROM ReviewLike rl WHERE rl.review.id = :reviewId")
Long countByReviewId(@Param("reviewId") Long reviewId);

Integer countAllByUserUserIdAndReviewId(Long userId, Long reviewId);

Integer countAllByReviewId(Long reviewId);

ReviewLike findReviewLikeByReviewIdAndUserUserId(Long reviewId, Long userId);

}
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,10 @@ public Review findReviewById(Long id) {
return reviewRepository.findById(id).orElseThrow(() -> new ReviewException(ReviewErrorCode.NO_MENU_INFO));
}

public ReviewLike findReviewLike(Long reviewId, Long userId) {
return reviewLikeRepository.findReviewLikeByReviewIdAndUserUserId(reviewId, userId);
}

public List<ReviewImage> findImagesByReviewId(Long reviewId) {
return reviewImageRepository.findAllByReviewId(reviewId);
}
Expand All @@ -37,10 +41,6 @@ public Review findReviewByOrderAndUser(Long orderId, Long userId) {
return reviewRepository.findReviewByOrderIdAndUserUserId(orderId, userId);
}

public Long findLikeCountByReviewId(Long reviewId) {
return reviewLikeRepository.countByReviewId(reviewId);
}

public Integer countAllLikeCount(Long reviewId) {
return reviewLikeRepository.countAllByReviewId(reviewId);
}
Expand All @@ -67,5 +67,10 @@ public Integer countReviewLikeAndUserId(Long reviewId, Long userId) {

public void deleteReview(Long id) {
reviewRepository.deleteById(id);

}

public void deleteReviewLike(Long id) {
reviewLikeRepository.deleteById(id);
}
}
}

0 comments on commit 6ec4327

Please sign in to comment.