FindRentalsService.java
package com.github.jenkaby.bikerental.rental.application.service;
import com.github.jenkaby.bikerental.rental.application.usecase.FindRentalsUseCase;
import com.github.jenkaby.bikerental.rental.domain.model.Rental;
import com.github.jenkaby.bikerental.rental.domain.repository.RentalRepository;
import com.github.jenkaby.bikerental.shared.domain.model.vo.Page;
import org.springframework.stereotype.Service;
@Service
class FindRentalsService implements FindRentalsUseCase {
private final RentalRepository repository;
FindRentalsService(RentalRepository repository) {
this.repository = repository;
}
@Override
public Page<Rental> execute(FindRentalsQuery query) {
// Priority: equipmentUid + status > customerId + status > customerId > status
if (query.equipmentUid() != null && query.status() != null) {
return repository.findByStatusAndEquipmentUid(query.status(), query.equipmentUid(), query.pageRequest());
} else if (query.customerId() != null && query.status() != null) {
return repository.findByStatusAndCustomerId(query.status(), query.customerId(), query.pageRequest());
} else if (query.customerId() != null) {
return repository.findByCustomerId(query.customerId(), query.pageRequest());
} else {
return repository.findByStatus(query.status(), query.pageRequest());
}
}
}