MarketingPort.java
package com.ecommerce.trade.application.port;
import java.math.BigDecimal;
import java.util.List;
public interface MarketingPort {
PricingLock lockPricing(PricingCommand command);
record PricingCommand(
String orderNo,
Long userId,
BigDecimal originalAmount,
DeliveryRegion deliveryRegion,
List<PricingLine> lines,
List<String> benefitNos
) {
public PricingCommand {
lines = List.copyOf(lines);
benefitNos = List.copyOf(benefitNos);
}
}
record DeliveryRegion(String provinceCode, String cityCode, String districtCode) {
}
record PricingLine(int lineNo, Long skuId, BigDecimal lineAmount) {
}
record PricingLock(
String lockNo,
String orderNo,
Long userId,
BigDecimal originalAmount,
BigDecimal couponDiscount,
BigDecimal redPacketDiscount,
BigDecimal subsidyDiscount,
BigDecimal discountAmount,
BigDecimal payableAmount,
String status,
List<AppliedBenefit> appliedBenefits
) {
public PricingLock {
appliedBenefits = List.copyOf(appliedBenefits);
}
}
record AppliedBenefit(
String benefitNo,
String ruleCode,
String benefitType,
BigDecimal discountAmount,
List<DiscountAllocation> allocations
) {
public AppliedBenefit {
allocations = List.copyOf(allocations);
}
}
record DiscountAllocation(
int lineNo,
Long skuId,
String benefitNo,
String ruleCode,
String benefitType,
BigDecimal discountAmount
) {
}
final class PricingRejectedException extends RuntimeException {
public PricingRejectedException(String message) {
super(message);
}
}
}