UserAccountService.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.UserAccount;
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.UserAccountRepository;
@ApplicationScoped
public class UserAccountService implements GenericService<UserAccount> {
    private UserAccountRepository repository;
    @Inject
    public UserAccountService(UserAccountRepository userRepository) {
        this.repository = userRepository;
    }
    public UserAccount findByLoginIdAndPasswod(String loginId, String password) {
        return repository.findByLoginIdAndPasswod(loginId, password);
    }
    public UserAccount findByLoginId(String loginId) {
        return repository.findByLoginId(loginId);
    }
    @Override
    public Consumer<UserAccount> getDuplicateChecker() {
        return (targetUser) -> {
            var foundUser = findByLoginId(targetUser.getLoginId());
            if (foundUser != null && (targetUser.getId() == null || !foundUser.isSameId(targetUser))) {
                throw new BusinessFlowException("loginId is already registered.", CauseType.DUPRICATE);
            }
        };
    }
    @Override
    public GenericRepository<UserAccount> getRepository() {
        return this.repository;
    }
}