diff --git a/service/src/main/kotlin/com/sangdol/roomescape/payment/business/domain/PaymentDetail.kt b/service/src/main/kotlin/com/sangdol/roomescape/payment/business/domain/PaymentDetail.kt new file mode 100644 index 00000000..65193b04 --- /dev/null +++ b/service/src/main/kotlin/com/sangdol/roomescape/payment/business/domain/PaymentDetail.kt @@ -0,0 +1,38 @@ +package com.sangdol.roomescape.payment.business.domain + +abstract class PaymentDetail + +class BankTransferPaymentDetail( + val bankCode: BankCode, + val settlementStatus: String, +): PaymentDetail() + +class CardPaymentDetail( + val issuerCode: CardIssuerCode, + val number: String, + val amount: Int, + val cardType: CardType, + val ownerType: CardOwnerType, + val isInterestFree: Boolean, + val approveNo: String, + val installmentPlanMonths: Int +): PaymentDetail() + +class EasypayCardPaymentDetail( + val issuerCode: CardIssuerCode, + val number: String, + val amount: Int, + val cardType: CardType, + val ownerType: CardOwnerType, + val isInterestFree: Boolean, + val approveNo: String, + val installmentPlanMonths: Int, + val easypayProvider: EasyPayCompanyCode, + val easypayDiscountAmount: Int, +): PaymentDetail() + +class EasypayPrepaidPaymentDetail( + val provider: EasyPayCompanyCode, + val amount: Int, + val discountAmount: Int, +): PaymentDetail() diff --git a/service/src/main/kotlin/com/sangdol/roomescape/payment/mapper/PaymentDetailMappingExtensions.kt b/service/src/main/kotlin/com/sangdol/roomescape/payment/mapper/PaymentDetailMappingExtensions.kt new file mode 100644 index 00000000..a8ae3571 --- /dev/null +++ b/service/src/main/kotlin/com/sangdol/roomescape/payment/mapper/PaymentDetailMappingExtensions.kt @@ -0,0 +1,91 @@ +package com.sangdol.roomescape.payment.mapper + +import com.sangdol.roomescape.payment.business.domain.BankTransferPaymentDetail +import com.sangdol.roomescape.payment.business.domain.CardPaymentDetail +import com.sangdol.roomescape.payment.business.domain.EasypayCardPaymentDetail +import com.sangdol.roomescape.payment.business.domain.EasypayPrepaidPaymentDetail +import com.sangdol.roomescape.payment.infrastructure.persistence.PaymentBankTransferDetailEntity +import com.sangdol.roomescape.payment.infrastructure.persistence.PaymentCardDetailEntity +import com.sangdol.roomescape.payment.infrastructure.persistence.PaymentDetailEntity +import com.sangdol.roomescape.payment.infrastructure.persistence.PaymentEasypayPrepaidDetailEntity + +fun BankTransferPaymentDetail.toEntity( + id: Long, + paymentId: Long, + suppliedAmount: Int, + vat: Int +): PaymentDetailEntity { + return PaymentBankTransferDetailEntity( + id = id, + paymentId = paymentId, + suppliedAmount = suppliedAmount, + vat = vat, + bankCode = this.bankCode, + settlementStatus = this.settlementStatus + ) +} + +fun CardPaymentDetail.toEntity( + id: Long, + paymentId: Long, + suppliedAmount: Int, + vat: Int +): PaymentDetailEntity { + return PaymentCardDetailEntity( + id = id, + paymentId = paymentId, + suppliedAmount = suppliedAmount, + vat = vat, + issuerCode = issuerCode, + cardType = cardType, + ownerType = ownerType, + amount = amount, + cardNumber = this.number, + approvalNumber = this.approveNo, + installmentPlanMonths = installmentPlanMonths, + isInterestFree = isInterestFree, + easypayProviderCode = null, + easypayDiscountAmount = null + ) +} + +fun EasypayCardPaymentDetail.toEntity( + id: Long, + paymentId: Long, + suppliedAmount: Int, + vat: Int +): PaymentDetailEntity { + return PaymentCardDetailEntity( + id = id, + paymentId = paymentId, + suppliedAmount = suppliedAmount, + vat = vat, + issuerCode = issuerCode, + cardType = cardType, + ownerType = ownerType, + amount = amount, + cardNumber = this.number, + approvalNumber = this.approveNo, + installmentPlanMonths = installmentPlanMonths, + isInterestFree = isInterestFree, + easypayProviderCode = this.easypayProvider, + easypayDiscountAmount = this.easypayDiscountAmount + ) +} + +fun EasypayPrepaidPaymentDetail.toEntity( + id: Long, + paymentId: Long, + suppliedAmount: Int, + vat: Int +): PaymentDetailEntity { + return PaymentEasypayPrepaidDetailEntity( + id = id, + paymentId = paymentId, + suppliedAmount = suppliedAmount, + vat = vat, + easypayProviderCode = this.provider, + amount = this.amount, + discountAmount = this.discountAmount + ) +}