Project

[Toss] 잔액 사용 확인(1)

sangyunpark 2023. 8. 25. 23:20
GET /transaction/{transactionId}
파라미터 : 거래 아이디
실패 응답 : 해당 거래 아이디가 없는 경우 실패 응답
성공 응답 : 계좌 번호, 거래종류(잔액 사용, 사용 취소), 거래 결과 코드(성공/실패), 거래 아이디, 거래 금액, 거래일시
실패한 거래(사용/사용취소)도 거래를 확인할 수 있다.

요청

GET /transaction/{transactionId}

응답

{
    "accountNumber" : "1000000000",
    "transactionType" : "USE",
    "transactionResult" : "S",
    "transactionId": "asdfasfadsf213dasf",
    "amount" : 1000,
    "transactionAt" : "2022-06-01T23:26:14.12321"
}

 

Controller

@GetMapping("/transaction")
public TransactionInfo.Response getTransactionByTransactionId(@Valid @RequestParam("id") String id){
    return TransactionInfo.Response.from(
        transactionService.getTransactionByTransactionId(id)
    );
}

 

Service

@Transactional
public TransactionDto getTransactionByTransactionId(String transactionId){

    Transaction transaction = transactionRepository.findByTransactionId(transactionId)
            .orElseThrow(() -> new AccountException(ErrorCode.TRANSACTION_NOT_FOUND));

    return TransactionDto.fromEntity(
            transaction
    );
}

 

TransactionInfo

package com.example.account.dto;

import com.example.account.type.TransactionResultType;
import com.example.account.type.TransactionType;
import jakarta.validation.constraints.NotNull;
import lombok.*;

import java.time.LocalDateTime;

public class TransactionInfo {

    @Getter
    @Setter
    @AllArgsConstructor
    public static class Request {
        @NotNull
        private String transactionId;
    }

    @Getter
    @Setter
    @AllArgsConstructor
    @NoArgsConstructor
    @Builder
    public static class Response{
        private String accountNumber;
        private TransactionType transactionType;
        private TransactionResultType transactionResultType;
        private String transactionId;
        private Long amount;
        private LocalDateTime transactionAt;

        public static Response from(TransactionDto transactionDto){
            return Response.builder()
                    .accountNumber(transactionDto.getAccountNumber())
                    .transactionType(transactionDto.getTransactionType())
                    .transactionResultType(transactionDto.getTransactionResultType())
                    .transactionId(transactionDto.getTransactionId())
                    .amount(transactionDto.getAmount())
                    .transactionAt(transactionDto.getTransactedAt())
                    .build();
        }
    }
}