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 a426d3a3..ecb68540 100644 --- a/src/main/java/com/example/sharemind/admin/application/AdminService.java +++ b/src/main/java/com/example/sharemind/admin/application/AdminService.java @@ -19,7 +19,7 @@ public interface AdminService { SmsGetResponse updateConsultIsPaid(Long consultId); List getPendingCounselors(); - void updateProfileStatus(Long counselorId, Boolean isPassed); + void updateProfileStatus(Long counselorId, Boolean isPassed, String reason); List getRefundWaitingPayments(); 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 24ed9a2a..38eacb58 100644 --- a/src/main/java/com/example/sharemind/admin/application/AdminServiceImpl.java +++ b/src/main/java/com/example/sharemind/admin/application/AdminServiceImpl.java @@ -106,7 +106,7 @@ public List getPendingCounselors() { @Transactional @Override - public void updateProfileStatus(Long counselorId, Boolean isPassed) { + public void updateProfileStatus(Long counselorId, Boolean isPassed, String reason) { Counselor counselor = counselorService.getCounselorByCounselorId(counselorId); if ((counselor.getProfileStatus() == null) || (!counselor.getProfileStatus().equals(ProfileStatus.EVALUATION_PENDING))) { @@ -124,6 +124,7 @@ public void updateProfileStatus(Long counselorId, Boolean isPassed) { emailService.sendEmail(email, EmailType.COUNSELOR_PROFILE_FAIL, ""); } counselor.updateProfileStatusAndProfileUpdatedAt(profileStatus); + counselor.updateProfileReason(reason); if (counselor.getProfileStatus().equals(ProfileStatus.EVALUATION_COMPLETE)) { Customer customer = customerService.getCustomerByCounselor(counselor); 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 3e2892ca..57decd61 100644 --- a/src/main/java/com/example/sharemind/admin/presentation/AdminController.java +++ b/src/main/java/com/example/sharemind/admin/presentation/AdminController.java @@ -73,8 +73,11 @@ public ResponseEntity> getPendingCounselors() } @Operation(summary = "상담사 프로필 심사 상태 수정", - description = "상담사 프로필 심사 상태 수정(최초 심사 통과 시 COUNSELOR 권한 부여), " + - "주소 형식: /api/v1/admins/pending-profiles/{counselorId}?isPassed=true") + description = + "상담사 프로필 심사 상태 수정(최초 심사 통과 시 COUNSELOR 권한 부여), reason의 경우 리젝시에만 보내주면 되는 optional한 값입니다." + + + "주소 형식: /api/v1/admins/pending-profiles/{counselorId}?isPassed=true&reason='test'") + @ApiResponses({ @ApiResponse(responseCode = "200", description = "수정 성공"), @ApiResponse(responseCode = "400", description = "심사 중이 아닌 상담사 프로필에 대한 요청", @@ -88,12 +91,13 @@ public ResponseEntity> getPendingCounselors() }) @Parameters({ @Parameter(name = "counselorId", description = "상담사 아이디"), - @Parameter(name = "isPassed", description = "심사 통과 여부") + @Parameter(name = "isPassed", description = "심사 통과 여부"), + @Parameter(name = "reason", description = "리젝 사유") }) @PatchMapping("/pending-profiles/{counselorId}") public ResponseEntity updateProfileStatus(@PathVariable Long counselorId, - @RequestParam Boolean isPassed) { - adminService.updateProfileStatus(counselorId, isPassed); + @RequestParam Boolean isPassed, @RequestParam(required = false) String reason) { + adminService.updateProfileStatus(counselorId, isPassed, reason); return ResponseEntity.ok().build(); } diff --git a/src/main/java/com/example/sharemind/counselor/application/CounselorService.java b/src/main/java/com/example/sharemind/counselor/application/CounselorService.java index 09255dbc..8ea14a54 100644 --- a/src/main/java/com/example/sharemind/counselor/application/CounselorService.java +++ b/src/main/java/com/example/sharemind/counselor/application/CounselorService.java @@ -71,4 +71,6 @@ List getRandomCounselorsByCustomer(Long customer String sortType, int index); List getAllRandomCounselors(String sortType, int index); + + String getCounselorFailureReason(Long counselorId); } diff --git a/src/main/java/com/example/sharemind/counselor/application/CounselorServiceImpl.java b/src/main/java/com/example/sharemind/counselor/application/CounselorServiceImpl.java index 275a1714..ae71bfe9 100644 --- a/src/main/java/com/example/sharemind/counselor/application/CounselorServiceImpl.java +++ b/src/main/java/com/example/sharemind/counselor/application/CounselorServiceImpl.java @@ -394,6 +394,14 @@ public List getCounselorsByNicknameOrEmail(String keyword) { return counselorRepository.findAllByNicknameOrEmail(keyword); } + @Override + public String getCounselorFailureReason(Long customerId) { + Counselor counselor = getCounselorByCustomerId(customerId); + if (counselor.getProfileStatus() == ProfileStatus.EVALUATION_FAIL) + return counselor.getFailureReason(); + return ""; + } + @Scheduled(cron = "0 0 * * * *", zone = "Asia/Seoul") public void updateRealtimeCounselors() { List counselors = counselorRepository.findAllByProfileStatusIsEvaluationCompleteAndIsActivatedIsTrue(); diff --git a/src/main/java/com/example/sharemind/counselor/domain/Counselor.java b/src/main/java/com/example/sharemind/counselor/domain/Counselor.java index 25c98763..4c24db73 100644 --- a/src/main/java/com/example/sharemind/counselor/domain/Counselor.java +++ b/src/main/java/com/example/sharemind/counselor/domain/Counselor.java @@ -53,6 +53,9 @@ public class Counselor extends BaseEntity { @Enumerated(EnumType.STRING) private ProfileStatus profileStatus; + @Column(name = "failure_reason") + private String failureReason; + @ElementCollection(targetClass = ConsultCost.class, fetch = FetchType.LAZY) @JoinTable(name = "consult_costs", joinColumns = @JoinColumn(name = "counselor_id")) @Column(name = "consult_costs") @@ -174,6 +177,10 @@ public void updateIsEducated(Boolean isEducated) { } } + public void updateProfileReason(String reason) { + this.failureReason = reason; + } + public void updateTotalReviewAndRatingAverage(Integer rating) { double preTotalRating = this.ratingAverage * this.totalReview; this.totalReview += 1; diff --git a/src/main/java/com/example/sharemind/counselor/presentation/CounselorController.java b/src/main/java/com/example/sharemind/counselor/presentation/CounselorController.java index a72445ac..b98d2772 100644 --- a/src/main/java/com/example/sharemind/counselor/presentation/CounselorController.java +++ b/src/main/java/com/example/sharemind/counselor/presentation/CounselorController.java @@ -323,4 +323,15 @@ public ResponseEntity getCounselorId( counselorService.getCounselorByCustomerId(customUserDetails.getCustomer() .getCustomerId()).getCounselorId()); } + + @Operation(summary = "프로필 리젝 사유 조회", + description = "프로필 리젝 사유 리턴하는 함수, 프로필 상태가 실패가 아니면 빈 문자열이 리턴됩니다.") + @ApiResponses({ + @ApiResponse(responseCode = "200", description = "조회 성공") + }) + @GetMapping("/profile-rejection") + public ResponseEntity getCounselorFailureReason(@AuthenticationPrincipal CustomUserDetails customUserDetails) { + return ResponseEntity.ok(counselorService.getCounselorFailureReason(customUserDetails.getCustomer() + .getCustomerId())); + } }