EvaluationRateService.java
package com.tdmconsult.ete.evaluation;
import com.tdmconsult.ete.masterdata.EvaluationRate;
import com.tdmconsult.ete.masterdata.EvaluationRateRepository;
import com.tdmconsult.ete.masterdata.Security;
import java.util.Comparator;
import java.util.List;
import java.util.Optional;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;
@Service
@RequiredArgsConstructor
@Slf4j
public class EvaluationRateService {
private final EvaluationRateRepository evaluationRateRepository;
public List<EvaluationRate> getMostRecent() {
final var securityFiscalYearGroup = evaluationRateRepository.getSecurityFiscalYearGrouping();
return securityFiscalYearGroup.stream().map(group ->
findMostRecentRate(group.getSecurity(), group.getFiscalYear()))
.filter(Optional::isPresent)
.map(Optional::get)
.toList();
}
public List<EvaluationRate> getMostRecent(final Security security) {
final var securityFiscalYearGroup = evaluationRateRepository.getSecurityFiscalYearGrouping(security);
return securityFiscalYearGroup.stream().map(group ->
findMostRecentRate(group.getSecurity(), group.getFiscalYear()))
.filter(Optional::isPresent)
.map(Optional::get)
.toList();
}
public Optional<EvaluationRate> findEoyRate(final Security security, final int fiscalYear) {
return evaluationRateRepository.findBySecurityAndFiscalYear(security, fiscalYear)
.stream().filter(r -> r.getRateType() == EvaluationRate.RateType.EOY)
.findFirst();
}
public Optional<EvaluationRate> findMostRecentRate(final Security security, final int fiscalYear) {
final var rates = evaluationRateRepository.findBySecurityAndFiscalYear(security, fiscalYear);
final var sorted = rates.stream().min(Comparator
.comparing(EvaluationRate::getRateType)
.thenComparing(Comparator.comparing((EvaluationRate r) -> r.getCreatedAt()).reversed()));
return sorted;
}
}