From fca1a89af07be41eafd1f944f43c1e815df81ac6 Mon Sep 17 00:00:00 2001 From: LimHyunwoo <81962309+imenuuu@users.noreply.github.com> Date: Thu, 30 Nov 2023 17:36:49 +0900 Subject: [PATCH] =?UTF-8?q?:recycle:=20:=20ORDER=20ID=20=EA=B2=B0=EC=A0=9C?= =?UTF-8?q?=20=EC=A0=95=EB=B3=B4=20=EA=B5=AC=ED=95=98=EA=B8=B0=20(#205)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../portone/mapper/PaymentMapperImpl.java | 23 ++++++++++++++++++- .../matchapi/common/security/JwtService.java | 13 +++++++++++ .../matchapi/config/SecurityConfig.java | 2 ++ .../order/converter/OrderConverter.java | 2 +- .../example/matchapi/order/dto/OrderRes.java | 21 +++++++++++++++++ .../order/service/OrderRequestService.java | 6 ++++- .../portone/controller/PaymentController.java | 16 +++++++++++++ .../portone/mapper/PaymentMapper.java | 9 ++++++++ 8 files changed, 89 insertions(+), 3 deletions(-) diff --git a/Match-Api/src/main/generated/com/example/matchapi/portone/mapper/PaymentMapperImpl.java b/Match-Api/src/main/generated/com/example/matchapi/portone/mapper/PaymentMapperImpl.java index dfadc765..b694b345 100644 --- a/Match-Api/src/main/generated/com/example/matchapi/portone/mapper/PaymentMapperImpl.java +++ b/Match-Api/src/main/generated/com/example/matchapi/portone/mapper/PaymentMapperImpl.java @@ -1,16 +1,19 @@ package com.example.matchapi.portone.mapper; +import com.example.matchapi.order.dto.OrderRes; import com.example.matchapi.portone.dto.PaymentCommand; import com.example.matchapi.portone.dto.PaymentReq; +import com.example.matchdomain.donation.entity.enums.RegularStatus; import com.example.matchdomain.project.entity.Project; import com.example.matchdomain.redis.entity.OrderRequest; import com.example.matchdomain.user.entity.User; import com.example.matchinfrastructure.pay.portone.dto.PortOneWebhook; +import java.time.LocalDate; import javax.annotation.processing.Generated; @Generated( value = "org.mapstruct.ap.MappingProcessor", - date = "2023-11-30T16:19:13+0900", + date = "2023-11-30T17:29:40+0900", comments = "version: 1.5.3.Final, compiler: javac, environment: Java 11.0.19 (Oracle Corporation)" ) public class PaymentMapperImpl implements PaymentMapper { @@ -45,4 +48,22 @@ public PaymentCommand.PaymentValidation toCheckValidationCommand(OrderRequest or return paymentValidation.build(); } + + @Override + public OrderRes.PaymentInfoDto toPaymentInfoDto(String name, LocalDate birth, String phone, String usages, RegularStatus regularStatus, String accessToken) { + if ( name == null && birth == null && phone == null && usages == null && regularStatus == null && accessToken == null ) { + return null; + } + + OrderRes.PaymentInfoDto.PaymentInfoDtoBuilder paymentInfoDto = OrderRes.PaymentInfoDto.builder(); + + paymentInfoDto.name( name ); + paymentInfoDto.birth( birth ); + paymentInfoDto.phone( phone ); + paymentInfoDto.usages( usages ); + paymentInfoDto.regularStatus( regularStatus ); + paymentInfoDto.accessToken( accessToken ); + + return paymentInfoDto.build(); + } } diff --git a/Match-Api/src/main/java/com/example/matchapi/common/security/JwtService.java b/Match-Api/src/main/java/com/example/matchapi/common/security/JwtService.java index 29446039..8f8b186b 100644 --- a/Match-Api/src/main/java/com/example/matchapi/common/security/JwtService.java +++ b/Match-Api/src/main/java/com/example/matchapi/common/security/JwtService.java @@ -82,6 +82,19 @@ public String createToken(Long userId) { return createJwtToken(userId, Duration.ofDays(jwtProperties.getAccessTokenSeconds()), getSecretKey(), "jwt"); } + public String createTokenToWeb(Long userId, Long seconds) { + Instant issuedAt = Instant.now(); + Instant expiration = issuedAt.plusSeconds(seconds); + + return Jwts.builder() + .setHeaderParam("type", "jwt") + .claim("userId", userId) + .setIssuedAt(Date.from(issuedAt)) + .setExpiration(Date.from(expiration)) + .signWith(getSecretKey()) + .compact(); + } + public String createRefreshToken(Long userId) { Long ttl = Duration.ofDays(jwtProperties.getRefreshTokenSeconds()).getSeconds(); String refreshToken = createJwtToken(userId, Duration.ofDays(jwtProperties.getRefreshTokenSeconds()), getRefreshKey(), "refresh"); diff --git a/Match-Api/src/main/java/com/example/matchapi/config/SecurityConfig.java b/Match-Api/src/main/java/com/example/matchapi/config/SecurityConfig.java index 9e418c29..c7545321 100644 --- a/Match-Api/src/main/java/com/example/matchapi/config/SecurityConfig.java +++ b/Match-Api/src/main/java/com/example/matchapi/config/SecurityConfig.java @@ -103,6 +103,8 @@ private void configureAuthorizationRequests(HttpSecurity httpSecurity) throws Ex .antMatchers("/admin/order/**").hasAnyRole("ADMIN") .antMatchers("/admin/auth/logIn").permitAll() .antMatchers("/payments/web-hook").permitAll() + .antMatchers("/payments/validate").permitAll() + .antMatchers("/payments/info").permitAll() .antMatchers("/test").permitAll() .and() .apply(new JwtSecurityConfig(jwtService)); diff --git a/Match-Api/src/main/java/com/example/matchapi/order/converter/OrderConverter.java b/Match-Api/src/main/java/com/example/matchapi/order/converter/OrderConverter.java index 84cc11eb..9e0d4a1d 100644 --- a/Match-Api/src/main/java/com/example/matchapi/order/converter/OrderConverter.java +++ b/Match-Api/src/main/java/com/example/matchapi/order/converter/OrderConverter.java @@ -47,7 +47,7 @@ public OrderRequest CreateRequest(Long userId, Long projectId, String orderId) { .userId(String.valueOf(userId)) .projectId(String.valueOf(projectId)) .orderId(orderId) - .ttl(1800L) + .ttl(2400L) .build(); } public DonationUser convertToDonationUserPortone(Long userId, Payment payment, Long projectId, OrderRes.CreateInherenceDto createInherenceDto) { diff --git a/Match-Api/src/main/java/com/example/matchapi/order/dto/OrderRes.java b/Match-Api/src/main/java/com/example/matchapi/order/dto/OrderRes.java index 07f82e38..c4ba2e22 100644 --- a/Match-Api/src/main/java/com/example/matchapi/order/dto/OrderRes.java +++ b/Match-Api/src/main/java/com/example/matchapi/order/dto/OrderRes.java @@ -69,4 +69,25 @@ public static class CreateInherenceDto { private String inherenceNumber; } + + + @Getter + @Setter + @Builder + @AllArgsConstructor + @NoArgsConstructor + public static class PaymentInfoDto { + private String name; + + @JsonFormat(pattern = "yyyy-MM-dd") + private LocalDate birth; + + private String phone; + + private String usages; + + private RegularStatus regularStatus; + + private String accessToken; + } } diff --git a/Match-Api/src/main/java/com/example/matchapi/order/service/OrderRequestService.java b/Match-Api/src/main/java/com/example/matchapi/order/service/OrderRequestService.java index 6529bdea..421c4cca 100644 --- a/Match-Api/src/main/java/com/example/matchapi/order/service/OrderRequestService.java +++ b/Match-Api/src/main/java/com/example/matchapi/order/service/OrderRequestService.java @@ -10,11 +10,15 @@ public class OrderRequestService { private final OrderAdaptor orderAdaptor; public OrderRequest findByOrderIdForPayment(String orderId) { - OrderRequest orderRequest = orderAdaptor.findById(orderId); + OrderRequest orderRequest = findByOrderId(orderId); orderAdaptor.deleteById(orderId); return orderRequest; } + public OrderRequest findByOrderId(String orderId) { + return orderAdaptor.findById(orderId); + } + } diff --git a/Match-Api/src/main/java/com/example/matchapi/portone/controller/PaymentController.java b/Match-Api/src/main/java/com/example/matchapi/portone/controller/PaymentController.java index f2b99bcb..31f15785 100644 --- a/Match-Api/src/main/java/com/example/matchapi/portone/controller/PaymentController.java +++ b/Match-Api/src/main/java/com/example/matchapi/portone/controller/PaymentController.java @@ -1,5 +1,6 @@ package com.example.matchapi.portone.controller; +import com.example.matchapi.common.security.JwtService; import com.example.matchapi.order.dto.OrderRes; import com.example.matchapi.order.service.OrderRequestService; import com.example.matchapi.portone.dto.PaymentReq; @@ -34,6 +35,7 @@ public class PaymentController { private final UserService userService; private final ProjectService projectService; private final OrderRequestService orderRequestService; + private final JwtService jwtService; @Value("${spring.config.activate.on-profile}") private String profile; @@ -52,6 +54,20 @@ public CommonResponse validatePayment(@RequestBody Pa return CommonResponse.onSuccess(paymentService.checkPayment(mapper.toPaymentValidationCommand(orderRequest, user, project, validatePayment))); } + @GetMapping("/info") + @Operation(summary = "08-02 Payment Web 사용자 정보 불러오기", description = "웹에서 결제를 위한 사용자 정보 불러오기 입니다.") + public CommonResponse getPaymentInfo(@RequestParam String orderId){ + OrderRequest orderRequest = orderRequestService.findByOrderId(orderId); + + User user = userService.findByUser(orderRequest.getUserId()); + + Project project = projectService.findByProject(orderRequest.getProjectId()); + + String accessToken = jwtService.createTokenToWeb(user.getId(), 600L); + + return CommonResponse.onSuccess(mapper.toPaymentInfoDto(user.getName(), user.getBirth(), user.getPhoneNumber(), project.getUsages(), project.getRegularStatus(), accessToken)); + } + /* @PostMapping("/web-hook") public CommonResponse webhookAlert(@RequestBody PortOneWebhook portOneWebhook){ diff --git a/Match-Api/src/main/java/com/example/matchapi/portone/mapper/PaymentMapper.java b/Match-Api/src/main/java/com/example/matchapi/portone/mapper/PaymentMapper.java index 4d19bb19..a32b1efa 100644 --- a/Match-Api/src/main/java/com/example/matchapi/portone/mapper/PaymentMapper.java +++ b/Match-Api/src/main/java/com/example/matchapi/portone/mapper/PaymentMapper.java @@ -1,14 +1,19 @@ package com.example.matchapi.portone.mapper; +import com.example.matchapi.order.dto.OrderRes; import com.example.matchapi.portone.dto.PaymentCommand; import com.example.matchapi.portone.dto.PaymentReq; +import com.example.matchdomain.donation.entity.enums.RegularStatus; import com.example.matchdomain.project.entity.Project; import com.example.matchdomain.redis.entity.OrderRequest; import com.example.matchdomain.user.entity.User; import com.example.matchinfrastructure.pay.portone.dto.PortOneWebhook; import org.mapstruct.Mapper; +import org.mapstruct.Mapping; import org.mapstruct.factory.Mappers; +import java.time.LocalDate; + @Mapper public interface PaymentMapper { PaymentMapper INSTANCE = Mappers.getMapper(PaymentMapper.class); @@ -16,4 +21,8 @@ public interface PaymentMapper { PaymentCommand.PaymentValidation toPaymentValidationCommand(OrderRequest orderRequest, User user, Project project, PaymentReq.ValidatePayment validatePayment); PaymentCommand.PaymentValidation toCheckValidationCommand(OrderRequest orderRequest, User user, Project project, PortOneWebhook portOneWebhook); + + @Mapping(source = "regularStatus", target = "regularStatus") + @Mapping(source = "name", target = "name") + OrderRes.PaymentInfoDto toPaymentInfoDto(String name, LocalDate birth, String phone, String usages, RegularStatus regularStatus, String accessToken); }