S SmartDocs
系列: Bridget java 80 行 · 更新于 2026-05-08

PaymentEvent.java

Bridget/payment-gateway-microservices/shared/payment-events/src/main/java/com/checkout/paymentgw/events/PaymentEvent.java

package com.checkout.paymentgw.events;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonInclude;

import java.time.Instant;
import java.util.UUID;

/**
 * Single envelope for all payment-related events on the {@code payments.events} topic.
 * <p>
 * Wire-level contract — keep <strong>backward-compatible</strong>:
 * <ul>
 *   <li>Add new fields only (defaulted, nullable).</li>
 *   <li>Never rename or remove a field without a major version bump.</li>
 *   <li>Consumers must ignore unknown fields.</li>
 * </ul>
 *
 * @param eventId unique id for at-least-once de-duplication on consumers
 * @param eventType {@link EventType#name()}
 */
@JsonInclude(JsonInclude.Include.NON_NULL)
@JsonIgnoreProperties(ignoreUnknown = true)
public record PaymentEvent(
        String eventId,
        String eventType,
        UUID paymentId,
        String merchantId,
        String currency,
        Integer amount,
        String cardNumberLastFour,
        String status,
        String reason,
        Instant occurredAt,
        String correlationId
) {

    public enum EventType {
        PAYMENT_SUBMITTED,
        PAYMENT_AUTHORISED,
        PAYMENT_DECLINED,
        PAYMENT_FAILED,
        PAYMENT_REVERSED
    }

    public static Builder builder() {
        return new Builder();
    }

    public static final class Builder {
        private String eventId;
        private String eventType;
        private UUID paymentId;
        private String merchantId;
        private String currency;
        private Integer amount;
        private String cardNumberLastFour;
        private String status;
        private String reason;
        private Instant occurredAt;
        private String correlationId;

        public Builder eventId(String v)            { this.eventId = v; return this; }
        public Builder eventType(EventType v)       { this.eventType = v.name(); return this; }
        public Builder paymentId(UUID v)            { this.paymentId = v; return this; }
        public Builder merchantId(String v)         { this.merchantId = v; return this; }
        public Builder currency(String v)           { this.currency = v; return this; }
        public Builder amount(Integer v)            { this.amount = v; return this; }
        public Builder cardNumberLastFour(String v) { this.cardNumberLastFour = v; return this; }
        public Builder status(String v)             { this.status = v; return this; }
        public Builder reason(String v)             { this.reason = v; return this; }
        public Builder occurredAt(Instant v)        { this.occurredAt = v; return this; }
        public Builder correlationId(String v)      { this.correlationId = v; return this; }

        public PaymentEvent build() {
            return new PaymentEvent(eventId, eventType, paymentId, merchantId, currency, amount,
                    cardNumberLastFour, status, reason, occurredAt, correlationId);
        }
    }
}

相关文章

Bridget java 更新于 2026-03-30

PaymentGatewayApplication.java

PaymentGatewayApplication.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/PaymentGatewayApplication.java).

阅读文章 →
Bridget java 更新于 2026-03-20

ApplicationConfiguration.java

ApplicationConfiguration.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/configuration/ApplicationConfiguration.java).

阅读文章 →
Bridget java 更新于 2026-03-30

RequestResponseLogger.java

RequestResponseLogger.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/configuration/RequestResponseLogger.java).

阅读文章 →
Bridget java 更新于 2026-04-14

PaymentGatewayController.java

PaymentGatewayController.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/controller/PaymentGatewayController.java).

阅读文章 →
Bridget java 更新于 2026-03-20

PaymentStatus.java

PaymentStatus.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/enums/PaymentStatus.java).

阅读文章 →
Bridget java 更新于 2026-03-29

BankErrorException.java

BankErrorException.java — java source code from the Bridget learning materials (Bridget/payment-gateway-challenge-java/src/main/java/com/checkout/payment/gateway/exception/BankErrorException.java).

阅读文章 →