bug fixes

This commit is contained in:
Efstratios Giannopoulos 2024-07-23 11:23:29 +03:00
parent a30bd2e194
commit d0b97066af
4 changed files with 56 additions and 29 deletions

View File

@ -17,7 +17,7 @@ import org.springframework.stereotype.Component;
import java.time.Instant; import java.time.Instant;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
import java.util.Set;
public class AccountingInfoLookup { public class AccountingInfoLookup {
@ -39,11 +39,11 @@ public class AccountingInfoLookup {
private AccountingMeasureType measure; private AccountingMeasureType measure;
public static final String _measure = "measure"; public static final String _measure = "measure";
private Set<String> groupingFields; private FieldSet groupingFields;
public static final String _groupingFields = "groupingFields"; public static final String _groupingFields = "groupingFields";
public Instant getFrom() { public Instant getFrom() {
return from; return this.from;
} }
public void setFrom(Instant from) { public void setFrom(Instant from) {
@ -51,7 +51,7 @@ public class AccountingInfoLookup {
} }
public Instant getTo() { public Instant getTo() {
return to; return this.to;
} }
public void setTo(Instant to) { public void setTo(Instant to) {
@ -59,7 +59,7 @@ public class AccountingInfoLookup {
} }
public List<AccountingValueType> getTypes() { public List<AccountingValueType> getTypes() {
return types; return this.types;
} }
public void setTypes(List<AccountingValueType> types) { public void setTypes(List<AccountingValueType> types) {
@ -67,7 +67,7 @@ public class AccountingInfoLookup {
} }
public List<AccountingAggregateType> getAggregateTypes() { public List<AccountingAggregateType> getAggregateTypes() {
return aggregateTypes; return this.aggregateTypes;
} }
public void setAggregateTypes(List<AccountingAggregateType> aggregateTypes) { public void setAggregateTypes(List<AccountingAggregateType> aggregateTypes) {
@ -75,7 +75,7 @@ public class AccountingInfoLookup {
} }
public AccountingDataRangeType getDateRangeType() { public AccountingDataRangeType getDateRangeType() {
return dateRangeType; return this.dateRangeType;
} }
public void setDateRangeType(AccountingDataRangeType dateRangeType) { public void setDateRangeType(AccountingDataRangeType dateRangeType) {
@ -83,18 +83,18 @@ public class AccountingInfoLookup {
} }
public AccountingMeasureType getMeasure() { public AccountingMeasureType getMeasure() {
return measure; return this.measure;
} }
public void setMeasure(AccountingMeasureType measure) { public void setMeasure(AccountingMeasureType measure) {
this.measure = measure; this.measure = measure;
} }
public Set<String> getGroupingFields() { public FieldSet getGroupingFields() {
return groupingFields; return this.groupingFields;
} }
public void setGroupingFields(Set<String> groupingFields) { public void setGroupingFields(FieldSet groupingFields) {
this.groupingFields = groupingFields; this.groupingFields = groupingFields;
} }
@ -121,24 +121,24 @@ public class AccountingInfoLookup {
return Arrays.asList( return Arrays.asList(
this.spec() this.spec()
.must(() -> !this.isNull(item.getMeasure())) .must(() -> !this.isNull(item.getMeasure()))
.failOn(AccountingInfoLookup._measure).failWith(messageSource.getMessage("Validation_Required", new Object[]{AccountingInfoLookup._measure}, LocaleContextHolder.getLocale())), .failOn(AccountingInfoLookup._measure).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{AccountingInfoLookup._measure}, LocaleContextHolder.getLocale())),
this.spec() this.spec()
.must(() -> !this.isNull(item.getDateRangeType())) .must(() -> !this.isNull(item.getDateRangeType()))
.failOn(AccountingInfoLookup._dateRangeType).failWith(messageSource.getMessage("Validation_Required", new Object[]{AccountingInfoLookup._dateRangeType}, LocaleContextHolder.getLocale())), .failOn(AccountingInfoLookup._dateRangeType).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{AccountingInfoLookup._dateRangeType}, LocaleContextHolder.getLocale())),
this.spec() this.spec()
.iff(()-> !this.isNull(item.getDateRangeType()) && item.getDateRangeType().equals(AccountingDataRangeType.Custom)) .iff(()-> !this.isNull(item.getDateRangeType()) && item.getDateRangeType().equals(AccountingDataRangeType.Custom))
.must(() -> !this.isNull(item.getFrom())) .must(() -> !this.isNull(item.getFrom()))
.failOn(AccountingInfoLookup._from).failWith(messageSource.getMessage("Validation_Required", new Object[]{AccountingInfoLookup._from}, LocaleContextHolder.getLocale())), .failOn(AccountingInfoLookup._from).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{AccountingInfoLookup._from}, LocaleContextHolder.getLocale())),
this.spec() this.spec()
.iff(()-> !this.isNull(item.getDateRangeType()) && item.getDateRangeType().equals(AccountingDataRangeType.Custom)) .iff(()-> !this.isNull(item.getDateRangeType()) && item.getDateRangeType().equals(AccountingDataRangeType.Custom))
.must(() -> !this.isNull(item.getTo())) .must(() -> !this.isNull(item.getTo()))
.failOn(AccountingInfoLookup._to).failWith(messageSource.getMessage("Validation_Required", new Object[]{AccountingInfoLookup._to}, LocaleContextHolder.getLocale())), .failOn(AccountingInfoLookup._to).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{AccountingInfoLookup._to}, LocaleContextHolder.getLocale())),
this.spec() this.spec()
.must(() -> !this.isListNullOrEmpty(item.getAggregateTypes())) .must(() -> !this.isListNullOrEmpty(item.getAggregateTypes()))
.failOn(AccountingInfoLookup._aggregateTypes).failWith(messageSource.getMessage("Validation_Required", new Object[]{AccountingInfoLookup._aggregateTypes}, LocaleContextHolder.getLocale())), .failOn(AccountingInfoLookup._aggregateTypes).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{AccountingInfoLookup._aggregateTypes}, LocaleContextHolder.getLocale())),
this.spec() this.spec()
.must(() -> !this.isNull(item.getGroupingFields())) .must(() -> !this.isNull(item.getGroupingFields()))
.failOn(AccountingInfoLookup._groupingFields).failWith(messageSource.getMessage("Validation_Required", new Object[]{AccountingInfoLookup._groupingFields}, LocaleContextHolder.getLocale())) .failOn(AccountingInfoLookup._groupingFields).failWith(this.messageSource.getMessage("Validation_Required", new Object[]{AccountingInfoLookup._groupingFields}, LocaleContextHolder.getLocale()))
); );
} }
} }

