RentalItemService.java

package io.extact.rms.application.service;

import java.util.function.Consumer;

import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;

import io.extact.rms.application.domain.RentalItem;
import io.extact.rms.application.exception.BusinessFlowException;
import io.extact.rms.application.exception.BusinessFlowException.CauseType;
import io.extact.rms.application.persistence.GenericRepository;
import io.extact.rms.application.persistence.RentalItemRepository;

@ApplicationScoped
public class RentalItemService implements GenericService<RentalItem> {

    private RentalItemRepository repository;

    @Inject
    public RentalItemService(RentalItemRepository rentalItemRepository) {
        this.repository = rentalItemRepository;
    }

    public RentalItem findBySerialNo(String serialNo) {
        return repository.findBySerialNo(serialNo);
    }

    @Override
    public Consumer<RentalItem> getDuplicateChecker() {
        return (targetItem) -> {
            var foundItem = findBySerialNo(targetItem.getSerialNo());
            if (foundItem != null && (targetItem.getId() == null || !foundItem.isSameId(targetItem))) {
                throw new BusinessFlowException("The serialNo is already registered.", CauseType.DUPRICATE);
            }
        };
    }

    @Override
    public GenericRepository<RentalItem> getRepository() {
        return this.repository;
    }
}