SettleRentalUseCase.java

package com.github.jenkaby.bikerental.finance.application.usecase;

import com.github.jenkaby.bikerental.shared.domain.CustomerRef;
import com.github.jenkaby.bikerental.shared.domain.RentalRef;
import com.github.jenkaby.bikerental.shared.domain.TransactionRef;
import com.github.jenkaby.bikerental.shared.domain.model.vo.Money;
import org.jspecify.annotations.Nullable;

import java.time.Instant;
import java.util.List;

public interface SettleRentalUseCase {

    SettlementResult execute(SettleRentalCommand command);

    record SettleRentalCommand(CustomerRef customerRef, RentalRef rentalRef, Money finalCost, String operatorId) {
    }

    record SettlementResult(
            List<TransactionRef> captureTransactionRefs,
            @Nullable TransactionRef releaseTransactionRef,
            Instant recordedAt) {
    }
}