View File

@ -0,0 +1,19 @@
package org.opencdmp.query.lookup.accounting;
import java.util.List;
public class FieldSet{
private List<String> fields;
public FieldSet(List<String> fields) {
this.fields = fields;
}
public List<String> getFields() {
return this.fields;
}
public void setFields(List<String> fields) {
this.fields = fields;
}
}

View File

@ -1,5 +1,8 @@
package org.opencdmp.service.accounting; package org.opencdmp.service.accounting;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import gr.cite.commons.web.oidc.filter.webflux.TokenExchangeCacheService; import gr.cite.commons.web.oidc.filter.webflux.TokenExchangeCacheService;
import gr.cite.commons.web.oidc.filter.webflux.TokenExchangeFilterFunction; import gr.cite.commons.web.oidc.filter.webflux.TokenExchangeFilterFunction;
import gr.cite.commons.web.oidc.filter.webflux.TokenExchangeModel; import gr.cite.commons.web.oidc.filter.webflux.TokenExchangeModel;
@ -23,10 +26,14 @@ import org.opencdmp.integrationevent.outbox.accountingentrycreated.AccountingEnt
import org.opencdmp.model.AccountingAggregateResultItem; import org.opencdmp.model.AccountingAggregateResultItem;
import org.opencdmp.query.UserCredentialQuery; import org.opencdmp.query.UserCredentialQuery;
import org.opencdmp.query.lookup.accounting.AccountingInfoLookup; import org.opencdmp.query.lookup.accounting.AccountingInfoLookup;
import org.opencdmp.query.lookup.accounting.FieldSet;
import org.slf4j.LoggerFactory; import org.slf4j.LoggerFactory;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.MessageSource; import org.springframework.context.MessageSource;
import org.springframework.context.i18n.LocaleContextHolder; import org.springframework.context.i18n.LocaleContextHolder;
import org.springframework.http.MediaType;
import org.springframework.http.codec.json.Jackson2JsonDecoder;
import org.springframework.http.codec.json.Jackson2JsonEncoder;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.web.reactive.function.client.ExchangeFilterFunction; import org.springframework.web.reactive.function.client.ExchangeFilterFunction;
import org.springframework.web.reactive.function.client.WebClient; import org.springframework.web.reactive.function.client.WebClient;
@ -42,8 +49,8 @@ import java.security.NoSuchAlgorithmException;
import java.time.Instant; import java.time.Instant;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.List;
import java.util.Map; import java.util.Map;
import java.util.Set;
@Service @Service
public class AccountingServiceImpl implements AccountingService { public class AccountingServiceImpl implements AccountingService {
@ -82,7 +89,7 @@ public class AccountingServiceImpl implements AccountingService {
if (this.clients.containsKey(repositoryId)) return this.clients.get(repositoryId); if (this.clients.containsKey(repositoryId)) return this.clients.get(repositoryId);
//GK: It's register time //GK: It's register time
AccountingSourceEntity source = accountingProperties.getSources().stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst().orElse(null); AccountingSourceEntity source = this.accountingProperties.getSources().stream().filter(x -> x.getRepositoryId().equals(repositoryId)).findFirst().orElse(null);
if (source != null) { if (source != null) {
TokenExchangeModel tokenExchangeModel = new TokenExchangeModel("accounting:" + source, source.getIssuerUrl(), source.getClientId(), source.getClientSecret(), source.getScope()); TokenExchangeModel tokenExchangeModel = new TokenExchangeModel("accounting:" + source, source.getIssuerUrl(), source.getClientId(), source.getClientSecret(), source.getScope());
TokenExchangeFilterFunction apiKeyExchangeFilterFunction = new TokenExchangeFilterFunction(this.tokenExchangeCacheService, tokenExchangeModel); TokenExchangeFilterFunction apiKeyExchangeFilterFunction = new TokenExchangeFilterFunction(this.tokenExchangeCacheService, tokenExchangeModel);
@ -91,9 +98,10 @@ public class AccountingServiceImpl implements AccountingService {
exchangeFilterFunctions.add(apiKeyExchangeFilterFunction); exchangeFilterFunctions.add(apiKeyExchangeFilterFunction);
exchangeFilterFunctions.add(logRequest()); exchangeFilterFunctions.add(logRequest());
exchangeFilterFunctions.add(logResponse()); exchangeFilterFunctions.add(logResponse());
}).codecs(codecs -> codecs }).codecs(codecs -> {
.defaultCodecs() codecs.defaultCodecs().jackson2JsonDecoder(new Jackson2JsonDecoder(new ObjectMapper().configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false).registerModule(new JavaTimeModule()), MediaType.APPLICATION_JSON));
).build(); codecs.defaultCodecs().jackson2JsonEncoder(new Jackson2JsonEncoder(new ObjectMapper().configure(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS, false).registerModule(new JavaTimeModule()), MediaType.APPLICATION_JSON));
}).build();
AccountingClientImpl accounting = new AccountingClientImpl(webClient); AccountingClientImpl accounting = new AccountingClientImpl(webClient);
this.clients.put(repositoryId, accounting); this.clients.put(repositoryId, accounting);
return accounting; return accounting;
@ -152,14 +160,14 @@ public class AccountingServiceImpl implements AccountingService {
lookup.setAggregateTypes(new ArrayList<>()); lookup.setAggregateTypes(new ArrayList<>());
lookup.getAggregateTypes().add(AccountingAggregateType.Sum); lookup.getAggregateTypes().add(AccountingAggregateType.Sum);
lookup.setGroupingFields(Set.of( lookup.setGroupingFields(new FieldSet(List.of(
AccountingEntryCreatedIntegrationEvent._serviceId, AccountingEntryCreatedIntegrationEvent._serviceId,
AccountingEntryCreatedIntegrationEvent._action, AccountingEntryCreatedIntegrationEvent._action,
AccountingEntryCreatedIntegrationEvent._resource, AccountingEntryCreatedIntegrationEvent._resource,
AccountingEntryCreatedIntegrationEvent._userId AccountingEntryCreatedIntegrationEvent._userId
)); )));
this.validatorFactory.validator(AccountingInfoLookup.AccountingInfoLookupValidator.class).validateForce(lookup); // this.validatorFactory.validator(AccountingInfoLookup.AccountingInfoLookupValidator.class).validateForce(lookup);
AccountingAggregateResultItem accountingAggregateResultItem = null; AccountingAggregateResultItem accountingAggregateResultItem = null;
try { try {