Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
596 changes: 307 additions & 289 deletions pom.xml

Large diffs are not rendered by default.

2 changes: 2 additions & 0 deletions src/main/java/it/gov/pagopa/apiconfig/Application.java
Original file line number Diff line number Diff line change
Expand Up @@ -3,11 +3,13 @@
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.annotation.ComponentScan;

import javax.annotation.PostConstruct;
import java.util.TimeZone;

@SpringBootApplication
@ComponentScan(basePackages = {"it.gov.pagopa.apiconfig"})
public class Application {

@Value("${timezone}")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ public void logApiInvocation(JoinPoint joinPoint) {

@AfterReturning(value = "restController()", returning = "result")
public void returnApiInvocation(JoinPoint joinPoint, Object result) {
log.info(
"Successful API operation {} - result: {}", joinPoint.getSignature().getName(), result.getClass());
// log.info(
// "Successful API operation {} - result: {}", joinPoint.getSignature().getName(), result.getClass());
}

@AfterReturning(value = "errorHandler()", returning = "result")
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package it.gov.pagopa.apiconfig.cache.controller;

import graphql.ExecutionResult;
import graphql.GraphQL;
import graphql.GraphQLException;
import graphql.schema.GraphQLSchema;
import io.leangen.graphql.GraphQLSchemaGenerator;
import it.gov.pagopa.apiconfig.cache.service.ApiConfigCacheResolver;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletRequest;
import java.util.Map;

@RestController
public class GraphqlController {

private final GraphQL graphQL;

@Autowired
public GraphqlController(ApiConfigCacheResolver apiConfigCacheResolver) {
GraphQLSchema schema = new GraphQLSchemaGenerator()
.withBasePackages("it.gov.pagopa")
.withOperationsFromSingleton(apiConfigCacheResolver, ApiConfigCacheResolver.class)
.generate();
this.graphQL = new GraphQL.Builder(schema)
.build();
}

@PostMapping(value = "/graphql")
public Map<String, Object> execute(@RequestBody Map<String, String> request, HttpServletRequest raw)
throws GraphQLException {
ExecutionResult result = graphQL.execute(request.get("query"));
return result.getData();
}

}
Original file line number Diff line number Diff line change
@@ -0,0 +1,73 @@
package it.gov.pagopa.apiconfig.cache.model;

import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonProperty;
import io.leangen.graphql.annotations.GraphQLArgument;
import io.leangen.graphql.annotations.GraphQLQuery;
import it.gov.pagopa.apiconfig.cache.model.latest.cds.CdsCategory;
import it.gov.pagopa.apiconfig.cache.model.latest.cds.CdsService;
import it.gov.pagopa.apiconfig.cache.model.latest.cds.CdsSubject;
import it.gov.pagopa.apiconfig.cache.model.latest.cds.CdsSubjectService;
import it.gov.pagopa.apiconfig.cache.model.latest.configuration.ConfigurationKey;
import it.gov.pagopa.apiconfig.cache.model.latest.configuration.FtpServer;
import it.gov.pagopa.apiconfig.cache.model.latest.configuration.GdeConfiguration;
import it.gov.pagopa.apiconfig.cache.model.latest.configuration.MetadataDict;
import it.gov.pagopa.apiconfig.cache.model.latest.configuration.PaymentType;
import it.gov.pagopa.apiconfig.cache.model.latest.configuration.Plugin;
import it.gov.pagopa.apiconfig.cache.model.latest.creditorinstitution.*;
import it.gov.pagopa.apiconfig.cache.model.latest.psp.BrokerPsp;
import it.gov.pagopa.apiconfig.cache.model.latest.psp.Channel;
import it.gov.pagopa.apiconfig.cache.model.latest.psp.PaymentServiceProvider;
import it.gov.pagopa.apiconfig.cache.model.latest.psp.PspChannelPaymentType;
import it.gov.pagopa.apiconfig.cache.model.latest.psp.PspInformation;
import java.io.Serializable;
import java.time.ZonedDateTime;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

import lombok.*;

@Getter
@Setter
@JsonInclude(JsonInclude.Include.NON_NULL)
public class FullDataList implements Serializable {

@JsonProperty(required = true)
private String version;

@JsonProperty(required = true)
private ZonedDateTime timestamp;

@JsonProperty(required = true)
private String cacheVersion;

@JsonProperty(required = true)
private List<CreditorInstitution> creditorInstitutions;

@GraphQLQuery(name = "creditorInstitutions")
public List<CreditorInstitution> findCreditorInstitution(
@GraphQLArgument(name = "creditorInstitutionCode") String creditorInstitutionCode,
@GraphQLArgument(name = "enabled") Boolean enabled) {

if (creditorInstitutionCode != null) {
return this.creditorInstitutions.stream()
.filter(ci -> ci.getCreditorInstitutionCode().equals(creditorInstitutionCode))
.collect(Collectors.toList());
}
return this.creditorInstitutions;
}

@GraphQLQuery(name = "creditorInstitutions")
public List<CreditorInstitution> getEnabled(
@GraphQLArgument(name = "enabled") Boolean enabled) {

if (enabled != null) {
return this.creditorInstitutions.stream()
.filter(ci -> ci.getEnabled().equals(enabled))
.collect(Collectors.toList());
}
return this.creditorInstitutions;
}

}
Original file line number Diff line number Diff line change
@@ -1,5 +1,8 @@
package it.gov.pagopa.apiconfig.cache.model.latest.common;

import lombok.AllArgsConstructor;
import lombok.NoArgsConstructor;

import java.io.Serializable;
import java.util.Arrays;
import java.util.Optional;
Expand Down
Original file line number Diff line number Diff line change
@@ -1,17 +1,14 @@
package it.gov.pagopa.apiconfig.cache.model.latest.common;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.ToString;
import lombok.*;

import java.io.Serializable;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Proxy implements Serializable {
@JsonProperty(value = "proxy_host")
private String proxyHost;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,10 +4,12 @@
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@AllArgsConstructor
@NoArgsConstructor
@Builder
@Data
public class Redirect implements Serializable {
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Service implements Serializable {

@JsonProperty(value = "path")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,12 +4,14 @@
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serializable;

@Data
@Builder
@AllArgsConstructor
@NoArgsConstructor
public class Timeouts implements Serializable {
@JsonProperty(value = "timeout_a", required = true)
private Long timeoutA;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
package it.gov.pagopa.apiconfig.cache.service;

import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
import io.leangen.graphql.annotations.GraphQLArgument;
import io.leangen.graphql.annotations.GraphQLQuery;
import it.gov.pagopa.apiconfig.cache.controller.CacheController;
import it.gov.pagopa.apiconfig.cache.model.FullData;
import it.gov.pagopa.apiconfig.cache.model.FullDataList;
import java.io.IOException;
import java.util.HashMap;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

@Service
public class ApiConfigCacheResolver {

@Autowired private CacheController cacheController;

@GraphQLQuery(name = "getCache")
public FullDataList getCache() throws IOException {
ObjectMapper objectMapper = new ObjectMapper();
objectMapper.registerModule(new JavaTimeModule());
HashMap<String, Object> cache = cacheController.getInMemoryCache();
String jsonCache = objectMapper.writeValueAsString(cache);
FullData fullData = objectMapper.readValue(jsonCache, FullData.class);

FullDataList fullDataList = new FullDataList();
fullDataList.setCacheVersion(fullData.getCacheVersion());
fullDataList.setVersion(fullData.getVersion());
fullDataList.setTimestamp(fullData.getTimestamp());
fullDataList.setCreditorInstitutions(
fullData.getCreditorInstitutions().values().stream().toList());
return fullDataList;
}

@GraphQLQuery(name = "getFull")
public HashMap<String, Object> getFull() throws IOException {
return cacheController.getInMemoryCache();
}

}
4 changes: 3 additions & 1 deletion src/main/resources/application.properties
Original file line number Diff line number Diff line change
Expand Up @@ -86,4 +86,6 @@ sendEvent=${SEND_EVENT:false}
canary=${CANARY:false}
in_progress.ttl=${IN_PROGRESS_TTL:15}
xls.mask-passwords=${XLS_MASK_PASSWORDS:false}
timezone=${TIMEZONE:Europe/Rome}
timezone=${TIMEZONE:Europe/Rome}

spring.graphql.graphiql.enabled=true