HoldRequiredException.java

package com.github.jenkaby.bikerental.rental.domain.exception;

import com.github.jenkaby.bikerental.shared.exception.BikeRentalException;
import com.github.jenkaby.bikerental.shared.web.advice.ErrorCodes;
import lombok.Getter;

@Getter
public class HoldRequiredException extends BikeRentalException {

    private static final String MESSAGE = "A fund hold must exist before the rental can be activated";

    public HoldRequiredException(Long rentalId) {
        super(MESSAGE, ErrorCodes.HOLD_REQUIRED, new HoldRequiredDetails(rentalId));
    }

    public HoldRequiredDetails getDetails() {
        return getParams()
                .map(d -> (HoldRequiredDetails) d)
                .orElseThrow(() -> new IllegalArgumentException("Expected HoldRequiredDetails in exception parameters"));
    }

    public record HoldRequiredDetails(Long rentalId) {
    }
}