From 1b4a5b07d8a13aac1af08d1b970544241afc8023 Mon Sep 17 00:00:00 2001 From: choiseoji Date: Sat, 18 Jan 2025 11:11:20 +0900 Subject: [PATCH 01/31] =?UTF-8?q?[#47]=20feat:=20=EB=AA=A8=EC=A7=91=20?= =?UTF-8?q?=EB=A7=88=EA=B0=90=EC=9D=B4=20=EA=B0=80=EA=B9=8C=EC=9A=B4=20?= =?UTF-8?q?=EC=88=9C=EC=9C=BC=EB=A1=9C=20=EC=A0=84=EC=B2=B4=20=ED=94=84?= =?UTF-8?q?=EB=A1=9C=EA=B7=B8=EB=9E=A8=20=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/education/service/EducationService.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java b/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java index fccc9e9..cf6d0ce 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java @@ -12,10 +12,7 @@ import angel_bridge.angel_bridge_server.global.s3.service.ImageService; import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.*; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; @@ -154,7 +151,7 @@ public PagedResponseDto getAllProgram(int page) { if (page == 0) throw new ApplicationException(BAD_REQUEST_ERROR); - Pageable pageable = PageRequest.of(page - 1, 12); + Pageable pageable = PageRequest.of(page - 1, 12, Sort.by(Sort.Direction.ASC, "recruitmentEndDate")); // 페이지 조회 Page educationPage = educationRepository.findAllActive(pageable); @@ -178,7 +175,7 @@ public PagedResponseDto getAllOngoingProgram(int page) { throw new ApplicationException(BAD_REQUEST_ERROR); } - Pageable pageable = PageRequest.of(page - 1, 12); + Pageable pageable = PageRequest.of(page - 1, 12, Sort.by(Sort.Direction.ASC, "recruitmentEndDate")); // 페이지 조회 Page educationPage = educationRepository.findByRecruitmentStatusAndDeletedAtIsNull(RecruitmentStatus.ONGOING, pageable); @@ -202,7 +199,7 @@ public PagedResponseDto getAllUpcomingProgram(int page) { throw new ApplicationException(BAD_REQUEST_ERROR); } - Pageable pageable = PageRequest.of(page - 1, 12); + Pageable pageable = PageRequest.of(page - 1, 12, Sort.by(Sort.Direction.ASC, "recruitmentEndDate")); // 페이지 조회 Page educationPage = educationRepository.findByRecruitmentStatusAndDeletedAtIsNull(RecruitmentStatus.UPCOMING, pageable); From a26f695eb839bb7540d14e19187f22284746ce14 Mon Sep 17 00:00:00 2001 From: Hanseul Lee Date: Sat, 18 Jan 2025 11:16:31 +0900 Subject: [PATCH 02/31] =?UTF-8?q?[#46]=20fix:=20=EB=B0=B0=EB=84=88?= =?UTF-8?q?=EC=97=90=EC=84=9C=20isPost=20=ED=95=84=EB=93=9C=20=EC=A0=9C?= =?UTF-8?q?=EA=B1=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../banner/controller/AdminBannerController.java | 7 ------- .../banner/dto/request/AdminBannerRequestDto.java | 7 +------ .../banner/dto/response/AdminBannerResponseDto.java | 5 +---- .../domain/banner/entity/Banner.java | 11 +---------- .../domain/banner/service/BannerService.java | 12 ------------ .../global/repository/BannerRepository.java | 2 +- 6 files changed, 4 insertions(+), 40 deletions(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/banner/controller/AdminBannerController.java b/src/main/java/angel_bridge/angel_bridge_server/domain/banner/controller/AdminBannerController.java index eb43bac..9bb8ff0 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/banner/controller/AdminBannerController.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/banner/controller/AdminBannerController.java @@ -33,13 +33,6 @@ public CommonResponse updateBanner(@Valid @RequestPart(v return new CommonResponse<>(bannerService.updateBanner(request, file, bannerId), "해당 배너 이미지 수정에 성공하였습니다."); } - @Operation(summary = "배너 게시 여부 변경", description = "해당 배너 게시 여부를 변경하는 API") - @PatchMapping("/{bannerId}") - public CommonResponse changeIsPost(@PathVariable Long bannerId) { - - return new CommonResponse<>(bannerService.changeIsPost(bannerId), "해당 배너의 게시 여부를 변경하였습니다."); - } - @Operation(summary = "배너 삭제", description = "하나의 배너를 삭제하는 API") @DeleteMapping("/{bannerId}") public CommonResponse deleteBanner(@PathVariable Long bannerId) { diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/banner/dto/request/AdminBannerRequestDto.java b/src/main/java/angel_bridge/angel_bridge_server/domain/banner/dto/request/AdminBannerRequestDto.java index f40a580..5628d9d 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/banner/dto/request/AdminBannerRequestDto.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/banner/dto/request/AdminBannerRequestDto.java @@ -11,11 +11,7 @@ public record AdminBannerRequestDto( String name, @Schema(description = "배너 게시 순서", example = "1") - Integer priority, - - @NotNull - @Schema(description = "배너 게시 유무", example = "true") - Boolean isPost + Integer priority ) { public Banner toEntity(String file) { @@ -23,7 +19,6 @@ public Banner toEntity(String file) { .bannerImage(file) .name(this.name) .priority(this.priority) - .isPost(this.isPost) .build(); } } diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/banner/dto/response/AdminBannerResponseDto.java b/src/main/java/angel_bridge/angel_bridge_server/domain/banner/dto/response/AdminBannerResponseDto.java index aa2f068..1099603 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/banner/dto/response/AdminBannerResponseDto.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/banner/dto/response/AdminBannerResponseDto.java @@ -12,9 +12,7 @@ public record AdminBannerResponseDto( String name, - Integer priority, - - Boolean isPost + Integer priority ) { public static AdminBannerResponseDto from(Banner banner) { @@ -23,7 +21,6 @@ public static AdminBannerResponseDto from(Banner banner) { .imageFile(banner.getBannerImage()) .name(banner.getName()) .priority(banner.getPriority()) - .isPost(banner.getIsPost()) .build(); } } diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/banner/entity/Banner.java b/src/main/java/angel_bridge/angel_bridge_server/domain/banner/entity/Banner.java index 958d310..4a4bff6 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/banner/entity/Banner.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/banner/entity/Banner.java @@ -29,25 +29,16 @@ public class Banner extends BaseEntity { @Column(name = "priority") private Integer priority; - @Column(name = "is_post", nullable = false) - private Boolean isPost; - - public void changeIsPost() { - this.isPost = !this.isPost; - } - public void update(AdminBannerRequestDto request, String file) { this.bannerImage = file; this.name = request.name(); this.priority = request.priority(); - this.isPost = request.isPost(); } @Builder - public Banner(String bannerImage, String name, Integer priority, Boolean isPost) { + public Banner(String bannerImage, String name, Integer priority) { this.bannerImage = bannerImage; this.name = name; this.priority = priority; - this.isPost = isPost; } } diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/banner/service/BannerService.java b/src/main/java/angel_bridge/angel_bridge_server/domain/banner/service/BannerService.java index f2a1a6c..7889e9d 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/banner/service/BannerService.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/banner/service/BannerService.java @@ -80,18 +80,6 @@ public AdminBannerResponseDto updateBanner(AdminBannerRequestDto request, Multip return AdminBannerResponseDto.from(updateBanner); } - // [PATCH] 어드민 배너 게시 여부 변경 - @Transactional - public AdminBannerResponseDto changeIsPost(Long bannerId) { - - Banner banner = findBannerById(bannerId); - - banner.changeIsPost(); - Banner updateBanner = bannerRepository.save(banner); - - return AdminBannerResponseDto.from(updateBanner); - } - // [DELETE] 어드민 배너 삭제 @Transactional public void deleteBanner(Long bannerId) { diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/repository/BannerRepository.java b/src/main/java/angel_bridge/angel_bridge_server/global/repository/BannerRepository.java index bf00fa0..8ad8b00 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/repository/BannerRepository.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/repository/BannerRepository.java @@ -11,7 +11,7 @@ public interface BannerRepository extends JpaRepository { Optional findByIdAndDeletedAtIsNull(Long bannerId); - @Query("SELECT b FROM Banner b WHERE b.deletedAt IS NULL AND b.isPost = true ORDER BY b.priority ASC") + @Query("SELECT b FROM Banner b WHERE b.deletedAt IS NULL ORDER BY b.priority ASC") List findAllActiveBannersSortedByPriority(); Optional findByPriorityAndDeletedAtIsNull(int priority); From 63a0dc1f66d235902ac7eaa2099e25cc01fb078c Mon Sep 17 00:00:00 2001 From: choiseoji Date: Sat, 18 Jan 2025 11:17:55 +0900 Subject: [PATCH 03/31] =?UTF-8?q?[#47]=20feat:=20=EC=88=98=EA=B0=95=20?= =?UTF-8?q?=EB=82=B4=EC=97=AD=20=EB=82=B4=EB=A6=BC=EC=B0=A8=EC=88=9C=20?= =?UTF-8?q?=EC=A0=95=EB=A0=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/enrollment/service/EnrollmentService.java | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/enrollment/service/EnrollmentService.java b/src/main/java/angel_bridge/angel_bridge_server/domain/enrollment/service/EnrollmentService.java index 5cbf7bd..cc9424c 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/enrollment/service/EnrollmentService.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/enrollment/service/EnrollmentService.java @@ -10,10 +10,7 @@ import angel_bridge.angel_bridge_server.global.repository.MemberRepository; import angel_bridge.angel_bridge_server.global.s3.service.ImageService; import lombok.RequiredArgsConstructor; -import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageImpl; -import org.springframework.data.domain.PageRequest; -import org.springframework.data.domain.Pageable; +import org.springframework.data.domain.*; import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; @@ -51,7 +48,7 @@ public PagedResponseDto getInProgressProgram(int page, Lo throw new ApplicationException(BAD_REQUEST_ERROR); } - Pageable pageable = PageRequest.of(page - 1, 4); + Pageable pageable = PageRequest.of(page - 1, 4, Sort.by(Sort.Direction.DESC, "createdAt")); Page enrollmentPage = enrollmentRepository.findByMemberAndEnrollmentStatusAndDeletedAtIsNull(member, EnrollmentStatus.IN_PROGRESS, pageable); @@ -75,7 +72,7 @@ public PagedResponseDto getScheduledProgram(int page, Lon throw new ApplicationException(BAD_REQUEST_ERROR); } - Pageable pageable = PageRequest.of(page - 1, 4); + Pageable pageable = PageRequest.of(page - 1, 4, Sort.by(Sort.Direction.DESC, "createdAt")); Page enrollmentPage = enrollmentRepository.findByMemberAndEnrollmentStatusAndDeletedAtIsNull(member, EnrollmentStatus.SCHEDULED, pageable); @@ -99,7 +96,7 @@ public PagedResponseDto getCompletedProgram(int page, Lon throw new ApplicationException(BAD_REQUEST_ERROR); } - Pageable pageable = PageRequest.of(page - 1, 4); + Pageable pageable = PageRequest.of(page - 1, 4, Sort.by(Sort.Direction.DESC, "createdAt")); Page enrollmentPage = enrollmentRepository.findByMemberAndEnrollmentStatusAndDeletedAtIsNull(member, EnrollmentStatus.COMPLETED, pageable); From 0657b93fe2e3b90606d3067351558e1ded459b5f Mon Sep 17 00:00:00 2001 From: Hanseul Lee Date: Sat, 18 Jan 2025 11:44:17 +0900 Subject: [PATCH 04/31] =?UTF-8?q?[#46]=20fix:=20=EC=B9=B4=EC=B9=B4?= =?UTF-8?q?=EC=98=A4=20redirect-uri=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index ca8a1ea..194a81d 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -39,7 +39,7 @@ spring: client: registration: kakao: - redirect-uri: http://3.39.14.152:8080/login/oauth2/code/kakao + redirect-uri: https://api.angelbridge.site/login/oauth2/code/kakao server: port: 8080 @@ -58,7 +58,7 @@ spring: client: registration: kakao: - redirect-uri: http://3.39.14.152:8081/login/oauth2/code/kakao + redirect-uri: https://api.angelbridge.site/login/oauth2/code/kakao server: port: 8081 From 1a31bc4c827657f2ce393efaf2bacaa26f34d771 Mon Sep 17 00:00:00 2001 From: Hanseul Lee <138705592+sseuldev@users.noreply.github.com> Date: Sat, 18 Jan 2025 13:47:31 +0900 Subject: [PATCH 05/31] =?UTF-8?q?feat:=20cors=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../angel_bridge_server/global/config/SecurityConfig.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/config/SecurityConfig.java b/src/main/java/angel_bridge/angel_bridge_server/global/config/SecurityConfig.java index d743afb..36c92e1 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/config/SecurityConfig.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/config/SecurityConfig.java @@ -50,7 +50,8 @@ public CorsConfiguration getCorsConfiguration(HttpServletRequest request) { "http://localhost:8080", "http://localhost:8081", "http://3.39.14.152:8080", - "http://3.39.14.152:8081" + "http://3.39.14.152:8081", + "https://api.angelbridge.site" )); configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS")); From 397b874eb8ed2f4593c59758d7f4a22f79c38b66 Mon Sep 17 00:00:00 2001 From: Hanseul Lee Date: Sat, 18 Jan 2025 14:29:20 +0900 Subject: [PATCH 06/31] =?UTF-8?q?[#46]=20chore:=20cookie=20https=20?= =?UTF-8?q?=ED=97=88=EC=9A=A9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../angel_bridge_server/domain/member/service/AuthService.java | 2 +- .../global/oauth2/CustomSuccessHandler.java | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/member/service/AuthService.java b/src/main/java/angel_bridge/angel_bridge_server/domain/member/service/AuthService.java index 7420ccf..5cb859f 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/member/service/AuthService.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/member/service/AuthService.java @@ -105,7 +105,7 @@ private Cookie createCookie(String key, String value) { cookie.setMaxAge(60 * 60 * 24 * 14); cookie.setHttpOnly(true); cookie.setPath("/"); - // cookie.setSecure(true); + cookie.setSecure(true); return cookie; } diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java b/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java index ce008e5..823964b 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java @@ -73,8 +73,7 @@ private Cookie createCookie(String key, String value) { Cookie cookie = new Cookie(key, value); cookie.setMaxAge(60 * 60 * 24 * 14); - // TODO: https로 배포 시 추가 예정 - //cookie.setSecure(true); // https 통신에서만 가능하게 함 + cookie.setSecure(true); // https 통신에서만 가능하게 함 cookie.setPath("/"); cookie.setHttpOnly(true); From a6b4d9c4f0d2d761d50e0b313d4d64cfef704474 Mon Sep 17 00:00:00 2001 From: Hanseul Lee <138705592+sseuldev@users.noreply.github.com> Date: Sat, 18 Jan 2025 15:19:09 +0900 Subject: [PATCH 07/31] =?UTF-8?q?feat:=20=ED=94=84=EB=A1=A0=ED=8A=B8=20cor?= =?UTF-8?q?s=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../angel_bridge_server/global/config/SecurityConfig.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/config/SecurityConfig.java b/src/main/java/angel_bridge/angel_bridge_server/global/config/SecurityConfig.java index 36c92e1..5d73005 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/config/SecurityConfig.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/config/SecurityConfig.java @@ -51,7 +51,9 @@ public CorsConfiguration getCorsConfiguration(HttpServletRequest request) { "http://localhost:8081", "http://3.39.14.152:8080", "http://3.39.14.152:8081", - "https://api.angelbridge.site" + "https://api.angelbridge.site", + "https://www.angelbridge.site", + "https://angelbridge.site" )); configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS")); From c86a411e2d487dfe872536be502d9de2020d5167 Mon Sep 17 00:00:00 2001 From: choiseoji Date: Sat, 18 Jan 2025 15:51:53 +0900 Subject: [PATCH 08/31] =?UTF-8?q?[#53]=20feat:=20=EC=9E=84=EC=8B=9C=20?= =?UTF-8?q?=EA=B2=B0=EC=A0=9C=20=EC=A0=95=EB=B3=B4=20=EC=A0=80=EC=9E=A5?= =?UTF-8?q?=ED=95=A0=20dto=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/payment/dto/request/SaveAmountRequestDto.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 src/main/java/angel_bridge/angel_bridge_server/domain/payment/dto/request/SaveAmountRequestDto.java diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/payment/dto/request/SaveAmountRequestDto.java b/src/main/java/angel_bridge/angel_bridge_server/domain/payment/dto/request/SaveAmountRequestDto.java new file mode 100644 index 0000000..deceae9 --- /dev/null +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/payment/dto/request/SaveAmountRequestDto.java @@ -0,0 +1,8 @@ +package angel_bridge.angel_bridge_server.domain.payment.dto.request; + +public record SaveAmountRequestDto( + + String orderId, + Long amount +) { +} From f42e9068fd8a98230e7ab4cd45fe022d908e1f52 Mon Sep 17 00:00:00 2001 From: choiseoji Date: Sat, 18 Jan 2025 15:52:07 +0900 Subject: [PATCH 09/31] =?UTF-8?q?[#53]=20feat:=20=EA=B2=B0=EC=A0=9C=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EA=B2=80=EC=A6=9D=20=EC=84=9C=EB=B9=84?= =?UTF-8?q?=EC=8A=A4=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/payment/service/PaymentService.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/payment/service/PaymentService.java b/src/main/java/angel_bridge/angel_bridge_server/domain/payment/service/PaymentService.java index c4785c4..ca5eb5e 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/payment/service/PaymentService.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/payment/service/PaymentService.java @@ -5,6 +5,7 @@ import angel_bridge.angel_bridge_server.domain.enrollment.entity.EnrollmentStatus; import angel_bridge.angel_bridge_server.domain.member.entity.Member; import angel_bridge.angel_bridge_server.domain.payment.dto.request.ConfirmPaymentRequestDto; +import angel_bridge.angel_bridge_server.domain.payment.dto.request.SaveAmountRequestDto; import angel_bridge.angel_bridge_server.domain.payment.dto.response.*; import angel_bridge.angel_bridge_server.domain.payment.entity.TossPayment; import angel_bridge.angel_bridge_server.global.common.response.PagedResponseDto; @@ -15,6 +16,7 @@ import angel_bridge.angel_bridge_server.global.repository.TossPaymentRepository; import angel_bridge.angel_bridge_server.global.s3.service.ImageService; import com.fasterxml.jackson.databind.ObjectMapper; +import jakarta.servlet.http.HttpSession; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.PageRequest; @@ -55,6 +57,17 @@ public PaymentService(WebClient.Builder webClientBuilder, this.imageService = imageService; } + // [GET] 결제 정보 검증 + public void verifyAmount(HttpSession session, SaveAmountRequestDto saveAmountRequestDto) { + + String amount = (String) session.getAttribute(saveAmountRequestDto.orderId()); + if(amount == null || !amount.equals(saveAmountRequestDto.amount())) + throw new ApplicationException(INVALID_PAYMENT_DATA); + + // 검증 되었으면 기존 검증 정보 삭제 + session.removeAttribute(saveAmountRequestDto.orderId()); + } + // [POST] 결제 취소 @Transactional public void cancelPayment(CancelPaymentRequestDto cancelPaymentRequestDto, Long enrollmentId) throws Exception { From dee0e81a6e749f96e424489a9dd315ca0f3a2ec4 Mon Sep 17 00:00:00 2001 From: choiseoji Date: Sat, 18 Jan 2025 15:52:24 +0900 Subject: [PATCH 10/31] =?UTF-8?q?[#53]=20feat:=20=EA=B2=B0=EC=A0=9C=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=A0=80=EC=9E=A5,=20=EA=B2=80=EC=A6=9D?= =?UTF-8?q?=20=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../payment/controller/PaymentController.java | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/payment/controller/PaymentController.java b/src/main/java/angel_bridge/angel_bridge_server/domain/payment/controller/PaymentController.java index ad64b1d..956f96b 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/payment/controller/PaymentController.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/payment/controller/PaymentController.java @@ -1,6 +1,7 @@ package angel_bridge.angel_bridge_server.domain.payment.controller; import angel_bridge.angel_bridge_server.domain.payment.dto.request.ConfirmPaymentRequestDto; +import angel_bridge.angel_bridge_server.domain.payment.dto.request.SaveAmountRequestDto; import angel_bridge.angel_bridge_server.domain.payment.dto.response.CancelPaymentRequestDto; import angel_bridge.angel_bridge_server.domain.payment.dto.response.PaymentResponseDto; import angel_bridge.angel_bridge_server.domain.payment.service.PaymentService; @@ -9,6 +10,7 @@ import angel_bridge.angel_bridge_server.global.oauth2.dto.CustomOAuth2User; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.tags.Tag; +import jakarta.servlet.http.HttpSession; import lombok.AllArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.web.bind.annotation.*; @@ -21,6 +23,22 @@ public class PaymentController { private final PaymentService paymentService; + @Operation(summary = "결제 정보 저장", description = "결제 정보(orderId, amount)를 세션에 임시 저장하는 API") + @PostMapping("/saveAmount") + public CommonResponse saveAmount(HttpSession session, SaveAmountRequestDto saveAmountRequestDto) { + + session.setAttribute(saveAmountRequestDto.orderId(), saveAmountRequestDto.amount()); + return new CommonResponse<>("결제 정보 저장을 완료했습니다."); + } + + @Operation(summary = "결제 정보 검증", description = "결제 정보(orderId, amount)를 검증하는 API") + @GetMapping ("/verifyAmount") + public CommonResponse verifyAmount(HttpSession session, SaveAmountRequestDto saveAmountRequestDto) { + + paymentService.verifyAmount(session, saveAmountRequestDto); + return new CommonResponse<>("결제 정보 검증을 완료했습니다."); + } + @Operation(summary = "결제 승인", description = "결제 승인 API") @PostMapping("/confirm/{educationId}") public CommonResponse confirmPayment( From 64e40e0f74a3b82cdb6310a81d76c72e94332014 Mon Sep 17 00:00:00 2001 From: choiseoji Date: Sat, 18 Jan 2025 15:52:48 +0900 Subject: [PATCH 11/31] =?UTF-8?q?[#53]=20feat:=20=EC=9C=A0=ED=9A=A8?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EC=9D=80=20=EA=B2=B0=EC=A0=9C=20?= =?UTF-8?q?Exception=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../angel_bridge_server/global/exception/ExceptionCode.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/exception/ExceptionCode.java b/src/main/java/angel_bridge/angel_bridge_server/global/exception/ExceptionCode.java index 861ff90..1b33bb5 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/exception/ExceptionCode.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/exception/ExceptionCode.java @@ -57,7 +57,8 @@ public enum ExceptionCode { // 6000: payment Error PAYMENT_API_FAIL(HttpStatus.BAD_REQUEST, 6001, "결제 api 호출에 실패하였습니다."), NOT_FOUND_PAYMENT_METHOD(HttpStatus.NOT_FOUND, 6002, "결제 방법이 유효하지 않습니다."), - NOT_FOUND_PAYMENT_STATUS(HttpStatus.NOT_FOUND, 6003, "결제 상태가 유효하지 않습니다."); + NOT_FOUND_PAYMENT_STATUS(HttpStatus.NOT_FOUND, 6003, "결제 상태가 유효하지 않습니다."), + INVALID_PAYMENT_DATA(HttpStatus.BAD_REQUEST, 6004, "결제 정보가 유효하지 않습니다."); //7000: [임의] Error From e0ef6f961de2a329bff21d7af02a62fda13056b4 Mon Sep 17 00:00:00 2001 From: choiseoji Date: Sat, 18 Jan 2025 15:56:28 +0900 Subject: [PATCH 12/31] =?UTF-8?q?[#53]=20fix=20:=20=EB=A6=AC=EB=8B=A4?= =?UTF-8?q?=EC=9D=B4=EB=A0=89=ED=8A=B8=20=EC=A3=BC=EC=86=8C=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../angel_bridge_server/global/oauth2/CustomSuccessHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java b/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java index 823964b..5bde610 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java @@ -64,7 +64,7 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo // TODO: 프론트 배포 시 수정 예정 // 로그인 성공 시 이동 경로 지정 - response.sendRedirect("http://3.39.14.152/env"); + response.sendRedirect("https://www.angelbridge.site"); } // 프론트에 전달할 방식 : 쿠키 방식 From 5544bc207f626bd68259b56f4d3685ffdb3258ca Mon Sep 17 00:00:00 2001 From: choiseoji Date: Wed, 22 Jan 2025 14:15:51 +0900 Subject: [PATCH 13/31] =?UTF-8?q?[#55]=20feat:=20max=5Fpost=5Fsize=20?= =?UTF-8?q?=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/main/resources/application.yml | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/src/main/resources/application.yml b/src/main/resources/application.yml index 194a81d..abf5469 100644 --- a/src/main/resources/application.yml +++ b/src/main/resources/application.yml @@ -77,7 +77,7 @@ spring: fail-on-empty-beans: false servlet: multipart: - max-file-size: 5MB + max-file-size: 10MB max-request-size: 10MB security: @@ -99,6 +99,10 @@ spring: userInfoUri: https://kapi.kakao.com/v2/user/me userNameAttribute: id +server: + tomcat: + max-http-form-post-size: 10MB + logging.level: org.hibernate.SQL: debug org.springframework.web: debug From 6b43505bd9b4a4c7c0397644f9f46c086fed5e49 Mon Sep 17 00:00:00 2001 From: choiseoji Date: Wed, 22 Jan 2025 15:06:16 +0900 Subject: [PATCH 14/31] =?UTF-8?q?[#52]=20feat:=20recruitment=20=EC=83=81?= =?UTF-8?q?=ED=83=9C=EB=A5=BC=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=ED=95=98=EB=8A=94=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/education/entity/Education.java | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/education/entity/Education.java b/src/main/java/angel_bridge/angel_bridge_server/domain/education/entity/Education.java index 5fbe3b1..41c41a5 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/education/entity/Education.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/education/entity/Education.java @@ -59,6 +59,10 @@ public class Education extends BaseEntity { @Column(name = "recruitment_status") private RecruitmentStatus recruitmentStatus; + public void setRecruitmentStatus(RecruitmentStatus status) { + this.recruitmentStatus = status; + } + public void update(AdminEducationRequestDto request, String preFile, String detailFile) { this.educationPreImage = preFile; this.educationDetailImage = detailFile; From d6ffe4cf82add2407ee1bd8745d1c775f07cd786 Mon Sep 17 00:00:00 2001 From: choiseoji Date: Wed, 22 Jan 2025 15:06:40 +0900 Subject: [PATCH 15/31] =?UTF-8?q?[#52]=20feat:=20=EC=9E=90=EC=A0=95?= =?UTF-8?q?=EB=A7=88=EB=8B=A4=20recruitment=20=EC=83=81=ED=83=9C=20?= =?UTF-8?q?=EC=B2=B4=ED=81=AC=ED=95=B4=EC=84=9C=20=EC=97=85=EB=8D=B0?= =?UTF-8?q?=EC=9D=B4=ED=8A=B8?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../education/service/EducationService.java | 22 +++++++++++++++++++ .../repository/EducationRepository.java | 5 +++++ 2 files changed, 27 insertions(+) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java b/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java index cf6d0ce..7bd704e 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java @@ -13,11 +13,13 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.*; +가import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; import java.io.IOException; +import java.time.LocalDate; import java.util.List; import java.util.stream.Collectors; @@ -32,6 +34,26 @@ public class EducationService { private final ImageService imageService; private final EducationRepository educationRepository; + // 자정에 recruitment Status 업데이트 + @Transactional + @Scheduled(cron = "0 0 0 * * ?") + public void updateRecruitmentStatus() { + + LocalDate today = LocalDate.now(); + + // 모집 예정 상태 업데이트 + educationRepository.findAllByRecruitmentStartDateAfter(today) + .forEach(education -> education.setRecruitmentStatus(RecruitmentStatus.UPCOMING)); + + // 모집 중 상태 업데이트 + educationRepository.findAllByRecruitmentStartDateBeforeAndRecruitmentEndDateAfter(today, today) + .forEach(education -> education.setRecruitmentStatus(RecruitmentStatus.ONGOING)); + + // 모집 종료 상태 업데이트 + educationRepository.findAllByRecruitmentEndDateBefore(today) + .forEach(education -> education.setRecruitmentStatus(RecruitmentStatus.CLOSED)); + } + // [GET] 일반 사용자 추천 교육 프로그램 조회 public List getRecommendationProgram() { diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/repository/EducationRepository.java b/src/main/java/angel_bridge/angel_bridge_server/global/repository/EducationRepository.java index 755fcc4..ae58749 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/repository/EducationRepository.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/repository/EducationRepository.java @@ -8,11 +8,16 @@ import org.springframework.data.domain.Pageable; import org.springframework.data.repository.query.Param; +import java.time.LocalDate; import java.util.List; import java.util.Optional; public interface EducationRepository extends JpaRepository { + List findAllByRecruitmentStartDateAfter(LocalDate date); + List findAllByRecruitmentStartDateBeforeAndRecruitmentEndDateAfter(LocalDate startDate, LocalDate endDate); + List findAllByRecruitmentEndDateBefore(LocalDate date); + @Query("SELECT e FROM Education e WHERE e.deletedAt IS NULL") Page findAllActive(Pageable pageable); From d98fd4599316a55f80b7e6c2a97b083dc9c0e708 Mon Sep 17 00:00:00 2001 From: choiseoji Date: Wed, 22 Jan 2025 15:07:45 +0900 Subject: [PATCH 16/31] =?UTF-8?q?[#52]=20delete=20:=20=EC=93=B8=EB=8D=B0?= =?UTF-8?q?=EC=97=86=EB=8A=94=20=EC=BD=94=EB=93=9C=20=EC=82=AD=EC=A0=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/education/service/EducationService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java b/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java index 7bd704e..b16dd2a 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java @@ -13,7 +13,7 @@ import lombok.RequiredArgsConstructor; import lombok.extern.slf4j.Slf4j; import org.springframework.data.domain.*; -가import org.springframework.scheduling.annotation.Scheduled; +import org.springframework.scheduling.annotation.Scheduled; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; import org.springframework.web.multipart.MultipartFile; From e99c77afc09c5ba74d850b2030437aa598c946f5 Mon Sep 17 00:00:00 2001 From: choiseoji Date: Wed, 22 Jan 2025 17:01:15 +0900 Subject: [PATCH 17/31] =?UTF-8?q?fix=20:=20=ED=99=95=EC=9E=A5=EC=9E=90=20?= =?UTF-8?q?=EC=97=86=EC=96=B4=EB=8F=84=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20?= =?UTF-8?q?=EC=97=85=EB=A1=9C=EB=93=9C=20=EA=B0=80=EB=8A=A5=ED=95=98?= =?UTF-8?q?=EA=B2=8C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../angel_bridge_server/global/s3/service/ImageService.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/s3/service/ImageService.java b/src/main/java/angel_bridge/angel_bridge_server/global/s3/service/ImageService.java index d5bea34..298f4fe 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/s3/service/ImageService.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/s3/service/ImageService.java @@ -32,7 +32,8 @@ public class ImageService { */ private String changedImageName(String originName) { String random = UUID.randomUUID().toString(); - String extension = originName.substring(originName.lastIndexOf(".")); + int dotIndex = originName.lastIndexOf("."); + String extension = dotIndex == -1 ? "" : originName.substring(dotIndex); return random + extension; } From 64bba73e2535e7217a642bb666893164c3a305a9 Mon Sep 17 00:00:00 2001 From: Hanseul Lee Date: Wed, 22 Jan 2025 18:38:31 +0900 Subject: [PATCH 18/31] =?UTF-8?q?[#46]=20feat:=20checkToken=20API=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../member/controller/AuthController.java | 28 ++++++++++++++++--- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/member/controller/AuthController.java b/src/main/java/angel_bridge/angel_bridge_server/domain/member/controller/AuthController.java index 2b258fd..1e3d2fc 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/member/controller/AuthController.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/member/controller/AuthController.java @@ -13,10 +13,11 @@ import jakarta.validation.Valid; import lombok.RequiredArgsConstructor; import org.springframework.security.core.annotation.AuthenticationPrincipal; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.bind.annotation.*; + +import java.util.Arrays; +import java.util.Optional; +import java.util.stream.Stream; @RestController @RequestMapping("/api/v1/auth") @@ -41,6 +42,25 @@ public CommonResponse reissue(HttpServletRequest request, HttpServletRespo return new CommonResponse<>("토큰 재발급을 성공하였습니다"); } + @GetMapping("/checkToken") + public CommonResponse checkToken(HttpServletRequest request) { + + String refreshToken = Optional.ofNullable(request.getCookies()) + .map(Arrays::stream) // 쿠키 배열을 스트림으로 변환 + .orElseGet(Stream::empty) // null인 경우 빈 스트림 반환 + .filter(cookie -> "refreshToken".equals(cookie.getName())) // refreshToken 이름 필터링 + .map(Cookie::getValue) // refreshToken 값 추출 + .findFirst() // 첫 번째 값 반환 + .orElse(null); // 없으면 null 반환 + + // refreshToken 값 반환 + if (refreshToken != null) { + return new CommonResponse<>(refreshToken, "Refresh token found"); + } else { + return new CommonResponse<>(null, "No refresh token found"); + } + } + @PostMapping("/signup") @Operation(summary = "회원가입 정보 입력", description = "회원가입 시 초기 정보 입력 받는 API") public CommonResponse saveMemberInfo(@AuthenticationPrincipal CustomOAuth2User userDetails, @Valid @RequestBody AuthRequestDto request) { From 6404946ac63eb5b527840bdeb38fb865a933254f Mon Sep 17 00:00:00 2001 From: Hanseul Lee Date: Wed, 22 Jan 2025 23:04:09 +0900 Subject: [PATCH 19/31] =?UTF-8?q?[#46]=20refactor:=20=ED=86=A0=ED=81=B0=20?= =?UTF-8?q?=EC=9E=AC=EB=B0=9C=EA=B8=89=20=EB=A1=9C=EC=A7=81=20=EC=88=98?= =?UTF-8?q?=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/member/controller/AuthController.java | 6 ++++-- .../domain/member/dto/request/TokenReissueRequestDto.java | 6 ++++++ 2 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 src/main/java/angel_bridge/angel_bridge_server/domain/member/dto/request/TokenReissueRequestDto.java diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/member/controller/AuthController.java b/src/main/java/angel_bridge/angel_bridge_server/domain/member/controller/AuthController.java index 1e3d2fc..1f53210 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/member/controller/AuthController.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/member/controller/AuthController.java @@ -1,6 +1,7 @@ package angel_bridge.angel_bridge_server.domain.member.controller; import angel_bridge.angel_bridge_server.domain.member.dto.request.AuthRequestDto; +import angel_bridge.angel_bridge_server.domain.member.dto.request.TokenReissueRequestDto; import angel_bridge.angel_bridge_server.domain.member.dto.response.MemberResponseDto; import angel_bridge.angel_bridge_server.domain.member.service.AuthService; import angel_bridge.angel_bridge_server.global.common.response.CommonResponse; @@ -29,9 +30,10 @@ public class AuthController { @PostMapping("/reissue") @Operation(summary = "토큰 재발급", description = "토큰 재발급 요청 API") - public CommonResponse reissue(HttpServletRequest request, HttpServletResponse response) { + public CommonResponse reissue(@RequestBody TokenReissueRequestDto requestDto, HttpServletResponse response) { - String refreshToken = authService.extractRefreshToken(request); +// String refreshToken = authService.extractRefreshToken(request); + String refreshToken = requestDto.refreshToken(); authService.validateRefreshToken(refreshToken); String newAccessToken = authService.reissueAccessToken(refreshToken); diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/member/dto/request/TokenReissueRequestDto.java b/src/main/java/angel_bridge/angel_bridge_server/domain/member/dto/request/TokenReissueRequestDto.java new file mode 100644 index 0000000..e1f0f8f --- /dev/null +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/member/dto/request/TokenReissueRequestDto.java @@ -0,0 +1,6 @@ +package angel_bridge.angel_bridge_server.domain.member.dto.request; + +public record TokenReissueRequestDto( + String refreshToken +) { +} From e71e75ac50178bba294225758371ea460162caff Mon Sep 17 00:00:00 2001 From: choiseoji Date: Thu, 23 Jan 2025 14:39:11 +0900 Subject: [PATCH 20/31] =?UTF-8?q?fix:=20=EA=B2=B0=EC=A0=9C=20=EC=A0=95?= =?UTF-8?q?=EB=B3=B4=20=EC=A0=80=EC=9E=A5,=20=EA=B2=80=EC=A6=9D=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/payment/controller/PaymentController.java | 8 ++++---- .../domain/payment/service/PaymentService.java | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/payment/controller/PaymentController.java b/src/main/java/angel_bridge/angel_bridge_server/domain/payment/controller/PaymentController.java index 956f96b..9e4f971 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/payment/controller/PaymentController.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/payment/controller/PaymentController.java @@ -25,15 +25,15 @@ public class PaymentController { @Operation(summary = "결제 정보 저장", description = "결제 정보(orderId, amount)를 세션에 임시 저장하는 API") @PostMapping("/saveAmount") - public CommonResponse saveAmount(HttpSession session, SaveAmountRequestDto saveAmountRequestDto) { + public CommonResponse saveAmount(HttpSession session, @RequestBody SaveAmountRequestDto saveAmountRequestDto) { - session.setAttribute(saveAmountRequestDto.orderId(), saveAmountRequestDto.amount()); + session.setAttribute(saveAmountRequestDto.orderId(), String.valueOf(saveAmountRequestDto.amount())); return new CommonResponse<>("결제 정보 저장을 완료했습니다."); } @Operation(summary = "결제 정보 검증", description = "결제 정보(orderId, amount)를 검증하는 API") - @GetMapping ("/verifyAmount") - public CommonResponse verifyAmount(HttpSession session, SaveAmountRequestDto saveAmountRequestDto) { + @PostMapping ("/verifyAmount") + public CommonResponse verifyAmount(HttpSession session, @RequestBody SaveAmountRequestDto saveAmountRequestDto) { paymentService.verifyAmount(session, saveAmountRequestDto); return new CommonResponse<>("결제 정보 검증을 완료했습니다."); diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/payment/service/PaymentService.java b/src/main/java/angel_bridge/angel_bridge_server/domain/payment/service/PaymentService.java index ca5eb5e..5d79ca0 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/payment/service/PaymentService.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/payment/service/PaymentService.java @@ -61,7 +61,7 @@ public PaymentService(WebClient.Builder webClientBuilder, public void verifyAmount(HttpSession session, SaveAmountRequestDto saveAmountRequestDto) { String amount = (String) session.getAttribute(saveAmountRequestDto.orderId()); - if(amount == null || !amount.equals(saveAmountRequestDto.amount())) + if(amount == null || !amount.equals(String.valueOf(saveAmountRequestDto.amount()))) throw new ApplicationException(INVALID_PAYMENT_DATA); // 검증 되었으면 기존 검증 정보 삭제 From ce17ca1910476c77bb0f51ba6f03e9a8492a8681 Mon Sep 17 00:00:00 2001 From: choiseoji Date: Sat, 25 Jan 2025 17:51:44 +0900 Subject: [PATCH 21/31] =?UTF-8?q?fix:=20Enrollment=EC=97=90=20soft=20delet?= =?UTF-8?q?e=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/enrollment/entity/Enrollment.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/enrollment/entity/Enrollment.java b/src/main/java/angel_bridge/angel_bridge_server/domain/enrollment/entity/Enrollment.java index d0bbf4f..2f97c0e 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/enrollment/entity/Enrollment.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/enrollment/entity/Enrollment.java @@ -8,10 +8,12 @@ import lombok.Builder; import lombok.Getter; import lombok.NoArgsConstructor; +import org.hibernate.annotations.SQLDelete; @Entity @Getter @NoArgsConstructor(access = AccessLevel.PROTECTED) +@SQLDelete(sql = "UPDATE Enrollment SET deleted_at = NOW() where enrollment_id = ?") public class Enrollment extends BaseEntity { @Id From 0f7c52eb30f1aaf228be4e36cb0ef98af439bf45 Mon Sep 17 00:00:00 2001 From: choiseoji Date: Sat, 25 Jan 2025 20:21:20 +0900 Subject: [PATCH 22/31] =?UTF-8?q?feat:=20Access-Control-Expose-Headers=20?= =?UTF-8?q?=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../angel_bridge_server/global/oauth2/CustomSuccessHandler.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java b/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java index 5bde610..0c32844 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java @@ -60,6 +60,7 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo response.setStatus(HttpStatus.OK.value()); response.setContentType("application/json"); response.setCharacterEncoding("UTF-8"); + response.setHeader("Access-Control-Expose-Headers", "Authorization"); response.getWriter().write("{\"result\": \"로그인이 성공적으로 완료되었습니다.\"}"); // TODO: 프론트 배포 시 수정 예정 From 646d80bd84eb1cd4cc6f6e77fb8eeec1ed75a0be Mon Sep 17 00:00:00 2001 From: Hanseul Lee <138705592+sseuldev@users.noreply.github.com> Date: Mon, 27 Jan 2025 22:46:34 +0900 Subject: [PATCH 23/31] =?UTF-8?q?chore:=20qa=EC=9A=A9=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20cors=20=EC=B6=94=EA=B0=801?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../angel_bridge_server/global/config/SecurityConfig.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/config/SecurityConfig.java b/src/main/java/angel_bridge/angel_bridge_server/global/config/SecurityConfig.java index 5d73005..fe7230a 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/config/SecurityConfig.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/config/SecurityConfig.java @@ -53,7 +53,8 @@ public CorsConfiguration getCorsConfiguration(HttpServletRequest request) { "http://3.39.14.152:8081", "https://api.angelbridge.site", "https://www.angelbridge.site", - "https://angelbridge.site" + "https://angelbridge.site", + "https://abc.angelbridge.site" )); configuration.setAllowedMethods(Arrays.asList("GET", "POST", "PUT", "DELETE", "OPTIONS")); From 1f3c2ae1c0310df42017712183b2cbe82c8c26fd Mon Sep 17 00:00:00 2001 From: Hanseul Lee <138705592+sseuldev@users.noreply.github.com> Date: Mon, 27 Jan 2025 23:04:45 +0900 Subject: [PATCH 24/31] =?UTF-8?q?test:=20qa=EC=9A=A9=20=EC=B9=B4=EC=B9=B4?= =?UTF-8?q?=EC=98=A4=20=EC=99=84=EB=A3=8C=20=EC=A3=BC=EC=86=8C=20=EC=9E=84?= =?UTF-8?q?=EC=8B=9C=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../angel_bridge_server/global/oauth2/CustomSuccessHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java b/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java index 0c32844..e1f45b9 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java @@ -65,7 +65,7 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo // TODO: 프론트 배포 시 수정 예정 // 로그인 성공 시 이동 경로 지정 - response.sendRedirect("https://www.angelbridge.site"); + response.sendRedirect("https://abc.angelbridge.site"); } // 프론트에 전달할 방식 : 쿠키 방식 From 48f44186670b6b11ea07ba4466bcfc355cc8005a Mon Sep 17 00:00:00 2001 From: Hanseul Lee <138705592+sseuldev@users.noreply.github.com> Date: Tue, 28 Jan 2025 00:25:48 +0900 Subject: [PATCH 25/31] =?UTF-8?q?chore:=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20ht?= =?UTF-8?q?tps=20=EC=84=A4=EC=A0=95=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../angel_bridge_server/global/config/SwaggerConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/config/SwaggerConfig.java b/src/main/java/angel_bridge/angel_bridge_server/global/config/SwaggerConfig.java index 5108d2b..0a072e1 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/config/SwaggerConfig.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/config/SwaggerConfig.java @@ -27,6 +27,7 @@ public OpenAPI openAPI() { return new OpenAPI() .components(components) .info(apiInfo()) + .addServersItem(new Server().url("https://api.angelbridge.site").description("Production server")) .addSecurityItem(securityRequirement); } From 47104b74a729824ad74ebb0c74f3979ad4e1aca7 Mon Sep 17 00:00:00 2001 From: Hanseul Lee <138705592+sseuldev@users.noreply.github.com> Date: Tue, 28 Jan 2025 00:29:03 +0900 Subject: [PATCH 26/31] =?UTF-8?q?chore:=20=EC=8A=A4=EC=9B=A8=EA=B1=B0=20?= =?UTF-8?q?=EC=98=A4=EB=A5=98=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../angel_bridge_server/global/config/SwaggerConfig.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/config/SwaggerConfig.java b/src/main/java/angel_bridge/angel_bridge_server/global/config/SwaggerConfig.java index 0a072e1..27f275f 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/config/SwaggerConfig.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/config/SwaggerConfig.java @@ -5,6 +5,7 @@ import io.swagger.v3.oas.models.info.Info; import io.swagger.v3.oas.models.security.SecurityRequirement; import io.swagger.v3.oas.models.security.SecurityScheme; +import io.swagger.v3.oas.models.servers.Server; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; From c956c6a1f9dd2abe9898ec7184fbab3a4b107dd5 Mon Sep 17 00:00:00 2001 From: Hanseul Lee <138705592+sseuldev@users.noreply.github.com> Date: Tue, 28 Jan 2025 12:00:30 +0900 Subject: [PATCH 27/31] =?UTF-8?q?chore:=20redirect=20=EC=A3=BC=EC=86=8C=20?= =?UTF-8?q?=EC=9B=90=EB=9E=98=EB=8C=80=EB=A1=9C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../angel_bridge_server/global/oauth2/CustomSuccessHandler.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java b/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java index e1f45b9..0c32844 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/oauth2/CustomSuccessHandler.java @@ -65,7 +65,7 @@ public void onAuthenticationSuccess(HttpServletRequest request, HttpServletRespo // TODO: 프론트 배포 시 수정 예정 // 로그인 성공 시 이동 경로 지정 - response.sendRedirect("https://abc.angelbridge.site"); + response.sendRedirect("https://www.angelbridge.site"); } // 프론트에 전달할 방식 : 쿠키 방식 From 336358de5cf4de480278c3442135974f7e2af607 Mon Sep 17 00:00:00 2001 From: Hanseul Lee Date: Tue, 28 Jan 2025 20:37:19 +0900 Subject: [PATCH 28/31] =?UTF-8?q?[#46]=20fix:=20=EC=88=98=EA=B0=95?= =?UTF-8?q?=EC=99=84=EB=A3=8C=20=EB=AF=B8=EC=85=98=EC=88=98=ED=96=89?= =?UTF-8?q?=EB=A5=A0=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assignment/dto/response/AssignmentResponseDto.java | 3 ++- .../domain/assignment/service/AssignmentService.java | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/assignment/dto/response/AssignmentResponseDto.java b/src/main/java/angel_bridge/angel_bridge_server/domain/assignment/dto/response/AssignmentResponseDto.java index 576db72..ea8ecde 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/assignment/dto/response/AssignmentResponseDto.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/assignment/dto/response/AssignmentResponseDto.java @@ -48,10 +48,11 @@ public static AssignmentResponseDto fromOngoing(Assignment assignment, int perfo .build(); } - public static AssignmentResponseDto fromClosed(Education education) { + public static AssignmentResponseDto fromClosed(Education education, int performanceRate) { return AssignmentResponseDto.builder() .educationId(education.getId()) .educationTitle(education.getEducationTitle()) + .performanceRate(performanceRate) .noticeLink(education.getNoticeLink()) .methodLink(education.getMethodLink()) .isFinished(true) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/assignment/service/AssignmentService.java b/src/main/java/angel_bridge/angel_bridge_server/domain/assignment/service/AssignmentService.java index 27e5920..3dde6f3 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/assignment/service/AssignmentService.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/assignment/service/AssignmentService.java @@ -184,12 +184,12 @@ public AssignmentResponseDto getAssignmentBox(Long educationId, Long memberId) { Assignment currentAssignment = assignmentRepository.findCurrentAssignmentByEducationId(educationId, LocalDateTime.now()) .orElse(null); + int performanceRate = calculatePerformanceRate(educationId, memberId); + if (currentAssignment == null) { - return AssignmentResponseDto.fromClosed(education); + return AssignmentResponseDto.fromClosed(education, performanceRate); } - int performanceRate = calculatePerformanceRate(educationId, memberId); - return AssignmentResponseDto.fromOngoing(currentAssignment, performanceRate); } From dfa19d4feeb1fff859bd34eb75a781a4313e392e Mon Sep 17 00:00:00 2001 From: choiseoji Date: Tue, 28 Jan 2025 21:19:52 +0900 Subject: [PATCH 29/31] =?UTF-8?q?[#61]=20fix:=20=EC=A0=84=EC=B2=B4=20?= =?UTF-8?q?=ED=94=84=EB=A1=9C=EA=B7=B8=EB=9E=A8=20=EC=A1=B0=ED=9A=8C?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EA=B5=90=EC=9C=A1=20=EB=A7=88=EA=B0=90?= =?UTF-8?q?=EC=9D=84=20=EC=A0=9C=EC=9D=BC=20=EB=92=A4=EB=A1=9C=20=EB=BA=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../education/service/EducationService.java | 28 +++++++++++++++---- .../repository/EducationRepository.java | 6 ++++ 2 files changed, 28 insertions(+), 6 deletions(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java b/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java index b16dd2a..3a9dc67 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java @@ -20,6 +20,7 @@ import java.io.IOException; import java.time.LocalDate; +import java.util.ArrayList; import java.util.List; import java.util.stream.Collectors; @@ -173,20 +174,35 @@ public PagedResponseDto getAllProgram(int page) { if (page == 0) throw new ApplicationException(BAD_REQUEST_ERROR); - Pageable pageable = PageRequest.of(page - 1, 12, Sort.by(Sort.Direction.ASC, "recruitmentEndDate")); - // 페이지 조회 - Page educationPage = educationRepository.findAllActive(pageable); + // 모집 마감이 아닌 데이터와 모집 마감 데이터 모두 조회 + List activeEducations = educationRepository.findAllActiveAndNotClosed(); + List closedEducations = educationRepository.findAllClosed(); - // Education 객체를 EducationResponseDto로 매핑 - List content = educationPage.getContent().stream() + // 모집 중 데이터와 마감 데이터 병합 + List allEducations = new ArrayList<>(); + allEducations.addAll(activeEducations); + allEducations.addAll(closedEducations); + + // 전체 데이터를 EducationResponseDto로 매핑 + List allContent = allEducations.stream() .map(education -> EducationResponseDto.from( education, imageService.getImageUrl(education.getEducationPreImage()))) .toList(); + // 페이지네이션 처리 + int pageSize = 12; + int start = (page - 1) * pageSize; + int end = Math.min(start + pageSize, allContent.size()); + + if (start >= allContent.size()) + throw new ApplicationException(BAD_REQUEST_ERROR); + + List pagedContent = allContent.subList(start, end); + // PagedResponseDto로 변환하여 반환 return PagedResponseDto.from( - new PageImpl<>(content, pageable, educationPage.getTotalElements()) + new PageImpl<>(pagedContent, PageRequest.of(page - 1, pageSize), allContent.size()) ); } diff --git a/src/main/java/angel_bridge/angel_bridge_server/global/repository/EducationRepository.java b/src/main/java/angel_bridge/angel_bridge_server/global/repository/EducationRepository.java index ae58749..d907367 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/global/repository/EducationRepository.java +++ b/src/main/java/angel_bridge/angel_bridge_server/global/repository/EducationRepository.java @@ -18,6 +18,12 @@ public interface EducationRepository extends JpaRepository { List findAllByRecruitmentStartDateBeforeAndRecruitmentEndDateAfter(LocalDate startDate, LocalDate endDate); List findAllByRecruitmentEndDateBefore(LocalDate date); + @Query("SELECT e FROM Education e WHERE e.deletedAt IS NULL AND e.recruitmentStatus != 'CLOSED'") + List findAllActiveAndNotClosed(); + + @Query("SELECT e FROM Education e WHERE e.deletedAt IS NULL AND e.recruitmentStatus = 'CLOSED'") + List findAllClosed(); + @Query("SELECT e FROM Education e WHERE e.deletedAt IS NULL") Page findAllActive(Pageable pageable); From 2c652fc798cf848fcd7f08401ebfa2107e774ae9 Mon Sep 17 00:00:00 2001 From: Hanseul Lee Date: Wed, 29 Jan 2025 01:09:32 +0900 Subject: [PATCH 30/31] =?UTF-8?q?[#46]=20test:=20=EC=9E=84=EC=8B=9C?= =?UTF-8?q?=EB=A1=9C=20=EC=9D=B4=EB=AF=B8=EC=A7=80=20=EC=A0=80=EC=9E=A5=20?= =?UTF-8?q?=EB=A1=9C=EC=A7=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../domain/education/service/EducationService.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java b/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java index b16dd2a..d19bb12 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/education/service/EducationService.java @@ -125,14 +125,14 @@ public AdminEducationResponseDto updateEducation(AdminEducationRequestDto reques // 기존 이미지 삭제 후 새로운 이미지 저장 if (preImage != null && !preImage.isEmpty()) { if (preFile != null && !preFile.isEmpty()) { - imageService.deleteImage(preFile); +// imageService.deleteImage(preFile); } preFile = imageService.uploadImage(preImage); } if (detailImage != null && !detailImage.isEmpty()) { if (detailFile != null && !detailFile.isEmpty()) { - imageService.deleteImage(detailFile); +// imageService.deleteImage(detailFile); } detailFile = imageService.uploadImage(detailImage); From c5e86d9d7e40d238f415e955779d2742e1ea650e Mon Sep 17 00:00:00 2001 From: choiseoji Date: Wed, 29 Jan 2025 11:52:29 +0900 Subject: [PATCH 31/31] =?UTF-8?q?fix:=20=EA=B0=80=EA=B2=A9=20BigDecimal?= =?UTF-8?q?=EB=A1=9C=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../dto/response/EducationDetailResponseDto.java | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/java/angel_bridge/angel_bridge_server/domain/education/dto/response/EducationDetailResponseDto.java b/src/main/java/angel_bridge/angel_bridge_server/domain/education/dto/response/EducationDetailResponseDto.java index e57da10..2fbeeaf 100644 --- a/src/main/java/angel_bridge/angel_bridge_server/domain/education/dto/response/EducationDetailResponseDto.java +++ b/src/main/java/angel_bridge/angel_bridge_server/domain/education/dto/response/EducationDetailResponseDto.java @@ -4,6 +4,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import lombok.Builder; +import java.math.BigDecimal; import java.time.LocalDate; @Builder @@ -26,8 +27,8 @@ public record EducationDetailResponseDto( @Schema(description = "모집 마감일", example = "2025-01-05") LocalDate recruitmentEndDate, - @Schema(description = "가격", example = "119,000원") - String price, + @Schema(description = "가격", example = "119,000") + BigDecimal price, @Schema(description = "프리뷰 이미지", example = "프리뷰 이미지 url") String preFile, @@ -39,6 +40,9 @@ public record EducationDetailResponseDto( public static EducationDetailResponseDto from(Education education, String preImage, String detailImage) { + String priceString = education.getPrice(); + BigDecimal price = new BigDecimal(priceString.replaceAll("[^0-9]", "")); + return EducationDetailResponseDto.builder() .title(education.getEducationTitle()) .description(education.getEducationDescription()) @@ -46,7 +50,7 @@ public static EducationDetailResponseDto from(Education education, String preIma .educationEndDate(education.getEducationEndDate()) .recruitmentStartDate(education.getRecruitmentStartDate()) .recruitmentEndDate(education.getRecruitmentEndDate()) - .price(education.getPrice()) + .price(price) .preFile(preImage) .detailFile(detailImage) .build();