diff --git a/src/main/java/com/example/sharemind/admin/application/AdminService.java b/src/main/java/com/example/sharemind/admin/application/AdminService.java index ecb68540..65693182 100644 --- a/src/main/java/com/example/sharemind/admin/application/AdminService.java +++ b/src/main/java/com/example/sharemind/admin/application/AdminService.java @@ -16,6 +16,8 @@ public interface AdminService { List getUnpaidConsults(); + List getPaidConsults(); + SmsGetResponse updateConsultIsPaid(Long consultId); List getPendingCounselors(); @@ -31,6 +33,8 @@ public interface AdminService { List getUnpaidPrivatePosts(); + List getPaidPrivatePosts(); + void updatePostIsPaid(Long postId); List getCustomersByNicknameOrEmail(String keyword); diff --git a/src/main/java/com/example/sharemind/admin/application/AdminServiceImpl.java b/src/main/java/com/example/sharemind/admin/application/AdminServiceImpl.java index 38eacb58..d9f741c8 100644 --- a/src/main/java/com/example/sharemind/admin/application/AdminServiceImpl.java +++ b/src/main/java/com/example/sharemind/admin/application/AdminServiceImpl.java @@ -75,6 +75,13 @@ public List getUnpaidConsults() { .toList(); } + @Override + public List getPaidConsults() { + return consultService.getPaidConsults().stream() + .map(ConsultGetUnpaidResponse::of) + .toList(); + } + @Transactional public SmsGetResponse updateConsultIsPaid(Long consultId) { Consult consult = consultService.getConsultByConsultId(consultId); @@ -177,6 +184,13 @@ public List getUnpaidPrivatePosts() { .toList(); } + @Override + public List getPaidPrivatePosts() { + return postService.getPaidPrivatePosts().stream() + .map(PostGetUnpaidPrivateResponse::of) + .toList(); + } + @Transactional @Override public void updatePostIsPaid(Long postId) { diff --git a/src/main/java/com/example/sharemind/admin/dto/response/ConsultGetUnpaidResponse.java b/src/main/java/com/example/sharemind/admin/dto/response/ConsultGetUnpaidResponse.java index a3354169..6d3ded34 100644 --- a/src/main/java/com/example/sharemind/admin/dto/response/ConsultGetUnpaidResponse.java +++ b/src/main/java/com/example/sharemind/admin/dto/response/ConsultGetUnpaidResponse.java @@ -39,10 +39,13 @@ public class ConsultGetUnpaidResponse { @Schema(description = "상담 신청 일시") private final LocalDateTime createdAt; + @Schema(description = "상담 상태") + private final String consultStatus; + @Builder public ConsultGetUnpaidResponse(Long consultId, String customerName, String customerEmail, String counselorName, String counselorEmail, String counselorPhoneNumber, - String consultType, Long cost, LocalDateTime createdAt) { + String consultType, Long cost, LocalDateTime createdAt, String consultStatus) { this.consultId = consultId; this.customerName = customerName; this.customerEmail = customerEmail; @@ -52,6 +55,7 @@ public ConsultGetUnpaidResponse(Long consultId, String customerName, String cust this.consultType = consultType; this.cost = cost; this.createdAt = createdAt; + this.consultStatus = consultStatus; } @@ -69,6 +73,7 @@ public static ConsultGetUnpaidResponse of(Consult consult) { .consultType(consult.getConsultType().getDisplayName()) .cost(consult.getCost()) .createdAt(consult.getCreatedAt()) + .consultStatus(consult.getConsultStatus().toString()) .build(); } } diff --git a/src/main/java/com/example/sharemind/admin/dto/response/PostGetUnpaidPrivateResponse.java b/src/main/java/com/example/sharemind/admin/dto/response/PostGetUnpaidPrivateResponse.java index 6ab37618..f5e3c7c9 100644 --- a/src/main/java/com/example/sharemind/admin/dto/response/PostGetUnpaidPrivateResponse.java +++ b/src/main/java/com/example/sharemind/admin/dto/response/PostGetUnpaidPrivateResponse.java @@ -28,15 +28,19 @@ public class PostGetUnpaidPrivateResponse { @Schema(description = "상담 신청 일시") private final LocalDateTime createdAt; + @Schema(description = "상담 상태") + private final String postStatus; + @Builder public PostGetUnpaidPrivateResponse(Long postId, String customerName, String customerEmail, - Long cost, Boolean isPublic, LocalDateTime createdAt) { + Long cost, Boolean isPublic, LocalDateTime createdAt, String postStatus) { this.postId = postId; this.customerName = customerName; this.customerEmail = customerEmail; this.cost = cost; this.isPublic = isPublic; this.createdAt = createdAt; + this.postStatus = postStatus; } public static PostGetUnpaidPrivateResponse of(Post post) { @@ -49,6 +53,7 @@ public static PostGetUnpaidPrivateResponse of(Post post) { .cost(post.getCost()) .isPublic(post.getIsPublic()) .createdAt(post.getCreatedAt()) + .postStatus(post.getPostStatus().toString()) .build(); } } diff --git a/src/main/java/com/example/sharemind/admin/presentation/AdminController.java b/src/main/java/com/example/sharemind/admin/presentation/AdminController.java index 57decd61..3001fd67 100644 --- a/src/main/java/com/example/sharemind/admin/presentation/AdminController.java +++ b/src/main/java/com/example/sharemind/admin/presentation/AdminController.java @@ -43,6 +43,15 @@ public ResponseEntity> getUnpaidConsults() { return ResponseEntity.ok(adminService.getUnpaidConsults()); } + @Operation(summary = "결제 상담(편지/채팅) 리스트 조회", description = "결제 여부(isPaid)가 true인 consult 리스트 조회") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "조회 성공") + }) + @GetMapping("/paid-consults") + public ResponseEntity> getPaidConsults() { + return ResponseEntity.ok(adminService.getPaidConsults()); + } + @Operation(summary = "상담(편지/채팅) 결제 여부 수정", description = "결제 여부(isPaid)가 false인 consult를 true로 수정") @ApiResponses({ @ApiResponse(responseCode = "200", description = "수정 성공, resultCode로 sms api 발송 여부가 전달됩니다."), @@ -172,6 +181,15 @@ public ResponseEntity> getUnpaidPrivatePosts( return ResponseEntity.ok(adminService.getUnpaidPrivatePosts()); } + @Operation(summary = "결제 일대다 상담 리스트 조회", description = "결제 여부(isPaid)가 true인 일대다 상담 리스트 조회") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "조회 성공") + }) + @GetMapping("/paid-posts") + public ResponseEntity> getPaidPrivatePosts() { + return ResponseEntity.ok(adminService.getPaidPrivatePosts()); + } + @Operation(summary = "일대다 비공개 상담 결제 여부 수정", description = "결제 여부(isPaid)가 false인 일대다 상담을 true로 수정") @ApiResponses({ @ApiResponse(responseCode = "200", description = "수정 성공"), diff --git a/src/main/java/com/example/sharemind/consult/application/ConsultService.java b/src/main/java/com/example/sharemind/consult/application/ConsultService.java index 35a3c3e8..bd70847d 100644 --- a/src/main/java/com/example/sharemind/consult/application/ConsultService.java +++ b/src/main/java/com/example/sharemind/consult/application/ConsultService.java @@ -17,6 +17,8 @@ public interface ConsultService { List getUnpaidConsults(); + List getPaidConsults(); + List getConsultsByCustomerIdAndConsultTypeAndIsPaid(Long customerId, ConsultType consultType); List getConsultsByCounselorIdAndConsultTypeAndIsPaid(Long counselorId, ConsultType consultType); diff --git a/src/main/java/com/example/sharemind/consult/application/ConsultServiceImpl.java b/src/main/java/com/example/sharemind/consult/application/ConsultServiceImpl.java index 71f78df0..2dfb6ced 100644 --- a/src/main/java/com/example/sharemind/consult/application/ConsultServiceImpl.java +++ b/src/main/java/com/example/sharemind/consult/application/ConsultServiceImpl.java @@ -83,6 +83,11 @@ public List getUnpaidConsults() { return consultRepository.findAllByIsPaidIsFalseAndIsActivatedIsTrue(); } + @Override + public List getPaidConsults() { + return consultRepository.findAllByIsPaidIsTrueAndIsActivatedIsTrueOrderByCreatedAtDesc(); + } + @Override public List getConsultsByCustomerIdAndConsultTypeAndIsPaid(Long customerId, ConsultType consultType) { return consultRepository.findByCustomerIdAndConsultTypeAndIsPaid(customerId, consultType); diff --git a/src/main/java/com/example/sharemind/consult/repository/ConsultRepository.java b/src/main/java/com/example/sharemind/consult/repository/ConsultRepository.java index 8f1091ea..23c01fa6 100644 --- a/src/main/java/com/example/sharemind/consult/repository/ConsultRepository.java +++ b/src/main/java/com/example/sharemind/consult/repository/ConsultRepository.java @@ -19,6 +19,9 @@ public interface ConsultRepository extends JpaRepository { @Query("SELECT c FROM Consult c JOIN FETCH c.payment p WHERE p.isPaid = false AND c.isActivated = true") List findAllByIsPaidIsFalseAndIsActivatedIsTrue(); + @Query("SELECT c FROM Consult c JOIN FETCH c.payment p WHERE p.isPaid = true AND c.isActivated = true ORDER BY c.createdAt DESC") + List findAllByIsPaidIsTrueAndIsActivatedIsTrueOrderByCreatedAtDesc(); + @Query("SELECT chat.chatId FROM Consult c JOIN c.chat chat " + "WHERE c.customer.customerId = :customerId AND c.isActivated = true AND c.consultStatus != 'FINISH'") List findChatIdsByCustomerId(Long customerId); //todo: 쿼리 최적화 필요 diff --git a/src/main/java/com/example/sharemind/post/application/PostService.java b/src/main/java/com/example/sharemind/post/application/PostService.java index 2d4a8bc4..492cef33 100644 --- a/src/main/java/com/example/sharemind/post/application/PostService.java +++ b/src/main/java/com/example/sharemind/post/application/PostService.java @@ -17,6 +17,8 @@ public interface PostService { List getUnpaidPrivatePosts(); + List getPaidPrivatePosts(); + Post getPostByPostId(Long postId); Post getPostByPayAppId(String payAppId); diff --git a/src/main/java/com/example/sharemind/post/application/PostServiceImpl.java b/src/main/java/com/example/sharemind/post/application/PostServiceImpl.java index 32838fb1..8de8042b 100644 --- a/src/main/java/com/example/sharemind/post/application/PostServiceImpl.java +++ b/src/main/java/com/example/sharemind/post/application/PostServiceImpl.java @@ -68,6 +68,11 @@ public List getUnpaidPrivatePosts() { return postRepository.findAllByIsPaidIsFalseAndIsActivatedIsTrue(); } + @Override + public List getPaidPrivatePosts() { + return postRepository.findAllByIsPaidIsTrueAndIsActivatedIsTrueOrderByCreatedAtDesc(); + } + @Override public Post getPostByPostId(Long postId) { return postRepository.findByPostIdAndIsActivatedIsTrue(postId).orElseThrow( @@ -250,7 +255,7 @@ public Boolean getIsPostOwner(Long postId, Long customerId) { @Transactional public void checkPostStatus() { postRepository.findAllWaitingPublicPostsAfter24Hours() - .forEach(BaseEntity::updateIsActivatedFalse); + .forEach(BaseEntity::updateIsActivatedFalse); postRepository.findAllCommentedProceedingPublicPostsAfter72Hours() .forEach(post -> post.updatePostStatus(PostStatus.TIME_OUT)); diff --git a/src/main/java/com/example/sharemind/post/repository/PostRepository.java b/src/main/java/com/example/sharemind/post/repository/PostRepository.java index 878ff16b..4788344d 100644 --- a/src/main/java/com/example/sharemind/post/repository/PostRepository.java +++ b/src/main/java/com/example/sharemind/post/repository/PostRepository.java @@ -18,6 +18,8 @@ public interface PostRepository extends JpaRepository, PostCustomRep List findAllByIsPaidIsFalseAndIsActivatedIsTrue(); + List findAllByIsPaidIsTrueAndIsActivatedIsTrueOrderByCreatedAtDesc(); + @Query(value = "SELECT * FROM post " + "WHERE is_public = true AND post_status = 'WAITING' AND is_activated = true " + "AND created_at <= CURRENT_TIMESTAMP - INTERVAL 1 DAY ", nativeQuery = true)