diff --git a/jars/client-api-gde/.gitignore b/jars/client-api-gde/.gitignore new file mode 100644 index 0000000000..3946d85115 --- /dev/null +++ b/jars/client-api-gde/.gitignore @@ -0,0 +1,87 @@ +*.class +# Mobile Tools for Java (J2ME) +.mtj.tmp/ +# Package Files # +*.jar +*.war +*.ear +# exclude jar for gradle wrapper +!gradle/wrapper/*.jar +# virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml +hs_err_pid* +# build files +**/target +target +.gradle +build +.classpath +.openapi-generator/ +.project +.settings/ +.travis.yml +build.gradle +build.sbt +git_push.sh +gradle.properties +gradle/ +gradlew +gradlew.bat +settings.gradle +.github/ +api/ +docs/ + + + +# custom property filters +#/src/main/resources/filters/* + +# maven version backups +pom.xml.versionsBackup + +# compiled output +/dist +/tmp +/out-tsc +/target +/bin +_build + +# swagger +.swagger-codegen + +# dependencies +/node_modules + +# IDEs and editors +/.idea +.project +.classpath +.c9/ +*.launch +.settings/ +*.sublime-workspace + +# IDE - VSCode +.vscode/* +!.vscode/settings.json +!.vscode/tasks.json +!.vscode/launch.json +!.vscode/extensions.json + +# misc +/.sass-cache +/connect.lock +/coverage +/libpeerconnection.log +npm-debug.log +testem.log +/typings + +# e2e +/e2e/*.js +/e2e/*.map + +# System Files +.DS_Store +Thumbs.db diff --git a/jars/client-api-gde/.openapi-generator-ignore b/jars/client-api-gde/.openapi-generator-ignore new file mode 100644 index 0000000000..75af75a4f5 --- /dev/null +++ b/jars/client-api-gde/.openapi-generator-ignore @@ -0,0 +1,37 @@ +# Swagger Codegen Ignore +# Generated by swagger-codegen https://github.com/swagger-api/swagger-codegen + +# Use this file to prevent files from being overwritten by the generator. +# The patterns follow closely to .gitignore or .dockerignore. + +# As an example, the C# client generator defines ApiClient.cs. +# You can make changes and tell Swagger Codgen to ignore just this file by uncommenting the following line: +#ApiClient.cs + +# You can match any string of characters against a directory, file or extension with a single asterisk (*): +#foo/*/qux +# The above matches foo/bar/qux and foo/baz/qux, but not foo/bar/baz/qux + +# You can recursively match patterns against a directory, file or extension with a double asterisk (**): +#foo/**/qux +# This matches foo/bar/qux, foo/baz/qux, and foo/bar/baz/qux + +# You can also negate patterns with an exclamation (!). +# For example, you can ignore all files in a docs folder with the file extension .md: +#docs/*.md +# Then explicitly reverse the ignore rule for a single file: +#!docs/README.md + +# GEN +# IMPL +# TEST +**/**/*Test.java +**/*DocumentationConfig.java +**/OpenAPI2SpringBoot.java +pom.xml +README.md +src/**/* +**/*ApiController.java +.gitignore + + diff --git a/jars/client-api-gde/pom.xml b/jars/client-api-gde/pom.xml new file mode 100644 index 0000000000..d9e3d0c8e6 --- /dev/null +++ b/jars/client-api-gde/pom.xml @@ -0,0 +1,203 @@ + + + 4.0.0 + + + org.springframework.boot + spring-boot-starter-parent + 2.7.2 + + + + it.govpay + client-api-gde + jar + GovPay - jars - Client REST API Giornale degli Eventi + 4.0.0 + + + 17 + ${java.version} + ${java.version} + ${java.version} + + + 3.8.0 + 3.2.3 + + ../.. + ${rel-to-parent}/src/main/resources/filters/${env}.filter.properties + + + 6.0.0 + + + 1.5.1.Final + + + 1.18.24 + + + 2.1.2 + 1.6.2 + + + 0.2.1 + + + 3.0.2 + + + + + + org.springframework.boot + spring-boot-starter-webflux + + + + org.springframework.boot + spring-boot-starter + + + org.springframework.boot + spring-boot-starter-logging + + + + + + org.springframework.boot + spring-boot-starter-log4j2 + + + + org.springframework + spring-core + + + + org.springframework + spring-web + + + + org.springframework + spring-context + + + + org.springframework + spring-context-support + + + + org.projectlombok + lombok + true + + + + org.mapstruct + mapstruct + ${mapstruct.version} + + + + io.swagger + swagger-annotations + ${swagger-annotations.version} + + + + org.openapitools + jackson-databind-nullable + ${jackson.databind.nullable.version} + + + + javax.annotation + javax.annotation-api + + + + com.google.code.findbugs + jsr305 + ${jsr305.version} + + + + + + + ${filter-file} + + + + src/main/resources + + + + + org.apache.maven.plugins + maven-compiler-plugin + + ${java.version} + ${java.version} + + + org.projectlombok + lombok + ${org.projectlombok.version} + + + org.mapstruct + mapstruct-processor + ${mapstruct.version} + + + + -Amapstruct.suppressGeneratorTimestamp=true + -Amapstruct.defaultComponentModel=spring + + + + + org.openapitools + openapi-generator-maven-plugin + ${openapi.tool.codegen.version} + + + + generate + + generate-sources-client-govpay-gde-v1 + generate-sources + + ${project.basedir}/src/main/resources/openapi.yaml + java + + is + java8 + webclient + jackson + target/generated-sources/java/ + it.govpay.gde.v1.api + it.govpay.gde.v1.api.impl + it.govpay.gde.v1.model + true + false + + ${project.basedir}/target + true + false + false + + + + + + + + + \ No newline at end of file diff --git a/jars/client-api-gde/src/main/java/it/govpay/gde/GdeInvoker.java b/jars/client-api-gde/src/main/java/it/govpay/gde/GdeInvoker.java new file mode 100644 index 0000000000..f34ff446b8 --- /dev/null +++ b/jars/client-api-gde/src/main/java/it/govpay/gde/GdeInvoker.java @@ -0,0 +1,35 @@ +package it.govpay.gde; + +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import org.springframework.web.reactive.function.client.WebClientResponseException; + +import it.govpay.gde.v1.api.GdeControllerApi; +import it.govpay.gde.v1.api.impl.ApiClient; +import it.govpay.gde.v1.model.NuovoEvento; + +public class GdeInvoker { + + private static Logger logger = LoggerFactory.getLogger(GdeInvoker.class); + + private GdeControllerApi gdeApi; + + public GdeInvoker(String gdeUrl){ + ApiClient apiClient = new ApiClient(); + apiClient.setBasePath(gdeUrl); + gdeApi = new GdeControllerApi(apiClient ); + } + + public void salvaEvento(NuovoEvento nuovoEvento) { + + try { + logger.debug("AAAAAA Spedizione Evento in modalita' asincrona"); + this.gdeApi.addEvento(nuovoEvento ) + .subscribe(response -> logger.debug("AAAAAA Response: " + response)); + + logger.debug("AAAAAA Spedizione Evento in modalita' asincrona, ok"); + }catch (WebClientResponseException e) { + logger.error("AAAAAA Errore durante l'invocazione GDE: " + e.getMessage(),e); + } + } +} diff --git a/jars/client-api-gde/src/main/resources/openapi.yaml b/jars/client-api-gde/src/main/resources/openapi.yaml new file mode 100644 index 0000000000..4aaef791a7 --- /dev/null +++ b/jars/client-api-gde/src/main/resources/openapi.yaml @@ -0,0 +1,491 @@ +openapi: 3.0.1 +info: + title: OpenAPI definition + version: v0 +servers: +- url: http://localhost:8080/govpay/backend/api/gde + description: Generated server url +paths: + /eventi: + get: + tags: + - gde-controller + operationId: findEventi + parameters: + - name: pageable + in: query + required: true + schema: + $ref: '#/components/schemas/Pageable' + - name: dataDa + in: query + required: false + schema: + type: string + format: date-time + - name: dataA + in: query + required: false + schema: + type: string + format: date-time + - name: idDominio + in: query + required: false + schema: + type: string + - name: iuv + in: query + required: false + schema: + type: string + - name: ccp + in: query + required: false + schema: + type: string + - name: idA2A + in: query + required: false + schema: + type: string + - name: idPendenza + in: query + required: false + schema: + type: string + - name: idPagamento + in: query + required: false + schema: + type: string + - name: categoriaEvento + in: query + required: false + schema: + type: string + enum: + - INTERNO + - INTERFACCIA + - UTENTE + - name: esitoEvento + in: query + required: false + schema: + type: string + enum: + - OK + - KO + - FAIL + - name: ruoloEvento + in: query + required: false + schema: + type: string + enum: + - CLIENT + - SERVER + - name: sottotipoEvento + in: query + required: false + schema: + type: string + - name: tipoEvento + in: query + required: false + schema: + type: string + - name: componenteEvento + in: query + required: false + schema: + type: string + enum: + - API_BACKOFFICE + - API_ENTE + - API_PAGOPA + - API_PAGAMENTO + - API_PENDENZE + - API_RAGIONERIA + - API_BACKEND_IO + - API_SECIM + - API_MYPIVOT + - API_MAGGIOLI_JPPA + - API_GOVPAY + - API_HYPERSIC_APK + - API_USER + - GOVPAY + - name: severitaDa + in: query + required: false + schema: + type: integer + format: int32 + - name: severitaA + in: query + required: false + schema: + type: integer + format: int32 + responses: + "404": + description: Not Found + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "500": + description: Internal Server Error + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "422": + description: Unprocessable Entity + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/PagedModelEventoIndexModel' + post: + tags: + - gde-controller + operationId: addEvento + requestBody: + content: + application/json: + schema: + $ref: '#/components/schemas/nuovoEvento' + required: true + responses: + "404": + description: Not Found + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "500": + description: Internal Server Error + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "422": + description: Unprocessable Entity + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "200": + description: OK + content: + '*/*': + schema: + type: object + /eventi/{id}: + get: + tags: + - gde-controller + operationId: getEventoById + parameters: + - name: id + in: path + required: true + schema: + type: integer + format: int64 + responses: + "404": + description: Not Found + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "500": + description: Internal Server Error + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "422": + description: Unprocessable Entity + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "200": + description: OK + content: + application/json: + schema: + $ref: '#/components/schemas/evento' +components: + schemas: + problem: + type: object + properties: + type: + type: string + format: uri + title: + type: string + status: + type: integer + format: int32 + detail: + type: string + instance: + type: string + format: uri + Links: + type: object + additionalProperties: + $ref: '#/components/schemas/Link' + datiPagoPA: + type: object + properties: + idPsp: + type: string + idCanale: + type: string + idIntermediarioPsp: + type: string + tipoVersamento: + type: string + modelloPagamento: + type: string + idDominio: + type: string + idIntermediario: + type: string + idStazione: + type: string + idRiconciliazione: + type: string + sct: + type: string + idFlusso: + type: string + dataFlusso: + type: string + format: date-time + idTracciato: + type: number + _links: + $ref: '#/components/schemas/Links' + nuovoEvento: + type: object + properties: + id: + type: integer + format: int64 + componente: + type: string + enum: + - API_BACKOFFICE + - API_ENTE + - API_PAGOPA + - API_PAGAMENTO + - API_PENDENZE + - API_RAGIONERIA + - API_BACKEND_IO + - API_SECIM + - API_MYPIVOT + - API_MAGGIOLI_JPPA + - API_GOVPAY + - API_HYPERSIC_APK + - API_USER + - GOVPAY + categoriaEvento: + type: string + enum: + - INTERNO + - INTERFACCIA + - UTENTE + ruolo: + type: string + enum: + - CLIENT + - SERVER + tipoEvento: + type: string + esito: + type: string + enum: + - OK + - KO + - FAIL + dataEvento: + type: string + format: date-time + durataEvento: + type: integer + format: int64 + sottotipoEvento: + type: string + sottotipoEsito: + type: string + dettaglioEsito: + type: string + idDominio: + type: string + iuv: + type: string + ccp: + type: string + idA2A: + type: string + idPendenza: + type: string + idPagamento: + type: string + datiPagoPA: + $ref: '#/components/schemas/datiPagoPA' + severita: + type: integer + format: int32 + parametriRichiesta: + type: object + parametriRisposta: + type: object + Pageable: + type: object + properties: + page: + minimum: 0 + type: integer + format: int32 + size: + minimum: 1 + type: integer + format: int32 + sort: + type: array + items: + type: string + PageMetadata: + type: object + properties: + size: + type: integer + format: int64 + totalElements: + type: integer + format: int64 + totalPages: + type: integer + format: int64 + number: + type: integer + format: int64 + PagedModelEventoIndexModel: + type: object + properties: + _embedded: + type: object + properties: + eventi: + type: array + items: + $ref: '#/components/schemas/evento' + _links: + $ref: '#/components/schemas/Links' + page: + $ref: '#/components/schemas/PageMetadata' + evento: + type: object + properties: + id: + type: integer + format: int64 + componente: + type: string + enum: + - API_BACKOFFICE + - API_ENTE + - API_PAGOPA + - API_PAGAMENTO + - API_PENDENZE + - API_RAGIONERIA + - API_BACKEND_IO + - API_SECIM + - API_MYPIVOT + - API_MAGGIOLI_JPPA + - API_GOVPAY + - API_HYPERSIC_APK + - API_USER + - GOVPAY + categoriaEvento: + type: string + enum: + - INTERNO + - INTERFACCIA + - UTENTE + ruolo: + type: string + enum: + - CLIENT + - SERVER + tipoEvento: + type: string + esito: + type: string + enum: + - OK + - KO + - FAIL + dataEvento: + type: string + format: date-time + durataEvento: + type: integer + format: int64 + sottotipoEvento: + type: string + sottotipoEsito: + type: string + dettaglioEsito: + type: string + idDominio: + type: string + iuv: + type: string + ccp: + type: string + idA2A: + type: string + idPendenza: + type: string + idPagamento: + type: string + datiPagoPA: + $ref: '#/components/schemas/datiPagoPA' + severita: + type: integer + format: int32 + _links: + $ref: '#/components/schemas/Links' + Link: + type: object + properties: + href: + type: string + hreflang: + type: string + title: + type: string + type: + type: string + deprecation: + type: string + profile: + type: string + name: + type: string + templated: + type: boolean diff --git a/jars/core/pom.xml b/jars/core/pom.xml index e9c65b0250..4c79038392 100644 --- a/jars/core/pom.xml +++ b/jars/core/pom.xml @@ -62,6 +62,12 @@ jppapdp-beans jar + + + it.govpay + client-api-gde + jar + commons-codec diff --git a/jars/core/src/main/java/it/govpay/core/business/GiornaleEventi.java b/jars/core/src/main/java/it/govpay/core/business/GiornaleEventi.java index 2dd1cd0c7e..b2982d32dd 100644 --- a/jars/core/src/main/java/it/govpay/core/business/GiornaleEventi.java +++ b/jars/core/src/main/java/it/govpay/core/business/GiornaleEventi.java @@ -22,20 +22,14 @@ import java.util.Date; import org.apache.commons.lang.StringUtils; -import org.openspcoop2.utils.LoggerWrapperFactory; import org.openspcoop2.utils.logger.beans.context.core.Role; import org.openspcoop2.utils.service.beans.HttpMethodEnum; -import org.openspcoop2.utils.service.context.ContextThreadLocal; -import org.slf4j.Logger; -import it.govpay.bd.BDConfigWrapper; import it.govpay.bd.configurazione.model.GdeEvento; -import it.govpay.bd.configurazione.model.GdeInterfaccia; -import it.govpay.bd.configurazione.model.Giornale; import it.govpay.bd.configurazione.model.GdeEvento.DumpEnum; import it.govpay.bd.configurazione.model.GdeEvento.LogEnum; -import it.govpay.bd.model.Evento; -import it.govpay.bd.pagamento.EventiBD; +import it.govpay.bd.configurazione.model.GdeInterfaccia; +import it.govpay.bd.configurazione.model.Giornale; import it.govpay.core.utils.EventoContext; import it.govpay.core.utils.EventoContext.Categoria; import it.govpay.core.utils.EventoContext.Componente; @@ -45,21 +39,9 @@ public class GiornaleEventi { - private static Logger log = LoggerWrapperFactory.getLogger(GiornaleEventi.class ); - public GiornaleEventi() { } - public void registraEvento(Evento evento) { - BDConfigWrapper configWrapper = new BDConfigWrapper(ContextThreadLocal.get().getTransactionId(), true); - try { - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(evento); - } catch (Exception e) { - log.error("Errore nella registrazione degli eventi", e); - } - } - public static GdeInterfaccia getConfigurazioneComponente(Componente componente, Giornale giornale) { switch(componente) { case API_BACKOFFICE: diff --git a/jars/core/src/main/java/it/govpay/core/business/Incassi.java b/jars/core/src/main/java/it/govpay/core/business/Incassi.java index 0ba7b5a63e..1b15bcbfe9 100644 --- a/jars/core/src/main/java/it/govpay/core/business/Incassi.java +++ b/jars/core/src/main/java/it/govpay/core/business/Incassi.java @@ -44,7 +44,6 @@ import it.govpay.bd.model.SingoloVersamento; import it.govpay.bd.model.TipoVersamentoDominio; import it.govpay.bd.model.eventi.DatiPagoPA; -import it.govpay.bd.pagamento.EventiBD; import it.govpay.bd.pagamento.FrBD; import it.govpay.bd.pagamento.IncassiBD; import it.govpay.bd.pagamento.NotificheAppIoBD; @@ -52,6 +51,7 @@ import it.govpay.bd.pagamento.PromemoriaBD; import it.govpay.bd.pagamento.RendicontazioniBD; import it.govpay.bd.pagamento.VersamentiBD; +import it.govpay.core.dao.eventi.utils.GdeUtils; import it.govpay.core.dao.pagamenti.dto.RichiestaIncassoDTO; import it.govpay.core.dao.pagamenti.dto.RichiestaIncassoDTOResponse; import it.govpay.core.exceptions.EcException; @@ -394,22 +394,8 @@ public RichiestaIncassoDTOResponse elaboraRiconciliazione(String codDomino, Stri incassiBD.closeConnection(); if(listaEventi.size() >0) { - EventiBD eventiBD = null; - - try { - eventiBD = new EventiBD(configWrapper); - eventiBD.setupConnection(configWrapper.getTransactionID()); - eventiBD.setAtomica(false); - - for (Evento evento : listaEventi) { - eventiBD.insertEvento(evento); - } - } catch (ServiceException e) { - throw new GovPayException(e); - } finally { - if(eventiBD != null) { - eventiBD.closeConnection(); - } + for (Evento evento : listaEventi) { + GdeUtils.salvaEvento(evento); } } } @@ -865,22 +851,8 @@ public RichiestaIncassoDTOResponse richiestaIncasso(RichiestaIncassoDTO richiest incassiBD.closeConnection(); if(listaEventi.size() >0) { - EventiBD eventiBD = null; - - try { - eventiBD = new EventiBD(configWrapper); - eventiBD.setupConnection(configWrapper.getTransactionID()); - eventiBD.setAtomica(false); - - for (Evento evento : listaEventi) { - eventiBD.insertEvento(evento); - } - } catch (ServiceException e) { - throw new GovPayException(e); - } finally { - if(eventiBD != null) { - eventiBD.closeConnection(); - } + for (Evento evento : listaEventi) { + GdeUtils.salvaEvento(evento); } } } diff --git a/jars/core/src/main/java/it/govpay/core/business/Pagamento.java b/jars/core/src/main/java/it/govpay/core/business/Pagamento.java index fc7764291d..a64f54c718 100644 --- a/jars/core/src/main/java/it/govpay/core/business/Pagamento.java +++ b/jars/core/src/main/java/it/govpay/core/business/Pagamento.java @@ -52,11 +52,10 @@ import it.govpay.bd.model.Dominio; import it.govpay.bd.model.Notifica; import it.govpay.bd.model.PagamentoPortale; +import it.govpay.bd.model.PagamentoPortale.STATO; import it.govpay.bd.model.Rpt; import it.govpay.bd.model.Rr; import it.govpay.bd.model.Stazione; -import it.govpay.bd.model.PagamentoPortale.STATO; -import it.govpay.bd.pagamento.EventiBD; import it.govpay.bd.pagamento.PagamentiBD; import it.govpay.bd.pagamento.PagamentiPortaleBD; import it.govpay.bd.pagamento.RptBD; @@ -65,6 +64,7 @@ import it.govpay.core.business.model.AvviaRichiestaStornoDTO; import it.govpay.core.business.model.AvviaRichiestaStornoDTOResponse; import it.govpay.core.business.model.Risposta; +import it.govpay.core.dao.eventi.utils.GdeUtils; import it.govpay.core.exceptions.GovPayException; import it.govpay.core.exceptions.NdpException; import it.govpay.core.utils.EventoContext.Esito; @@ -72,9 +72,9 @@ import it.govpay.core.utils.GpContext; import it.govpay.core.utils.RptUtils; import it.govpay.core.utils.RrUtils; -import it.govpay.core.utils.client.exception.ClientException; import it.govpay.core.utils.client.NodoClient; import it.govpay.core.utils.client.NodoClient.Azione; +import it.govpay.core.utils.client.exception.ClientException; import it.govpay.core.utils.thread.InviaNotificaThread; import it.govpay.core.utils.thread.ThreadExecutorManager; import it.govpay.model.Canale.ModelloPagamento; @@ -242,7 +242,6 @@ private Map acquisisciPendenti(Giornale giornale, Intermediario IContext ctx = ContextThreadLocal.get(); GpContext appContext = (GpContext) ctx.getApplicationContext(); Map statiRptPendenti = new HashMap<>(); - BDConfigWrapper configWrapper = new BDConfigWrapper(ContextThreadLocal.get().getTransactionId(), true); // Ciclo sui domini, ma ciclo veramente solo se perDominio == true, // Altrimenti ci giro una sola volta @@ -373,8 +372,7 @@ private Map acquisisciPendenti(Giornale giornale, Intermediario } } finally { if(chiediListaPendentiClient != null && chiediListaPendentiClient.getEventoCtx().isRegistraEvento()) { - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(chiediListaPendentiClient.getEventoCtx().toEventoDTO()); + GdeUtils.salvaEvento(chiediListaPendentiClient.getEventoCtx()); } } } @@ -534,8 +532,7 @@ public AvviaRichiestaStornoDTOResponse avviaStorno(AvviaRichiestaStornoDTO dto) throw new GovPayException(EsitoOperazione.NDP_000, e); } finally { if(nodoInviaRRClient != null && nodoInviaRRClient.getEventoCtx().isRegistraEvento()) { - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(nodoInviaRRClient.getEventoCtx().toEventoDTO()); + GdeUtils.salvaEvento(nodoInviaRRClient.getEventoCtx()); } } } diff --git a/jars/core/src/main/java/it/govpay/core/business/Rendicontazioni.java b/jars/core/src/main/java/it/govpay/core/business/Rendicontazioni.java index eafbf270f9..9660714611 100644 --- a/jars/core/src/main/java/it/govpay/core/business/Rendicontazioni.java +++ b/jars/core/src/main/java/it/govpay/core/business/Rendicontazioni.java @@ -65,12 +65,12 @@ import it.govpay.bd.model.SingoloVersamento; import it.govpay.bd.model.Stazione; import it.govpay.bd.model.eventi.DatiPagoPA; -import it.govpay.bd.pagamento.EventiBD; import it.govpay.bd.pagamento.FrBD; import it.govpay.bd.pagamento.PagamentiBD; import it.govpay.bd.pagamento.RendicontazioniBD; import it.govpay.bd.pagamento.VersamentiBD; import it.govpay.core.beans.EsitoOperazione; +import it.govpay.core.dao.eventi.utils.GdeUtils; import it.govpay.core.exceptions.GovPayException; import it.govpay.core.exceptions.VersamentoAnnullatoException; import it.govpay.core.exceptions.VersamentoDuplicatoException; @@ -82,9 +82,9 @@ import it.govpay.core.utils.GpContext; import it.govpay.core.utils.JaxbUtils; import it.govpay.core.utils.VersamentoUtils; -import it.govpay.core.utils.client.exception.ClientException; import it.govpay.core.utils.client.NodoClient; import it.govpay.core.utils.client.NodoClient.Azione; +import it.govpay.core.utils.client.exception.ClientException; import it.govpay.model.Fr.StatoFr; import it.govpay.model.Intermediario; import it.govpay.model.Rendicontazione.EsitoRendicontazione; @@ -635,6 +635,7 @@ public boolean accept(File dir, String name) { frAcquisiti++; if(chiediFlussoRendicontazioneClient != null) { + chiediFlussoRendicontazioneClient.getEventoCtx().setDataFlusso(fr.getDataFlusso()); chiediFlussoRendicontazioneClient.getEventoCtx().setIdFr(fr.getId()); } if(!hasFrAnomalia) { @@ -659,12 +660,10 @@ public boolean accept(File dir, String name) { frNonAcquisiti++; } finally { if(chiediFlussoRendicontazioneClient != null && chiediFlussoRendicontazioneClient.getEventoCtx().isRegistraEvento()) { - EventiBD eventiBD = new EventiBD(configWrapper); - Evento eventoDTO = chiediFlussoRendicontazioneClient.getEventoCtx().toEventoDTO(); if(isAggiornamento) - eventoDTO.setSottotipoEvento(EventoContext.APIPAGOPA_SOTTOTIPOEVENTO_FLUSSO_RENDICONTAZIONE_DUPLICATO); - eventiBD.insertEvento(eventoDTO); + chiediFlussoRendicontazioneClient.getEventoCtx().setSottotipoEvento(EventoContext.APIPAGOPA_SOTTOTIPOEVENTO_FLUSSO_RENDICONTAZIONE_DUPLICATO); + GdeUtils.salvaEvento(chiediFlussoRendicontazioneClient.getEventoCtx()); } } } @@ -811,13 +810,7 @@ private List chiediListaFr(Stazione stazione, Dominio dom return flussiDaAcquisire; } finally { if(chiediFlussoRendicontazioniClient != null && chiediFlussoRendicontazioniClient.getEventoCtx().isRegistraEvento()) { - try { - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(chiediFlussoRendicontazioniClient.getEventoCtx().toEventoDTO()); - }catch (ServiceException e) { - log.error("Errore durante l'acquisizione dei flussi di rendicontazione", e); - }finally { - } + GdeUtils.salvaEvento(chiediFlussoRendicontazioniClient.getEventoCtx()); } } diff --git a/jars/core/src/main/java/it/govpay/core/business/Rpt.java b/jars/core/src/main/java/it/govpay/core/business/Rpt.java index e255fd47eb..aa80311265 100644 --- a/jars/core/src/main/java/it/govpay/core/business/Rpt.java +++ b/jars/core/src/main/java/it/govpay/core/business/Rpt.java @@ -23,15 +23,15 @@ import it.govpay.bd.model.Canale; import it.govpay.bd.model.Notifica; import it.govpay.bd.model.PagamentoPortale; +import it.govpay.bd.model.PagamentoPortale.STATO; import it.govpay.bd.model.Stazione; import it.govpay.bd.model.Versamento; -import it.govpay.bd.model.PagamentoPortale.STATO; -import it.govpay.bd.pagamento.EventiBD; import it.govpay.bd.pagamento.PagamentiPortaleBD; import it.govpay.bd.pagamento.RptBD; import it.govpay.bd.pagamento.filters.RptFilter; import it.govpay.core.beans.EsitoOperazione; import it.govpay.core.business.model.Risposta; +import it.govpay.core.dao.eventi.utils.GdeUtils; import it.govpay.core.exceptions.GovPayException; import it.govpay.core.exceptions.VersamentoAnnullatoException; import it.govpay.core.exceptions.VersamentoDuplicatoException; @@ -468,14 +468,12 @@ public List avviaTransazione(List versamenti } } finally { if(chiediStatoRptClient != null && chiediStatoRptClient.getEventoCtx().isRegistraEvento()) { - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(chiediStatoRptClient.getEventoCtx().toEventoDTO()); + GdeUtils.salvaEvento(chiediStatoRptClient.getEventoCtx()); } } } finally { if(clientInviaCarrelloRPT != null && clientInviaCarrelloRPT.getEventoCtx().isRegistraEvento()) { - EventiBD eventiBD = new EventiBD(configWrapper); for(it.govpay.bd.model.Rpt rpt : rpts) { // salvataggio id Rpt/ versamento/ pagamento clientInviaCarrelloRPT.getEventoCtx().setCodDominio(rpt.getCodDominio()); @@ -494,7 +492,7 @@ public List avviaTransazione(List versamenti clientInviaCarrelloRPT.getEventoCtx().setDescrizioneEsito(rpt.getDescrizioneStato()); } - eventiBD.insertEvento(clientInviaCarrelloRPT.getEventoCtx().toEventoDTO()); + GdeUtils.salvaEvento(clientInviaCarrelloRPT.getEventoCtx()); } } } diff --git a/jars/core/src/main/java/it/govpay/core/dao/eventi/EventiDAO.java b/jars/core/src/main/java/it/govpay/core/dao/eventi/EventiDAO.java index ce15d933c6..466f2ad724 100644 --- a/jars/core/src/main/java/it/govpay/core/dao/eventi/EventiDAO.java +++ b/jars/core/src/main/java/it/govpay/core/dao/eventi/EventiDAO.java @@ -19,9 +19,9 @@ import it.govpay.core.dao.eventi.dto.PutEventoDTO; import it.govpay.core.dao.eventi.dto.PutEventoDTOResponse; import it.govpay.core.dao.eventi.exception.EventoNonTrovatoException; +import it.govpay.core.dao.eventi.utils.GdeUtils; import it.govpay.core.exceptions.NotAuthenticatedException; import it.govpay.core.exceptions.NotAuthorizedException; -import it.govpay.core.utils.EventoContext; public class EventiDAO extends BaseDAO { @@ -100,19 +100,12 @@ public ListaEventiDTOResponse listaEventi(ListaEventiDTO listaEventiDTO) throws public PutEventoDTOResponse inserisciEvento(PutEventoDTO putEventoDTO) throws NotAuthenticatedException, NotAuthorizedException, ServiceException { PutEventoDTOResponse putEventoDTOResponse = new PutEventoDTOResponse(); - BDConfigWrapper configWrapper = new BDConfigWrapper(ContextThreadLocal.get().getTransactionId(), this.useCacheData); - EventiBD eventiBD = null; + try { - eventiBD = new EventiBD(configWrapper); - - EventoContext eventoGenerico = putEventoDTO.getEvento(); - - Evento evento = eventoGenerico.toEventoDTO(); - eventiBD.insertEvento(evento); + GdeUtils.salvaEvento(putEventoDTO.getEvento()); return putEventoDTOResponse; } finally { - if(eventiBD != null) - eventiBD.closeConnection(); + } } diff --git a/jars/core/src/main/java/it/govpay/core/dao/eventi/utils/GdeUtils.java b/jars/core/src/main/java/it/govpay/core/dao/eventi/utils/GdeUtils.java new file mode 100644 index 0000000000..b001fcb55b --- /dev/null +++ b/jars/core/src/main/java/it/govpay/core/dao/eventi/utils/GdeUtils.java @@ -0,0 +1,341 @@ +package it.govpay.core.dao.eventi.utils; + +import java.math.BigDecimal; +import java.time.ZoneOffset; +import java.util.Date; + +import org.openspcoop2.utils.LoggerWrapperFactory; +import org.openspcoop2.utils.json.ValidationException; + +import it.govpay.bd.model.Evento; +import it.govpay.bd.model.eventi.DatiPagoPA; +import it.govpay.core.exceptions.BaseExceptionV1; +import it.govpay.core.exceptions.GovPayException; +import it.govpay.core.exceptions.UnprocessableEntityException; +import it.govpay.core.utils.EventoContext; +import it.govpay.core.utils.GovpayConfig; +import it.govpay.core.utils.SeveritaProperties; +import it.govpay.core.utils.client.exception.ClientException; +import it.govpay.gde.GdeInvoker; +import it.govpay.gde.v1.model.NuovoEvento; +import it.govpay.gde.v1.model.NuovoEvento.CategoriaEventoEnum; +import it.govpay.gde.v1.model.NuovoEvento.ComponenteEnum; +import it.govpay.gde.v1.model.NuovoEvento.EsitoEnum; +import it.govpay.gde.v1.model.NuovoEvento.RuoloEnum; + +public class GdeUtils { + + public static void salvaEvento(EventoContext context) { + GdeInvoker gdeInvoker = new GdeInvoker(GovpayConfig.getInstance().getGiornaleEventiUrl()); + gdeInvoker.salvaEvento(GdeUtils.toEventoModel(context)); + } + + public static void salvaEvento(Evento context) { + GdeInvoker gdeInvoker = new GdeInvoker(GovpayConfig.getInstance().getGiornaleEventiUrl()); + gdeInvoker.salvaEvento(GdeUtils.toEventoModel(context)); + } + + public static NuovoEvento toEventoModel(Evento context) { + NuovoEvento dto = new NuovoEvento(); + + if(context.getCategoriaEvento() != null) { + switch (context.getCategoriaEvento()) { + case INTERFACCIA: + dto.setCategoriaEvento(CategoriaEventoEnum.INTERFACCIA); + break; + case INTERNO: + dto.setCategoriaEvento(CategoriaEventoEnum.INTERNO); + break; + case UTENTE: + dto.setCategoriaEvento(CategoriaEventoEnum.UTENTE); + break; + } + } + if(context.getComponente() != null) { + try { + dto.setComponente(ComponenteEnum.fromValue(context.getComponente())); + } catch(IllegalArgumentException e) { + dto.setComponente(ComponenteEnum.GOVPAY); + } + } + + if(context.getData() != null) { + dto.setDataEvento(context.getData().toInstant().atOffset(ZoneOffset.UTC)); + } + + dto.setDatiPagoPA(getDatiPagoPA(context)); + + dto.setDettaglioEsito(context.getDettaglioEsito()); + if(context.getEsitoEvento() != null) { + switch(context.getEsitoEvento()) { + case FAIL: + dto.setEsito(EsitoEnum.FAIL); + break; + case KO: + dto.setEsito(EsitoEnum.KO); + break; + case OK: + dto.setEsito(EsitoEnum.OK); + break; + } + } + //dto.setId(context.getId()); + dto.setDurataEvento(context.getIntervallo()); + +// dto.setParametriRichiesta(context.getDettaglioRichiesta()); +// dto.setParametriRisposta(context.getDettaglioRisposta()); + + if(context.getRuoloEvento() != null) { + switch(context.getRuoloEvento()) { + case CLIENT: + dto.setRuolo(RuoloEnum.CLIENT); + break; + case SERVER: + dto.setRuolo(RuoloEnum.SERVER); + break; + } + } + dto.setSottotipoEsito(context.getSottotipoEsito()); + dto.setSottotipoEvento(context.getSottotipoEvento()); + dto.setTipoEvento(context.getTipoEvento()); + dto.setIdA2A(context.getCodApplicazione()); + dto.setIdPendenza(context.getCodVersamentoEnte()); + dto.setIdDominio(context.getCodDominio()); + dto.setIuv(context.getIuv()); + dto.setCcp(context.getCcp()); + dto.setIdPagamento(context.getIdSessione()); +// dto.setIdFr(context.getIdFr()); +// dto.setIdTracciato(context.getIdTracciato()); +// dto.setIdIncasso(context.getIdIncasso()); + + if(context.getSeverita() != null) { + dto.setSeverita(context.getSeverita()); + } + + return dto; + } + + public static NuovoEvento toEventoModel(EventoContext context) { + NuovoEvento dto = new NuovoEvento(); + + if(context.getCategoriaEvento() != null) { + switch (context.getCategoriaEvento()) { + case INTERFACCIA: + dto.setCategoriaEvento(CategoriaEventoEnum.INTERFACCIA); + break; + case INTERNO: + dto.setCategoriaEvento(CategoriaEventoEnum.INTERNO); + break; + case UTENTE: + dto.setCategoriaEvento(CategoriaEventoEnum.UTENTE); + break; + } + } + if(context.getComponente() != null) { + switch (context.getComponente()) { + case API_BACKEND_IO: + dto.setComponente(ComponenteEnum.API_BACKEND_IO); + break; + case API_BACKOFFICE: + dto.setComponente(ComponenteEnum.API_BACKOFFICE); + break; + case API_ENTE: + dto.setComponente(ComponenteEnum.API_ENTE); + break; + case API_GOVPAY: + dto.setComponente(ComponenteEnum.API_GOVPAY); + break; + case API_HYPERSIC_APK: + dto.setComponente(ComponenteEnum.API_HYPERSIC_APK); + break; + case API_MAGGIOLI_JPPA: + dto.setComponente(ComponenteEnum.API_MAGGIOLI_JPPA); + break; + case API_MYPIVOT: + dto.setComponente(ComponenteEnum.API_MYPIVOT); + break; + case API_PAGAMENTO: + dto.setComponente(ComponenteEnum.API_PAGAMENTO); + break; + case API_PAGOPA: + dto.setComponente(ComponenteEnum.API_PAGOPA); + break; + case API_PENDENZE: + dto.setComponente(ComponenteEnum.API_PENDENZE); + break; + case API_RAGIONERIA: + dto.setComponente(ComponenteEnum.API_RAGIONERIA); + break; + case API_SECIM: + dto.setComponente(ComponenteEnum.API_SECIM); + break; + case API_USER: + dto.setComponente(ComponenteEnum.API_USER); + break; + case GOVPAY: + dto.setComponente(ComponenteEnum.GOVPAY); + break; + case API_WC: + // dto.setComponente(ComponenteEnum.API_BACKEND_IO); + break; + } + } + + if(context.getDataRichiesta() != null) { + dto.setDataEvento(context.getDataRichiesta().toInstant().atOffset(ZoneOffset.UTC)); + } + + dto.setDatiPagoPA(getDatiPagoPA(context)); + + dto.setDettaglioEsito(context.getDescrizioneEsito()); + if(context.getEsito() != null) { + switch(context.getEsito()) { + case FAIL: + dto.setEsito(EsitoEnum.FAIL); + break; + case KO: + dto.setEsito(EsitoEnum.KO); + break; + case OK: + dto.setEsito(EsitoEnum.OK); + break; + } + } + //dto.setId(context.getId()); + if(context.getDataRisposta() != null) { + if(context.getDataRichiesta() != null) { + dto.setDurataEvento (context.getDataRisposta().getTime() - context.getDataRichiesta().getTime()); + } else { + dto.setDurataEvento(0l); + } + } else { + dto.setDurataEvento(0l); + } + dto.setParametriRichiesta(context.getDettaglioRichiesta()); + dto.setParametriRisposta(context.getDettaglioRisposta()); + if(context.getRole() != null) { + switch(context.getRole()) { + case CLIENT: + dto.setRuolo(RuoloEnum.CLIENT); + break; + case SERVER: + dto.setRuolo(RuoloEnum.SERVER); + break; + } + } + dto.setSottotipoEsito(context.getSottotipoEsito()); + dto.setSottotipoEvento(context.getSottotipoEvento()); + dto.setTipoEvento(context.getTipoEvento()); + dto.setIdA2A(context.getIdA2A()); + dto.setIdPendenza(context.getIdPendenza()); + dto.setIdDominio(context.getCodDominio()); + dto.setIuv(context.getIuv()); + dto.setCcp(context.getCcp()); + dto.setIdPagamento(context.getIdPagamento()); +// dto.setIdFr(context.getIdFr()); +// dto.setIdTracciato(context.getIdTracciato()); +// dto.setIdIncasso(context.getIdIncasso()); + + if(context.getSeverita() != null) { + dto.setSeverita(context.getSeverita()); + } else { + if(context.getException() != null) { + LoggerWrapperFactory.getLogger(EventoContext.class).debug("Classe exception: " + context.getException().getClass()); + + if(context.getException() instanceof GovPayException) { + try { + dto.setSeverita(SeveritaProperties.getInstance().getSeverita(((GovPayException) context.getException()).getCodEsito())); + } catch (Exception e) { + LoggerWrapperFactory.getLogger(EventoContext.class).error("Errore durante la decodifica del livello di severita': " + e.getMessage(),e); + } + } + + if(context.getException() instanceof BaseExceptionV1) { + try { + dto.setSeverita(SeveritaProperties.getInstance().getSeverita(((BaseExceptionV1) context.getException()).getCategoria())); + } catch (Exception e) { + LoggerWrapperFactory.getLogger(EventoContext.class).error("Errore durante la decodifica del livello di severita': " + e.getMessage(),e); + } + } + + if(context.getException() instanceof UnprocessableEntityException) { + try { + dto.setSeverita(SeveritaProperties.getInstance().getSeverita(((UnprocessableEntityException) context.getException()).getCategoria())); + } catch (Exception e) { + LoggerWrapperFactory.getLogger(EventoContext.class).error("Errore durante la decodifica del livello di severita': " + e.getMessage(),e); + } + } + + if(context.getException() instanceof ValidationException) { + try { + dto.setSeverita(SeveritaProperties.getInstance().getSeverita(it.govpay.core.exceptions.BaseExceptionV1.CategoriaEnum.RICHIESTA)); + } catch (Exception e) { + LoggerWrapperFactory.getLogger(EventoContext.class).error("Errore durante la decodifica del livello di severita': " + e.getMessage(),e); + } + } + + if(context.getException() instanceof ClientException) { + dto.setSeverita(5); + } + } + } + + return dto; + } + + private static it.govpay.gde.v1.model.DatiPagoPA getDatiPagoPA(Evento evento) { + DatiPagoPA datiPagoPA = evento.getPagoPA(); + Date dataFlusso = null; // evento.getDataFlusso(); + Long idTracciato = evento.getIdTracciato(); + + it.govpay.gde.v1.model.DatiPagoPA datiPagoPAModel = getDatiPagoPA(datiPagoPA, dataFlusso, idTracciato); + return datiPagoPAModel; + } + + private static it.govpay.gde.v1.model.DatiPagoPA getDatiPagoPA(EventoContext evento) { + DatiPagoPA datiPagoPA = evento.getDatiPagoPA(); + Date dataFlusso = evento.getDataFlusso(); + Long idTracciato = evento.getIdTracciato(); + + it.govpay.gde.v1.model.DatiPagoPA datiPagoPAModel = getDatiPagoPA(datiPagoPA, dataFlusso, idTracciato); + return datiPagoPAModel; + } + + private static it.govpay.gde.v1.model.DatiPagoPA getDatiPagoPA(DatiPagoPA datiPagoPA, Date dataFlusso, Long idTracciato) { + it.govpay.gde.v1.model.DatiPagoPA datiPagoPAModel = null; + if(datiPagoPA != null) { + datiPagoPAModel = new it.govpay.gde.v1.model.DatiPagoPA(); + datiPagoPAModel.setIdCanale(datiPagoPA.getCodCanale()); + datiPagoPAModel.setIdPsp(datiPagoPA.getCodPsp()); + datiPagoPAModel.setIdIntermediarioPsp(datiPagoPA.getCodIntermediarioPsp()); + datiPagoPAModel.setIdIntermediario(datiPagoPA.getCodIntermediario()); + datiPagoPAModel.setIdStazione(datiPagoPA.getCodStazione()); + datiPagoPAModel.setIdDominio(datiPagoPA.getCodDominio()); + if(datiPagoPA.getTipoVersamento() != null) { + datiPagoPAModel.setTipoVersamento(datiPagoPA.getTipoVersamento().getCodifica()); + } + if(datiPagoPA.getModelloPagamento() != null) { + datiPagoPAModel.setModelloPagamento(datiPagoPA.getModelloPagamento().getCodifica() +""); + } + + datiPagoPAModel.setIdFlusso(datiPagoPA.getCodFlusso()); + if(datiPagoPA.getIdTracciato() != null) + datiPagoPAModel.setIdTracciato(new BigDecimal(datiPagoPA.getIdTracciato())); + datiPagoPAModel.setIdRiconciliazione(datiPagoPA.getTrn()); + datiPagoPAModel.setSct(datiPagoPA.getSct()); + + + if(dataFlusso != null) { + datiPagoPAModel.setDataFlusso(dataFlusso.toInstant().atOffset(ZoneOffset.UTC)); + } + + + if(idTracciato != null) + datiPagoPAModel.setIdTracciato(new BigDecimal(idTracciato)); + + } + return datiPagoPAModel; + } + + +} diff --git a/jars/core/src/main/java/it/govpay/core/utils/EventoContext.java b/jars/core/src/main/java/it/govpay/core/utils/EventoContext.java index 02edfabdd8..7facb87694 100644 --- a/jars/core/src/main/java/it/govpay/core/utils/EventoContext.java +++ b/jars/core/src/main/java/it/govpay/core/utils/EventoContext.java @@ -94,6 +94,7 @@ public enum Categoria { INTERFACCIA, INTERNO, UTENTE }; private String idTransazione; private Long id; + private Date dataFlusso; private Long idFr; private Long idIncasso; private Long idTracciato; @@ -489,4 +490,12 @@ public void setSeverita(Integer severita) { this.severita = severita; } + public Date getDataFlusso() { + return dataFlusso; + } + + public void setDataFlusso(Date dataFlusso) { + this.dataFlusso = dataFlusso; + } + } diff --git a/jars/core/src/main/java/it/govpay/core/utils/RptUtils.java b/jars/core/src/main/java/it/govpay/core/utils/RptUtils.java index 2d84ae4d65..3ba394e38e 100644 --- a/jars/core/src/main/java/it/govpay/core/utils/RptUtils.java +++ b/jars/core/src/main/java/it/govpay/core/utils/RptUtils.java @@ -52,9 +52,9 @@ import it.govpay.bd.model.Stazione; import it.govpay.bd.model.UnitaOperativa; import it.govpay.bd.model.eventi.DatiPagoPA; -import it.govpay.bd.pagamento.EventiBD; import it.govpay.bd.pagamento.RptBD; import it.govpay.core.beans.EsitoOperazione; +import it.govpay.core.dao.eventi.utils.GdeUtils; import it.govpay.core.exceptions.GovPayException; import it.govpay.core.exceptions.NdpException; import it.govpay.core.utils.EventoContext.Esito; @@ -504,8 +504,7 @@ public static boolean aggiornaRptDaNpD(Intermediario intermediario, Rpt rpt) thr ctx.getApplicationLogger().log("pagamento.acquisizioneRtOk"); }finally { if(chiediCopiaRTClient != null && chiediCopiaRTClient.getEventoCtx().isRegistraEvento()) { - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(chiediCopiaRTClient.getEventoCtx().toEventoDTO()); + GdeUtils.salvaEvento(chiediCopiaRTClient.getEventoCtx()); } } @@ -611,8 +610,7 @@ public static boolean aggiornaRptDaNpD(Intermediario intermediario, Rpt rpt) thr } }finally { if(chiediStatoRptClient != null && chiediStatoRptClient.getEventoCtx().isRegistraEvento()) { - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(chiediStatoRptClient.getEventoCtx().toEventoDTO()); + GdeUtils.salvaEvento(chiediStatoRptClient.getEventoCtx()); } } } diff --git a/jars/core/src/main/java/it/govpay/core/utils/VersamentoUtils.java b/jars/core/src/main/java/it/govpay/core/utils/VersamentoUtils.java index bbc2bb4ff7..1fb6fff45d 100644 --- a/jars/core/src/main/java/it/govpay/core/utils/VersamentoUtils.java +++ b/jars/core/src/main/java/it/govpay/core/utils/VersamentoUtils.java @@ -60,12 +60,12 @@ import it.govpay.bd.model.TipoVersamentoDominio; import it.govpay.bd.model.UnitaOperativa; import it.govpay.bd.model.Versamento; -import it.govpay.bd.pagamento.EventiBD; import it.govpay.core.autorizzazione.AuthorizationManager; import it.govpay.core.beans.EsitoOperazione; import it.govpay.core.beans.tracciati.PendenzaPost; import it.govpay.core.business.Iuv; import it.govpay.core.dao.commons.Versamento.AllegatoPendenza; +import it.govpay.core.dao.eventi.utils.GdeUtils; import it.govpay.core.exceptions.EcException; import it.govpay.core.exceptions.GovPayException; import it.govpay.core.exceptions.UnprocessableEntityException; @@ -328,9 +328,7 @@ public static Versamento acquisisciVersamento(Applicazione applicazione, String EventoContext eventoCtx = verificaClient.getEventoCtx(); if(eventoCtx.isRegistraEvento()) { - // log evento - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(eventoCtx.toEventoDTO()); + GdeUtils.salvaEvento(eventoCtx); } } return versamento; @@ -414,9 +412,7 @@ public static Versamento inoltroPendenza(Applicazione applicazione, String codDo EventoContext eventoCtx = verificaClient.getEventoCtx(); if(eventoCtx.isRegistraEvento()) { - // log evento - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(eventoCtx.toEventoDTO()); + GdeUtils.salvaEvento(eventoCtx); } } return versamento; diff --git a/jars/core/src/main/java/it/govpay/core/utils/thread/InviaNotificaAppIoThread.java b/jars/core/src/main/java/it/govpay/core/utils/thread/InviaNotificaAppIoThread.java index 661462c19c..182ee17afa 100644 --- a/jars/core/src/main/java/it/govpay/core/utils/thread/InviaNotificaAppIoThread.java +++ b/jars/core/src/main/java/it/govpay/core/utils/thread/InviaNotificaAppIoThread.java @@ -30,6 +30,7 @@ import it.govpay.bd.pagamento.NotificheAppIoBD; import it.govpay.core.beans.EsitoOperazione; import it.govpay.core.business.QuietanzaPagamento; +import it.govpay.core.dao.eventi.utils.GdeUtils; import it.govpay.core.exceptions.GovPayException; import it.govpay.core.utils.EventoContext.Esito; import it.govpay.core.utils.GpContext; @@ -187,8 +188,7 @@ public void run() { this.aggiornaNotificaDaSpedire(notificheBD, e.getMessage()); } finally { if(clientGetProfile != null && clientGetProfile.getEventoCtx().isRegistraEvento()) { - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(clientGetProfile.getEventoCtx().toEventoDTO()); + GdeUtils.salvaEvento(clientGetProfile.getEventoCtx()); } if(notificheBD != null) notificheBD.closeConnection(); @@ -321,8 +321,7 @@ public void run() { this.aggiornaNotificaDaSpedire(notificheBD, e.getMessage()); } finally { if(clientPostMessage != null && clientPostMessage.getEventoCtx().isRegistraEvento()) { - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(clientPostMessage.getEventoCtx().toEventoDTO()); + GdeUtils.salvaEvento(clientPostMessage.getEventoCtx()); } if(notificheBD != null) notificheBD.closeConnection(); diff --git a/jars/core/src/main/java/it/govpay/core/utils/thread/InviaNotificaPagamentoMaggioliJPPAThread.java b/jars/core/src/main/java/it/govpay/core/utils/thread/InviaNotificaPagamentoMaggioliJPPAThread.java index c5f6a20ea0..293c8c25a6 100644 --- a/jars/core/src/main/java/it/govpay/core/utils/thread/InviaNotificaPagamentoMaggioliJPPAThread.java +++ b/jars/core/src/main/java/it/govpay/core/utils/thread/InviaNotificaPagamentoMaggioliJPPAThread.java @@ -22,8 +22,8 @@ import it.govpay.bd.model.PagamentoPortale; import it.govpay.bd.model.Rpt; import it.govpay.bd.model.Versamento; -import it.govpay.bd.pagamento.EventiBD; import it.govpay.core.beans.EsitoOperazione; +import it.govpay.core.dao.eventi.utils.GdeUtils; import it.govpay.core.exceptions.GovPayException; import it.govpay.core.utils.EventoContext.Esito; import it.govpay.core.utils.GpContext; @@ -185,13 +185,7 @@ public void run() { this.exception = e; } finally { if(client != null && client.getEventoCtx().isRegistraEvento()) { - try { - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(client.getEventoCtx().toEventoDTO()); - - } catch (ServiceException e) { - log.error("Errore: " + e.getMessage(), e); - } + GdeUtils.salvaEvento(client.getEventoCtx()); } ContextThreadLocal.unset(); this.completed = true; diff --git a/jars/core/src/main/java/it/govpay/core/utils/thread/InviaNotificaThread.java b/jars/core/src/main/java/it/govpay/core/utils/thread/InviaNotificaThread.java index feae31e4c2..532511104a 100644 --- a/jars/core/src/main/java/it/govpay/core/utils/thread/InviaNotificaThread.java +++ b/jars/core/src/main/java/it/govpay/core/utils/thread/InviaNotificaThread.java @@ -41,14 +41,14 @@ import it.govpay.bd.model.PagamentoPortale; import it.govpay.bd.model.Rpt; import it.govpay.bd.model.Versamento; -import it.govpay.bd.pagamento.EventiBD; import it.govpay.bd.pagamento.NotificheBD; import it.govpay.core.beans.EsitoOperazione; +import it.govpay.core.dao.eventi.utils.GdeUtils; import it.govpay.core.exceptions.GovPayException; import it.govpay.core.utils.EventoContext.Esito; import it.govpay.core.utils.GpContext; -import it.govpay.core.utils.client.exception.ClientException; import it.govpay.core.utils.client.NotificaClient; +import it.govpay.core.utils.client.exception.ClientException; import it.govpay.model.Connettore; import it.govpay.model.Notifica.StatoSpedizione; import it.govpay.model.Notifica.TipoNotifica; @@ -276,12 +276,7 @@ public void run() { } } finally { if(client != null && client.getEventoCtx().isRegistraEvento()) { - EventiBD eventiBD = new EventiBD(configWrapper); - try { - eventiBD.insertEvento(client.getEventoCtx().toEventoDTO()); - } catch (ServiceException e) { - log.error("Errore durante il salvataggio dell'evento: ", e); - } + GdeUtils.salvaEvento(client.getEventoCtx()); } this.completed = true; diff --git a/jars/core/src/main/java/it/govpay/core/utils/thread/InviaRptThread.java b/jars/core/src/main/java/it/govpay/core/utils/thread/InviaRptThread.java index 3f8136dccf..847bfe9f37 100644 --- a/jars/core/src/main/java/it/govpay/core/utils/thread/InviaRptThread.java +++ b/jars/core/src/main/java/it/govpay/core/utils/thread/InviaRptThread.java @@ -43,18 +43,18 @@ import it.govpay.bd.model.Rpt; import it.govpay.bd.model.Stazione; import it.govpay.bd.model.Versamento; -import it.govpay.bd.pagamento.EventiBD; import it.govpay.bd.pagamento.RptBD; import it.govpay.core.beans.EsitoOperazione; import it.govpay.core.business.model.Risposta; +import it.govpay.core.dao.eventi.utils.GdeUtils; import it.govpay.core.exceptions.GovPayException; import it.govpay.core.utils.EventoContext.Esito; import it.govpay.core.utils.GovpayConfig; import it.govpay.core.utils.GpContext; import it.govpay.core.utils.RptUtils; -import it.govpay.core.utils.client.exception.ClientException; import it.govpay.core.utils.client.NodoClient; import it.govpay.core.utils.client.NodoClient.Azione; +import it.govpay.core.utils.client.exception.ClientException; import it.govpay.model.Intermediario; import it.govpay.model.Notifica.TipoNotifica; import it.govpay.model.Rpt.StatoRpt; @@ -236,13 +236,7 @@ public void run() { rptBD.closeConnection(); if(client != null && client.getEventoCtx().isRegistraEvento()) { - try { - EventiBD eventiBD = new EventiBD(configWrapper); - eventiBD.insertEvento(client.getEventoCtx().toEventoDTO()); - - } catch (ServiceException e) { - log.error("Errore: " + e.getMessage(), e); - } + GdeUtils.salvaEvento(client.getEventoCtx()); } ContextThreadLocal.unset(); } diff --git a/jars/core/src/main/java/it/govpay/core/utils/thread/SpedizioneTracciatoNotificaPagamentiThread.java b/jars/core/src/main/java/it/govpay/core/utils/thread/SpedizioneTracciatoNotificaPagamentiThread.java index 7d3d2a889f..bcabed9307 100644 --- a/jars/core/src/main/java/it/govpay/core/utils/thread/SpedizioneTracciatoNotificaPagamentiThread.java +++ b/jars/core/src/main/java/it/govpay/core/utils/thread/SpedizioneTracciatoNotificaPagamentiThread.java @@ -70,11 +70,11 @@ import it.govpay.bd.model.TracciatoNotificaPagamenti; import it.govpay.bd.model.eventi.DettaglioRichiesta; import it.govpay.bd.model.eventi.DettaglioRisposta; -import it.govpay.bd.pagamento.EventiBD; import it.govpay.bd.pagamento.TracciatiNotificaPagamentiBD; import it.govpay.core.beans.EsitoOperazione; import it.govpay.core.business.GiornaleEventi; import it.govpay.core.business.TracciatiNotificaPagamenti; +import it.govpay.core.dao.eventi.utils.GdeUtils; import it.govpay.core.exceptions.GovPayException; import it.govpay.core.utils.EventoContext; import it.govpay.core.utils.EventoContext.Categoria; @@ -84,8 +84,8 @@ import it.govpay.core.utils.GovpayConfig; import it.govpay.core.utils.GpContext; import it.govpay.core.utils.SimpleDateFormatUtils; -import it.govpay.core.utils.client.exception.ClientException; import it.govpay.core.utils.client.EnteRendicontazioniClient; +import it.govpay.core.utils.client.exception.ClientException; import it.govpay.core.utils.rawutils.ConverterUtils; import it.govpay.core.utils.tracciati.TracciatiNotificaPagamentiUtils; import it.govpay.ec.rendicontazioni.v1.beans.Rpp; @@ -276,14 +276,8 @@ public void run() { } finally { this.popolaContextEvento(connettore.getTipoConnettore(), url, dumpRequest, dumpResponse, this.eventoCtx); - - EventiBD eventiBD = new EventiBD(configWrapper); - try { - eventiBD.insertEvento(this.eventoCtx.toEventoDTO()); - } catch (ServiceException e) { - log.error("Errore durante il salvataggio dell'evento: ", e); - } - + GdeUtils.salvaEvento(this.eventoCtx); + if(tracciatiMyPivotBD != null) { tracciatiMyPivotBD.closeConnection(); } @@ -474,12 +468,7 @@ private void inviaTracciatoViaAPIRest(String operationId, TracciatoNotificaPagam } } finally { if(client != null && client.getEventoCtx().isRegistraEvento()) { - EventiBD eventiBD = new EventiBD(configWrapper); - try { - eventiBD.insertEvento(client.getEventoCtx().toEventoDTO()); - } catch (ServiceException e) { - log.error("Errore durante il salvataggio dell'evento: ", e); - } + GdeUtils.salvaEvento(client.getEventoCtx()); } } } @@ -521,12 +510,7 @@ private void inviaTracciatoViaAPIRest(String operationId, TracciatoNotificaPagam } } finally { if(client != null && client.getEventoCtx().isRegistraEvento()) { - EventiBD eventiBD = new EventiBD(configWrapper); - try { - eventiBD.insertEvento(client.getEventoCtx().toEventoDTO()); - } catch (ServiceException e) { - log.error("Errore durante il salvataggio dell'evento: ", e); - } + GdeUtils.salvaEvento(client.getEventoCtx()); } } } diff --git a/jars/pom.xml b/jars/pom.xml index 3ba4f562e9..ef8dd525c8 100644 --- a/jars/pom.xml +++ b/jars/pom.xml @@ -26,6 +26,7 @@ core api-commons client-api-ente + client-api-gde diff --git a/pom.xml b/pom.xml index 9326049b60..c80ffa8dcb 100644 --- a/pom.xml +++ b/pom.xml @@ -67,7 +67,7 @@ 3.4.4 - 2.9.10 + 2.13.3 2.25.1 @@ -290,14 +290,6 @@ compile - - it.govpay - api-gestione - ${project.version} - war - compile - - it.govpay pagopa-beans @@ -358,6 +350,14 @@ war compile + + + it.govpay + client-api-gde + ${project.version} + jar + compile + it.govpay diff --git a/src/main/resources/filters/installer_template.filter.properties b/src/main/resources/filters/installer_template.filter.properties index 66e5104364..ffef7be3a5 100644 --- a/src/main/resources/filters/installer_template.filter.properties +++ b/src/main/resources/filters/installer_template.filter.properties @@ -198,6 +198,12 @@ it.govpay.client.numeroMassimoConnessioniPerPool=200 it.govpay.client.numeroMassimoConnessioniPerRouteDefault=20 +# GovPay Giornale Eventi + +# Giornale eventi URL servizio +it.govpay.giornaleEventi.url=http://localhost:8080/govpay/backend/api/gde + + # Govpay API BackOffice # titolo applicazione diff --git a/src/main/resources/filters/template.filter.properties b/src/main/resources/filters/template.filter.properties index bbb014ff10..42f7f7bb1c 100644 --- a/src/main/resources/filters/template.filter.properties +++ b/src/main/resources/filters/template.filter.properties @@ -198,6 +198,12 @@ it.govpay.client.numeroMassimoConnessioniPerPool=500 it.govpay.client.numeroMassimoConnessioniPerRouteDefault=50 +# GovPay Giornale Eventi + +# Giornale eventi URL servizio +it.govpay.giornaleEventi.url=http://localhost:8080/govpay/backend/api/gde + + # Govpay API BackOffice # titolo applicazione diff --git a/wars/api-gde/pom.xml b/wars/api-gde/pom.xml index cb2ecf7b31..428eedae6a 100644 --- a/wars/api-gde/pom.xml +++ b/wars/api-gde/pom.xml @@ -28,9 +28,6 @@ ../.. ${rel-to-parent}/src/main/resources/filters/${env}.filter.properties - - 5.1.0 - 6.0.0.Alpha2 @@ -75,6 +72,12 @@ + + + org.springframework.boot + spring-boot-starter-log4j2 + + org.springframework.boot spring-boot-starter-data-jpa @@ -110,7 +113,6 @@ org.projectlombok lombok - ${org.projectlombok.version} true diff --git a/wars/api-gde/src/main/java/it/govpay/gde/controller/GdeController.java b/wars/api-gde/src/main/java/it/govpay/gde/controller/GdeController.java index 1ea0062dad..3a04291579 100644 --- a/wars/api-gde/src/main/java/it/govpay/gde/controller/GdeController.java +++ b/wars/api-gde/src/main/java/it/govpay/gde/controller/GdeController.java @@ -7,6 +7,8 @@ import javax.validation.constraints.Positive; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -45,6 +47,8 @@ @RestController @Validated public class GdeController { + + private Logger logger = LoggerFactory.getLogger(GdeController.class); @Autowired private EventoIndexRepository eventoIndexRepository; @@ -179,13 +183,16 @@ public ResponseEntity getEventoById(@PathVariable("id") @Positive L @PostMapping(path = "/eventi", consumes = { MediaType.APPLICATION_JSON_VALUE} , name = "addEvento") public ResponseEntity addEvento(@RequestBody NuovoEventoModel evento){ + this.logger.debug("AAAAAA Salvataggio evento: " + evento.toString()); try { EventoEntity entity = this.nuovoEventoMapper.nuovoEventoModelToEventoEntity(evento); this.eventoRepository.save(entity); + this.logger.debug("AAAAAA Salvataggio evento completato."); return new ResponseEntity<>(HttpStatus.CREATED); }catch (Exception e) { + this.logger.error("AAAAAA Salvataggio evento completato con errore: " +e.getMessage(), e); throw new InternalException(e); } } diff --git a/wars/api-gde/src/main/java/it/govpay/gde/security/SecurityConfig.java b/wars/api-gde/src/main/java/it/govpay/gde/security/SecurityConfig.java index 71d9a52663..bc586ef9d3 100644 --- a/wars/api-gde/src/main/java/it/govpay/gde/security/SecurityConfig.java +++ b/wars/api-gde/src/main/java/it/govpay/gde/security/SecurityConfig.java @@ -13,6 +13,7 @@ public class SecurityConfig { @Bean public SecurityFilterChain filterChain(HttpSecurity http) throws Exception { http + .csrf().disable() .authorizeHttpRequests((authz) -> authz .anyRequest().permitAll() ) diff --git a/wars/api-gde/src/main/resources/openapi_gen.yaml b/wars/api-gde/src/main/resources/openapi_gen.yaml index 66f114e66f..4aaef791a7 100644 --- a/wars/api-gde/src/main/resources/openapi_gen.yaml +++ b/wars/api-gde/src/main/resources/openapi_gen.yaml @@ -1,623 +1,491 @@ -openapi: 3.0.0 +openapi: 3.0.1 info: - version: "1.0.0" - title: GovPay - API Giornale degli eventi - contact: - name: GitHub Project Page - url: 'https://github.com/link-it/GovPay/' - license: - name: GPL - url: 'https://github.com/link-it/GovPay/blob/master/LICENSE' + title: OpenAPI definition + version: v0 servers: - - url: /govpay/backend/api/gde/rs/basic/v1/ -tags: - - name: Giornale degli Eventi - description: Consultazione del Giornale degli Eventi -security: - - basicAuth: [] +- url: http://localhost:8080/govpay/backend/api/gde + description: Generated server url paths: - '/eventi': + /eventi: get: - summary: Giornale degli eventi - operationId: findEventi tags: - - Giornale degli Eventi + - gde-controller + operationId: findEventi parameters: - - $ref: '#/components/parameters/pagina' - - $ref: '#/components/parameters/risultatiPerPagina' - - $ref: '#/components/parameters/idDominio' - - $ref: '#/components/parameters/iuv' - - $ref: '#/components/parameters/ccp' - - $ref: '#/components/parameters/idA2A' - - $ref: '#/components/parameters/idPendenza' - - $ref: '#/components/parameters/idPagamentoRpp' - - $ref: '#/components/parameters/esitoEvento' - - $ref: '#/components/parameters/dataDa' - - $ref: '#/components/parameters/dataA' - - $ref: '#/components/parameters/categoriaEvento' - - $ref: '#/components/parameters/tipoEvento' - - $ref: '#/components/parameters/sottotipoEvento' - - $ref: '#/components/parameters/componenteEvento' - - $ref: '#/components/parameters/ruoloEvento' - - $ref: '#/components/parameters/messaggiEvento' - - $ref: '#/components/parameters/metadatiPaginazione' - - $ref: '#/components/parameters/maxRisultati' - - $ref: '#/components/parameters/severitaDa' - - $ref: '#/components/parameters/severitaA' + - name: pageable + in: query + required: true + schema: + $ref: '#/components/schemas/Pageable' + - name: dataDa + in: query + required: false + schema: + type: string + format: date-time + - name: dataA + in: query + required: false + schema: + type: string + format: date-time + - name: idDominio + in: query + required: false + schema: + type: string + - name: iuv + in: query + required: false + schema: + type: string + - name: ccp + in: query + required: false + schema: + type: string + - name: idA2A + in: query + required: false + schema: + type: string + - name: idPendenza + in: query + required: false + schema: + type: string + - name: idPagamento + in: query + required: false + schema: + type: string + - name: categoriaEvento + in: query + required: false + schema: + type: string + enum: + - INTERNO + - INTERFACCIA + - UTENTE + - name: esitoEvento + in: query + required: false + schema: + type: string + enum: + - OK + - KO + - FAIL + - name: ruoloEvento + in: query + required: false + schema: + type: string + enum: + - CLIENT + - SERVER + - name: sottotipoEvento + in: query + required: false + schema: + type: string + - name: tipoEvento + in: query + required: false + schema: + type: string + - name: componenteEvento + in: query + required: false + schema: + type: string + enum: + - API_BACKOFFICE + - API_ENTE + - API_PAGOPA + - API_PAGAMENTO + - API_PENDENZE + - API_RAGIONERIA + - API_BACKEND_IO + - API_SECIM + - API_MYPIVOT + - API_MAGGIOLI_JPPA + - API_GOVPAY + - API_HYPERSIC_APK + - API_USER + - GOVPAY + - name: severitaDa + in: query + required: false + schema: + type: integer + format: int32 + - name: severitaA + in: query + required: false + schema: + type: integer + format: int32 responses: - '200': - description: Elenco degli eventi + "404": + description: Not Found + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "500": + description: Internal Server Error + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "422": + description: Unprocessable Entity + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "200": + description: OK content: application/json: schema: - allOf: - - $ref: '#/components/schemas/ListaPaginata' - - type: object - required: - - risultati - properties: - risultati: - type: array - items: - $ref: '#/components/schemas/Evento' - '401': - $ref: '#/components/responses/401' - '403': - $ref: '#/components/responses/403' - '500': - $ref: '#/components/responses/500' - put: - summary: Giornale degli eventi - operationId: addEvento + $ref: '#/components/schemas/PagedModelEventoIndexModel' + post: tags: - - Giornale degli Eventi + - gde-controller + operationId: addEvento requestBody: content: application/json: schema: - $ref: '#/components/schemas/NuovoEvento' + $ref: '#/components/schemas/nuovoEvento' + required: true responses: - '200': - description: Evento registrato con successo - '400': - $ref: '#/components/responses/400' - '401': - $ref: '#/components/responses/401' - '403': - $ref: '#/components/responses/403' - '422': - $ref: '#/components/responses/422' - '500': - $ref: '#/components/responses/500' - '/eventi/{id}': + "404": + description: Not Found + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "500": + description: Internal Server Error + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "422": + description: Unprocessable Entity + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "200": + description: OK + content: + '*/*': + schema: + type: object + /eventi/{id}: get: - summary: Dettaglio di un evento - operationId: getEvento tags: - - Giornale degli Eventi + - gde-controller + operationId: getEventoById parameters: - - in: path - name: id - description: Identificativo Evento - required: true - schema: - type: string + - name: id + in: path + required: true + schema: + type: integer + format: int64 responses: - '201': - description: Dettaglio di un evento + "404": + description: Not Found + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "500": + description: Internal Server Error + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "422": + description: Unprocessable Entity + content: + '*/*': + schema: + $ref: '#/components/schemas/problem' + "200": + description: OK content: application/json: schema: - $ref: '#/components/schemas/Evento' - '401': - $ref: '#/components/responses/401' - '403': - $ref: '#/components/responses/403' - '404': - $ref: '#/components/responses/400' - '500': - $ref: '#/components/responses/500' + $ref: '#/components/schemas/evento' components: - parameters: - campi: - name: campi - in: query - description: >- - csv dei campi da includere nella risposta (default tutti) - required: false - schema: - type: string - categoriaEvento: - name: categoriaEvento - in: query - description: Filtro per categoria evento - required: false - schema: - $ref: '#/components/schemas/CategoriaEvento' - ccp: - name: ccp - in: query - description: Codice contesto pagamento - required: false - schema: - type: string - componenteEvento: - name: componente - in: query - description: Filtro per componente evento - required: false - schema: - $ref: '#/components/schemas/ComponenteEvento' - dataDa: - name: dataDa - in: query - description: Inizio della finestra temporale di osservazione - required: false - schema: - type: string - format: date-time - dataA: - name: dataA - in: query - description: Fine della finestra temporale di osservazione - required: false - schema: - type: string - format: date-time - esitoEvento: - name: esito - in: query - description: Filtro per esito evento - required: false - schema: - $ref: '#/components/schemas/EsitoEvento' - idA2A: - name: idA2A - in: query - description: Identificativo del gestionale proprietario della pendenza - required: false - schema: - type: string - idDominio: - name: idDominio - in: query - description: Identificativo del dominio beneficiario - required: false - schema: - type: string - pattern: '(^([0-9]){11}$)' - idPagamentoRpp: - name: idPagamento - in: query - description: Identificativo della richiesta di pagamento - required: false - schema: - type: string - example: 'c8be909b-2feb-4ffa-8f98-704462abbd1d' - idPendenza: - name: idPendenza - in: query - description: Identificativo della pendenza nel gestionale proprietario - required: false - schema: - type: string - iuv: - name: iuv - in: query - description: Identificativo univoco di versamento - required: false - schema: - type: string - maxRisultati: - name: maxRisultati - in: query - description: >- - Indica se il servizio deve impostare o meno il limite sul calcolo del numero di risultati - required: false - schema: - type: boolean - default: true - example: true - messaggiEvento: - name: messaggi - in: query - description: Include nella risposta le informazioni sui messaggi scambiati - required: false - schema: - type: boolean - metadatiPaginazione: - name: metadatiPaginazione - in: query - description: >- - Indica se il servizio calcola e valorizza i dati di paginazione o meno - required: false - schema: - type: boolean - default: true - example: true - ordinamento: - name: ordinamento - in: query - description: >- - Csv dei campi su cui ordinare i risultati, preceduti da + o - per ascendente o discendente (default ascendente) - * dataRichiestaPagamento - * stato - required: false - schema: - type: string - example: +name - pagina: - name: pagina - in: query - description: Numero di pagina dei risultati - required: false - schema: - $ref: '#/components/schemas/Pagina' - risultatiPerPagina: - name: risultatiPerPagina - in: query - description: Numero di risultati richiesti (max 5000) - required: false - schema: - $ref: '#/components/schemas/RisultatiPerPagina' - ruoloEvento: - name: ruolo - in: query - description: filtro per ruolo evento - required: false - schema: - $ref: '#/components/schemas/RuoloEvento' - severitaDa: - name: severitaDa - in: query - description: filtro per severita errore - required: false - schema: - type: integer - format: int32 - severitaA: - name: severitaA - in: query - description: filtro per severita errore - required: false - schema: - type: integer - format: int32 - sottotipoEvento: - name: sottotipoEvento - in: query - description: filtro per sottotipo evento - required: false - schema: - type: string - tipoEvento: - name: tipoEvento - in: query - description: filtro per tipologia evento - required: false - schema: - type: string - responses: - '400': - description: Richiesta non correttamente formata - content: - application/json: - schema: - $ref: '#/components/schemas/FaultBean' - example: - categoria: RICHIESTA - codice: INTERNO - descrizione: Servizio non disponibile - '401': - description: Richiesta non autenticata - '403': - description: Richiesta non autorizzata - '404': - description: Risorsa inesistente - '415': - description: Formato del messaggio non valido - '422': - description: Richiesta non processabile - content: - application/json: - schema: - $ref: '#/components/schemas/FaultBean' - example: - categoria: RICHIESTA - codice: INTERNO - descrizione: Richiesta non processabile - '500': - description: Servizio non disponibile - content: - application/json: - schema: - $ref: '#/components/schemas/FaultBean' - example: - categoria: INTERNO - codice: INTERNO - descrizione: Servizio non disponibile - securitySchemes: - basicAuth: - type: http - scheme: basic schemas: - CategoriaEvento: - type: string - enum: - - INTERNO - - INTERFACCIA - - UTENTE - example: 'INTERFACCIA' - ComponenteEvento: - type: string - description: Modulo interno che ha emesso l'evento - enum: - - API_BACKOFFICE - - API_ENTE - - API_PAGOPA - - API_PAGAMENTO - - API_PENDENZE - - API_RAGIONERIA - - API_BACKEND_IO - - API_SECIM - - API_MYPIVOT - - API_MAGGIOLI_JPPA - - API_GOVPAY - - API_HYPERSIC_APK - - API_USER - - GOVPAY - example: 'API_PAGOPA' - DatiPagoPA: + problem: + type: object + properties: + type: + type: string + format: uri + title: + type: string + status: + type: integer + format: int32 + detail: + type: string + instance: + type: string + format: uri + Links: + type: object + additionalProperties: + $ref: '#/components/schemas/Link' + datiPagoPA: type: object properties: idPsp: type: string - description: Identificativo del PSP - example: 'ABI12345' idCanale: type: string - example: 'ABI12345_01' idIntermediarioPsp: type: string - example: 'ABI12345_01' tipoVersamento: type: string - description: Tipologia di versamento realizzato - example: 'CP' modelloPagamento: type: string - description: Modello di pagamento utilizzato - example: '0' idDominio: type: string - example: '99999999999' idIntermediario: type: string - example: '99999999999' idStazione: type: string - example: '99999999999_01' idRiconciliazione: type: string - description: Identificativo dell'incasso - example: '12345' sct: type: string - description: Identificativo Sepa Credit Transfer - example: 2017-01-01ABI00000011234 idFlusso: type: string - description: identificativo del flusso di rendicontazione - example: 2017-11-21GovPAYPsp1-10:27:27.903 dataFlusso: type: string format: date-time - description: data flusso di rendicontazione - example: '2017-07-21T17:32:28Z' idTracciato: type: number - description: Identificativo numerico del tracciato - example: - 123456 - EsitoEvento: - type: string - enum: - - OK - - KO - - FAIL - example: 'OK' - Evento: - allOf: - - $ref: '#/components/schemas/EventoIndex' - - type: object - required: - - parametriRichiesta - - parametriRisposta - properties: - parametriRichiesta: - type: object - description: 'Dettaglio del messaggio di richiesta' - parametriRisposta: - type: object - description: 'Dettaglio del messaggio di risposta' - EventoIndex: + _links: + $ref: '#/components/schemas/Links' + nuovoEvento: type: object - required: - - id - - componente - - categoriaEvento - - ruolo - - tipoEvento - - esito - - dataEvento - - durataEvento properties: id: type: integer format: int64 - description: Identificativo evento - example: 1201122131 componente: - $ref: '#/components/schemas/ComponenteEvento' + type: string + enum: + - API_BACKOFFICE + - API_ENTE + - API_PAGOPA + - API_PAGAMENTO + - API_PENDENZE + - API_RAGIONERIA + - API_BACKEND_IO + - API_SECIM + - API_MYPIVOT + - API_MAGGIOLI_JPPA + - API_GOVPAY + - API_HYPERSIC_APK + - API_USER + - GOVPAY categoriaEvento: - $ref: '#/components/schemas/CategoriaEvento' + type: string + enum: + - INTERNO + - INTERFACCIA + - UTENTE ruolo: - $ref: '#/components/schemas/RuoloEvento' + type: string + enum: + - CLIENT + - SERVER tipoEvento: type: string - example: 'nodoInviaRPT' - maxLength: 255 esito: - $ref: '#/components/schemas/EsitoEvento' + type: string + enum: + - OK + - KO + - FAIL dataEvento: type: string format: date-time - description: Data emissione evento - example: '2017-07-21T17:32:28Z' durataEvento: type: integer format: int64 - description: Durata evento (in millisecondi) - example: 120 sottotipoEvento: type: string - example: 'richiesta verso il nodo' - maxLength: 255 sottotipoEsito: type: string - description: Descrizione dell'esito - example: '200' - maxLength: 255 dettaglioEsito: type: string - example: 'Operazione completata con successo' idDominio: type: string - description: Identificativo ente creditore - example: 01234567890 - pattern: '(^([0-9]){11}$)' iuv: type: string - description: Identificativo univoco di versamento - example: RF23567483937849450550875 - maxLength: 35 ccp: type: string - description: Codice contesto di pagamento - example: '1234acdc' - maxLength: 35 idA2A: type: string - description: Identificativo del gestionale responsabile della pendenza - example: 'A2A-12345' - pattern: '(^[a-zA-Z0-9\-_]{1,35}$)' idPendenza: type: string - description: Identificativo della pendenza nel gestionale responsabile - example: 'abcdef12345' - pattern: '(^[a-zA-Z0-9\-_]{1,35}$)' idPagamento: type: string - description: Identificativo del pagamento assegnato da GovPay - example: 'f9866575-e255-4d10-9845-57ba88bec136' - maxLength: 35 datiPagoPA: - $ref: '#/components/schemas/DatiPagoPA' + $ref: '#/components/schemas/datiPagoPA' severita: type: integer format: int32 - description: indica il livello di severita nel caso di evento con esito KO/FAIL - example: 0 - FaultBean: + parametriRichiesta: + type: object + parametriRisposta: + type: object + Pageable: type: object - required: - - categoria - - codice - - descrizione properties: - categoria: - type: string - description: >- - Categoria dell'errore riscontrato: - * `AUTORIZZAZIONE` - Operazione non autorizzata - * `RICHIESTA` - Richiesta non valida - * `OPERAZIONE` - Operazione non eseguibile - * `PAGOPA` - Errore da PagoPA - * `EC` - Errore da Ente Creditore - * `INTERNO` - Errore interno + page: + minimum: 0 + type: integer + format: int32 + size: + minimum: 1 + type: integer + format: int32 + sort: + type: array + items: + type: string + PageMetadata: + type: object + properties: + size: + type: integer + format: int64 + totalElements: + type: integer + format: int64 + totalPages: + type: integer + format: int64 + number: + type: integer + format: int64 + PagedModelEventoIndexModel: + type: object + properties: + _embedded: + type: object + properties: + eventi: + type: array + items: + $ref: '#/components/schemas/evento' + _links: + $ref: '#/components/schemas/Links' + page: + $ref: '#/components/schemas/PageMetadata' + evento: + type: object + properties: + id: + type: integer + format: int64 + componente: + type: string + enum: + - API_BACKOFFICE + - API_ENTE + - API_PAGOPA + - API_PAGAMENTO + - API_PENDENZE + - API_RAGIONERIA + - API_BACKEND_IO + - API_SECIM + - API_MYPIVOT + - API_MAGGIOLI_JPPA + - API_GOVPAY + - API_HYPERSIC_APK + - API_USER + - GOVPAY + categoriaEvento: + type: string + enum: + - INTERNO + - INTERFACCIA + - UTENTE + ruolo: + type: string enum: - - AUTORIZZAZIONE - - RICHIESTA - - OPERAZIONE - - PAGOPA - - EC - - INTERNO - codice: - type: string - description: Codice di errore - descrizione: - type: string - description: Descrizione dell'errore - dettaglio: - type: string - description: Descrizione aggiuntiva - example: - categoria: INTERNO - codice: INTERNO - descrizione: Servizio non disponibile - ListaPaginata: + - CLIENT + - SERVER + tipoEvento: + type: string + esito: + type: string + enum: + - OK + - KO + - FAIL + dataEvento: + type: string + format: date-time + durataEvento: + type: integer + format: int64 + sottotipoEvento: + type: string + sottotipoEsito: + type: string + dettaglioEsito: + type: string + idDominio: + type: string + iuv: + type: string + ccp: + type: string + idA2A: + type: string + idPendenza: + type: string + idPagamento: + type: string + datiPagoPA: + $ref: '#/components/schemas/datiPagoPA' + severita: + type: integer + format: int32 + _links: + $ref: '#/components/schemas/Links' + Link: type: object properties: - numRisultati: - type: number - format: integer - example: '100' - numPagine: - type: number - format: integer - example: '4' - risultatiPerPagina: - type: number - format: integer - example: '25' - pagina: - type: number - format: integer - example: '1' - prossimiRisultati: + href: type: string - format: integer - example: '/risorsa?pagina=2' - maxRisultati: - type: number - format: integer - example: '100' - NuovoEvento: - allOf: - - $ref: '#/components/schemas/EventoIndex' - - type: object - required: - - parametriRichiesta - - parametriRisposta - properties: - parametriRichiesta: - type: object - description: 'Dettaglio del messaggio di richiesta' - parametriRisposta: - type: object - description: 'Dettaglio del messaggio di risposta' - Pagina: - type: integer - default: 1 - minimum: 1 - RisultatiPerPagina: - type: integer - default: 25 - minimum: 0 - maximum: 200 - RuoloEvento: - type: string - enum: - - CLIENT - - SERVER - example: 'SERVER' + hreflang: + type: string + title: + type: string + type: + type: string + deprecation: + type: string + profile: + type: string + name: + type: string + templated: + type: boolean