// 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/PaymentIntent.java
// public enum PaymentIntent {
//     AUTHORIZE, CAPTURE;
// 
//     public boolean isAuthorize() {
//         return AUTHORIZE.equals(this);
//     }
// 
//     public boolean isCapture() {
//         return CAPTURE.equals(this);
//     }
// }
// 
// Path: src/main/java/com/github/sandokandias/payments/domain/vo/PaymentMethod.java
// public enum PaymentMethod {
//     CREDIT_CARD
// }
// 
// Path: src/main/java/com/github/sandokandias/payments/domain/vo/Transaction.java
// public class Transaction implements ValueObject<Transaction> {
//     @Valid
//     public final Money amount;
//     @NotNull
//     @Size(min = 1)
//     public final List<TransactionItem> items;
// 
//     @JsonCreator
//     public Transaction(@JsonProperty("amount") Money amount,
//                        @JsonProperty("items") List<TransactionItem> items) {
// 
//         this.amount = amount;
//         this.items = items;
//     }
// 
//     @Override
//     public boolean sameValueAs(Transaction other) {
//         return other != null &&
//                 this.amount.sameValueAs(other.amount) &&
//                 this.items.size() == other.items.size() &&
//                 this.items.containsAll(other.items);
//     }
// }


import com.github.sandokandias.payments.domain.vo.CustomerId;
import com.github.sandokandias.payments.domain.vo.PaymentIntent;
import com.github.sandokandias.payments.domain.vo.PaymentMethod;
import com.github.sandokandias.payments.domain.vo.Transaction;
import lombok.Value;
import java.time.LocalDateTime;
package com.github.sandokandias.payments.domain.command;



@Value(staticConstructor = "commandOf")
public class PerformPayment implements PaymentCommand {
    private final CustomerId customerId;
// 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/PaymentIntent.java
// public enum PaymentIntent {
//     AUTHORIZE, CAPTURE;
// 
//     public boolean isAuthorize() {
//         return AUTHORIZE.equals(this);
//     }
// 
//     public boolean isCapture() {
//         return CAPTURE.equals(this);
//     }
// }
// 
// Path: src/main/java/com/github/sandokandias/payments/domain/vo/PaymentMethod.java
// public enum PaymentMethod {
//     CREDIT_CARD
// }
// 
// Path: src/main/java/com/github/sandokandias/payments/domain/vo/Transaction.java
// public class Transaction implements ValueObject<Transaction> {
//     @Valid
//     public final Money amount;
//     @NotNull
//     @Size(min = 1)
//     public final List<TransactionItem> items;
// 
//     @JsonCreator
//     public Transaction(@JsonProperty("amount") Money amount,
//                        @JsonProperty("items") List<TransactionItem> items) {
// 
//         this.amount = amount;
//         this.items = items;
//     }
// 
//     @Override
//     public boolean sameValueAs(Transaction other) {
//         return other != null &&
//                 this.amount.sameValueAs(other.amount) &&
//                 this.items.size() == other.items.size() &&
//                 this.items.containsAll(other.items);
//     }
// }


// Path: src/main/java/com/github/sandokandias/payments/domain/command/PerformPayment.java
import com.github.sandokandias.payments.domain.vo.CustomerId;
import com.github.sandokandias.payments.domain.vo.PaymentIntent;
import com.github.sandokandias.payments.domain.vo.PaymentMethod;
import com.github.sandokandias.payments.domain.vo.Transaction;
import lombok.Value;
import java.time.LocalDateTime;

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



@Value(staticConstructor = "commandOf")
public class PerformPayment implements PaymentCommand {
    private final CustomerId customerId;
    private final PaymentIntent paymentIntent;