// Path: src/main/java/com/github/sandokandias/payments/domain/vo/CustomerId.java
// public class CustomerId extends RandomUUID {
// 
//     public CustomerId(String id) {
//         super(id);
//     }
// 
//     @Override
//     protected String getPrefix() {
//         return "CST-%s";
//     }
// }
// 
// Path: src/main/java/com/github/sandokandias/payments/domain/vo/PaymentEventId.java
// public class PaymentEventId extends RandomUUID {
// 
//     @Override
//     protected String getPrefix() {
//         return "PEV-%s";
//     }
// }
// 
// Path: src/main/java/com/github/sandokandias/payments/domain/vo/PaymentEventType.java
// public enum PaymentEventType {
//     PAYMENT_REQUESTED,
//     PAYMENT_AUTHORIZED,
//     PAYMENT_CONFIRMED;
// }
// 
// Path: src/main/java/com/github/sandokandias/payments/domain/vo/PaymentId.java
// public class PaymentId extends RandomUUID {
// 
//     public PaymentId() {
//         super();
//     }
// 
//     public PaymentId(String id) {
//         super(id);
//     }
// 
//     @Override
//     protected String getPrefix() {
//         return "PAY-%s";
//     }
// }


import com.github.sandokandias.payments.domain.vo.CustomerId;
import com.github.sandokandias.payments.domain.vo.PaymentEventId;
import com.github.sandokandias.payments.domain.vo.PaymentEventType;
import com.github.sandokandias.payments.domain.vo.PaymentId;
import lombok.Value;
import java.time.LocalDateTime;
package com.github.sandokandias.payments.domain.event;



@Value(staticConstructor = "eventOf")
public class PaymentConfirmed implements PaymentEvent {
    private final PaymentEventId eventId = new PaymentEventId();
    private final PaymentId paymentId;
    private final CustomerId customerId;
    private final LocalDateTime timestamp;

    @Override
// Path: src/main/java/com/github/sandokandias/payments/domain/vo/CustomerId.java
// public class CustomerId extends RandomUUID {
// 
//     public CustomerId(String id) {
//         super(id);
//     }
// 
//     @Override
//     protected String getPrefix() {
//         return "CST-%s";
//     }
// }
// 
// Path: src/main/java/com/github/sandokandias/payments/domain/vo/PaymentEventId.java
// public class PaymentEventId extends RandomUUID {
// 
//     @Override
//     protected String getPrefix() {
//         return "PEV-%s";
//     }
// }
// 
// Path: src/main/java/com/github/sandokandias/payments/domain/vo/PaymentEventType.java
// public enum PaymentEventType {
//     PAYMENT_REQUESTED,
//     PAYMENT_AUTHORIZED,
//     PAYMENT_CONFIRMED;
// }
// 
// Path: src/main/java/com/github/sandokandias/payments/domain/vo/PaymentId.java
// public class PaymentId extends RandomUUID {
// 
//     public PaymentId() {
//         super();
//     }
// 
//     public PaymentId(String id) {
//         super(id);
//     }
// 
//     @Override
//     protected String getPrefix() {
//         return "PAY-%s";
//     }
// }


// Path: src/main/java/com/github/sandokandias/payments/domain/event/PaymentConfirmed.java
import com.github.sandokandias.payments.domain.vo.CustomerId;
import com.github.sandokandias.payments.domain.vo.PaymentEventId;
import com.github.sandokandias.payments.domain.vo.PaymentEventType;
import com.github.sandokandias.payments.domain.vo.PaymentId;
import lombok.Value;
import java.time.LocalDateTime;

package com.github.sandokandias.payments.domain.event;



@Value(staticConstructor = "eventOf")
public class PaymentConfirmed implements PaymentEvent {
    private final PaymentEventId eventId = new PaymentEventId();
    private final PaymentId paymentId;
    private final CustomerId customerId;
    private final LocalDateTime timestamp;

    @Override
    public PaymentEventType getEventType() {