I have the below Java 11 method which is invoked by the controller where ID is the required param and status,version are optional params. I had to write multiple repository methods to fetch the record based on those params. Am wondering is there a better/effiecient way to refactor this method with out the if/else ladder?
    @Override
    @Transactional(transactionManager = "customTransactionManager")
    public Optional<String> getInformation(UUID id, Status status, Long version) {
        try {
            Preconditions.checkNotNull(id, ID_MUST_BE_NOT_NULL_MSG);
            if (status != null && version != null) {
                return repository.findByIdAndVersionAndStatus(id, version, status);
            } else if (status != null) {
                return repository.findFirstByIdAndStatus(id, status);
            } else if (version != null) {
                return repository.findFirstByIdAndVersion(id, version);
            } else {
                return repository.findFirstByIdOrderByIdDesc(id);
            }
        } catch (Exception e) {
            log.error(e);
            throw new CustomException(MessageFormat.format(PUBLIC_ERROR_MESSAGE, id));
        }
    }
 
     
    