Skip to content

Commit

Permalink
Merge pull request #206 from TEAMMatchDev/feature/issue-205
Browse files Browse the repository at this point in the history
♻️ : ORDER ID 결제 정보 구하기 (#205)
  • Loading branch information
imenuuu authored Nov 30, 2023
2 parents e7e2476 + fca1a89 commit af7de8a
Show file tree
Hide file tree
Showing 8 changed files with 89 additions and 3 deletions.
Original file line number Diff line number Diff line change
@@ -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 {
Expand Down Expand Up @@ -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();
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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");
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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));
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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) {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -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);
}

}
Original file line number Diff line number Diff line change
@@ -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;
Expand Down Expand Up @@ -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;

Expand All @@ -52,6 +54,20 @@ public CommonResponse<OrderRes.CompleteDonation> 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<OrderRes.PaymentInfoDto> 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<String> webhookAlert(@RequestBody PortOneWebhook portOneWebhook){
Expand Down
Original file line number Diff line number Diff line change
@@ -1,19 +1,28 @@
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);

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);
}

0 comments on commit af7de8a

Please sign in to comment.