From e25a4f632550896ec17c84e06c6a0cb87771ecde Mon Sep 17 00:00:00 2001 From: pricelees Date: Wed, 1 Oct 2025 10:30:59 +0900 Subject: [PATCH] =?UTF-8?q?feat:=20Payment=20=EA=B5=AC=EC=84=B1=EC=97=90?= =?UTF-8?q?=20=ED=95=84=EC=9A=94=ED=95=9C=20=EA=B3=84=EC=A2=8C=EC=9D=B4?= =?UTF-8?q?=EC=B2=B4,=20=EC=B9=B4=EB=93=9C,=20=EC=B7=A8=EC=86=8C,=20?= =?UTF-8?q?=EA=B0=84=ED=8E=B8=EA=B2=B0=EC=A0=9C=20=EB=8F=84=EB=A9=94?= =?UTF-8?q?=EC=9D=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../business/domain/cancel/Cancellation.kt | 38 ++++++++++++++++++ .../tosspaymock/business/domain/card/Card.kt | 39 +++++++++++++++++++ .../business/domain/easypay/Easypay.kt | 31 +++++++++++++++ .../business/domain/transfer/BankTransfer.kt | 15 +++++++ 4 files changed, 123 insertions(+) create mode 100644 tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/cancel/Cancellation.kt create mode 100644 tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/card/Card.kt create mode 100644 tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/easypay/Easypay.kt create mode 100644 tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/transfer/BankTransfer.kt diff --git a/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/cancel/Cancellation.kt b/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/cancel/Cancellation.kt new file mode 100644 index 00000000..32966c05 --- /dev/null +++ b/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/cancel/Cancellation.kt @@ -0,0 +1,38 @@ +package com.sangdol.tosspaymock.business.domain.cancel + +import com.sangdol.tosspaymock.business.domain.RandomPaymentValueGenerator +import java.time.OffsetDateTime + +class Cancellation( + val transactionKey: String, + val cancelReason: String, + val taxExemptionAmount: Int = 0, + val canceledAt: OffsetDateTime, + val cardDiscountAmount: Int, + val transferDiscountAmount: Int, + val easyPayDiscountAmount: Int, + val receiptKey: String? = null, + val cancelStatus: String = "DONE", + val cancelRequestId: String? = null, + val cancelAmount: Int, + val taxFreeAmount: Int = 0, + val refundableAmount: Int = 0, +) { + companion object { + fun random( + cancelReason: String, + cancelAmount: Int, + easyPayDiscountAmount: Int, + cardDiscountAmount: Int, + transferDiscountAmount: Int, + ) = Cancellation( + transactionKey = RandomPaymentValueGenerator.transactionKey(), + cancelReason = cancelReason, + canceledAt = OffsetDateTime.now(), + cardDiscountAmount = cardDiscountAmount, + transferDiscountAmount = transferDiscountAmount, + easyPayDiscountAmount = easyPayDiscountAmount, + cancelAmount = cancelAmount, + ) + } +} diff --git a/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/card/Card.kt b/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/card/Card.kt new file mode 100644 index 00000000..b3068c8e --- /dev/null +++ b/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/card/Card.kt @@ -0,0 +1,39 @@ +package com.sangdol.tosspaymock.business.domain.card + +import com.sangdol.tosspaymock.business.domain.RandomCardValueGenerator + +class Card( + val issuerCode: CardIssuerCode, + val acquirerCode: CardIssuerCode, + val number: String, + val installmentPlanMonths: Int, + val isInterestFree: Boolean = true, + val interestPayer: String? = null, + val approveNo: String, + val useCardPoint: Boolean, + val cardType: CardType, + val ownerType: CardOwnerType, + val acquireStatus: CardAcquireStatus, + val amount: Int, +) { + companion object { + val availableCardTypes = listOf(CardType.CREDIT, CardType.CHECK) + val availableCardOwnerTypes = CardOwnerType.entries - CardOwnerType.UNKNOWN + fun random(approvedAmount: Int): Card { + return Card( + issuerCode = CardIssuerCode.entries.random(), + acquirerCode = CardIssuerCode.entries.random(), + number = RandomCardValueGenerator.cardNumber(), + installmentPlanMonths = RandomCardValueGenerator.installmentPlanMonths(approvedAmount), + isInterestFree = true, + interestPayer = null, + approveNo = RandomCardValueGenerator.approvalNumber(), + useCardPoint = false, + cardType = availableCardTypes.random(), + ownerType = availableCardOwnerTypes.random(), + acquireStatus = CardAcquireStatus.COMPLETED, + amount = approvedAmount + ) + } + } +} diff --git a/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/easypay/Easypay.kt b/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/easypay/Easypay.kt new file mode 100644 index 00000000..bfe56cbb --- /dev/null +++ b/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/easypay/Easypay.kt @@ -0,0 +1,31 @@ +package com.sangdol.tosspaymock.business.domain.easypay + +import com.sangdol.tosspaymock.business.domain.RandomEasypayValueGenerator + +class Easypay( + val provider: EasypayProvider, + val amount: Int, + val discountAmount: Int +) { + companion object { + fun randomWithPrepaid(amount: Int): Easypay { + val point = RandomEasypayValueGenerator.point(amount) + + return Easypay( + provider = EasypayProvider.entries.random(), + amount = (amount - point), + discountAmount = point + ) + } + + fun randomWithCard(amount: Int): Easypay { + val point = RandomEasypayValueGenerator.point(amount) + + return Easypay( + provider = EasypayProvider.entries.random(), + amount = 0, + discountAmount = point + ) + } + } +} diff --git a/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/transfer/BankTransfer.kt b/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/transfer/BankTransfer.kt new file mode 100644 index 00000000..18531edb --- /dev/null +++ b/tosspay-mock/src/main/kotlin/com/sangdol/tosspaymock/business/domain/transfer/BankTransfer.kt @@ -0,0 +1,15 @@ +package com.sangdol.tosspaymock.business.domain.transfer + +class BankTransfer( + val bankCode: BankCode, + val settlementStatus: SettlementStatus, +) { + companion object { + fun random(): BankTransfer { + return BankTransfer( + bankCode = BankCode.entries.random(), + settlementStatus = SettlementStatus.COMPLETED + ) + } + } +}