InvalidStatusTransitionException.java
package com.github.jenkaby.bikerental.equipment.domain.exception;
import com.github.jenkaby.bikerental.shared.exception.BikeRentalException;
import lombok.Getter;
@Getter
public class InvalidStatusTransitionException extends BikeRentalException {
public static final String ERROR_CODE = "equipment.status.invalid_transition";
private static final String MESSAGE_TEMPLATE = "Invalid status transition from '%s' to '%s' for equipment with id %s";
public InvalidStatusTransitionException(Object equipmentId, String fromStatusSlug, String toStatusSlug) {
this(new InvalidStatusTransitionException.StatusTransitionDetails(equipmentId, fromStatusSlug, toStatusSlug));
}
public InvalidStatusTransitionException(StatusTransitionDetails details) {
super(MESSAGE_TEMPLATE.formatted(details.fromStatus(), details.toStatus(), details.id()), ERROR_CODE, details);
}
public StatusTransitionDetails getDetails() {
return super.getParams().map(params -> (StatusTransitionDetails) params)
.orElseThrow(() -> new IllegalArgumentException("InvalidStatusTransitionException must have StatusTransitionDetails as params"));
}
public record StatusTransitionDetails(Object id, String fromStatus, String toStatus) {
}
}