ResourceConflictException.java
package com.github.jenkaby.bikerental.shared.exception;
import lombok.Getter;
import static com.github.jenkaby.bikerental.shared.web.advice.ErrorCodes.RESOURCE_CONFLICT;
@Getter
public class ResourceConflictException extends BikeRentalException {
public static final String ERROR_CODE = RESOURCE_CONFLICT;
private static final String MESSAGE_TEMPLATE = "%s with identifier '%s' already exists";
public ResourceConflictException(String resourceName, String identifier) {
this(resourceName, identifier, ERROR_CODE);
}
protected ResourceConflictException(String resourceName, String identifier, String errorCode) {
super(MESSAGE_TEMPLATE.formatted(resourceName, identifier), errorCode, new ResourceDetails(resourceName, identifier));
}
public ResourceConflictException(Class<?> cls, String identifier) {
this(cls.getSimpleName(), identifier);
}
public ResourceDetails getDetails() {
return getParams().map(params -> (ResourceConflictException.ResourceDetails) params)
.orElseThrow(() -> new IllegalArgumentException("Expected ResourceDetails in exception parameters"));
}
public record ResourceDetails(String resourceName, String identifier) {
}
}