diff --git a/jars/client-api-gde/pom.xml b/jars/client-api-gde/pom.xml
index 5d19f1e042..b635d49f2e 100644
--- a/jars/client-api-gde/pom.xml
+++ b/jars/client-api-gde/pom.xml
@@ -31,12 +31,6 @@
6.0.0
-
- 1.5.1.Final
-
-
- 1.18.24
-
2.1.2
1.6.2
@@ -91,18 +85,6 @@
spring-context-support
-
- org.projectlombok
- lombok
- true
-
-
-
- org.mapstruct
- mapstruct
- ${mapstruct.version}
-
-
io.swagger
swagger-annotations
@@ -144,22 +126,6 @@
${java.version}
-
-
- org.projectlombok
- lombok
- ${org.projectlombok.version}
-
-
- org.mapstruct
- mapstruct-processor
- ${mapstruct.version}
-
-
-
- -Amapstruct.suppressGeneratorTimestamp=true
- -Amapstruct.defaultComponentModel=spring
-
diff --git a/jars/client-api-gde/src/main/resources/openapi.yaml b/jars/client-api-gde/src/main/resources/openapi.yaml
index 5e0c5bebb9..73ead55625 100644
--- a/jars/client-api-gde/src/main/resources/openapi.yaml
+++ b/jars/client-api-gde/src/main/resources/openapi.yaml
@@ -147,12 +147,6 @@ paths:
type: integer
format: int32
responses:
- "422":
- description: Unprocessable Entity
- content:
- '*/*':
- schema:
- $ref: '#/components/schemas/problem'
"404":
description: Not Found
content:
@@ -165,10 +159,10 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/problem'
- "401":
- description: Unauthorized
+ "400":
+ description: Bad Request
content:
- application/json:
+ '*/*':
schema:
$ref: '#/components/schemas/problem'
"403":
@@ -183,6 +177,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/PagedModel'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
post:
tags:
- eventi
@@ -196,12 +196,6 @@ paths:
$ref: '#/components/schemas/nuovoEvento'
required: true
responses:
- "422":
- description: Unprocessable Entity
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
"404":
description: Not Found
content:
@@ -214,14 +208,8 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/problem'
- "201":
- description: Evento salvato con successo
- content:
- '*/*':
- schema:
- type: object
- "401":
- description: Unauthorized
+ "400":
+ description: Bad Request
content:
application/json:
schema:
@@ -232,8 +220,20 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/problem'
- "400":
- description: Bad Request
+ "201":
+ description: Evento salvato con successo
+ content:
+ '*/*':
+ schema:
+ type: object
+ "422":
+ description: Unprocessable Entity
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
+ "401":
+ description: Unauthorized
content:
application/json:
schema:
@@ -254,12 +254,6 @@ paths:
type: integer
format: int64
responses:
- "422":
- description: Unprocessable Entity
- content:
- '*/*':
- schema:
- $ref: '#/components/schemas/problem'
"404":
description: Not Found
content:
@@ -272,10 +266,10 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/problem'
- "401":
- description: Unauthorized
+ "400":
+ description: Bad Request
content:
- application/json:
+ '*/*':
schema:
$ref: '#/components/schemas/problem'
"403":
@@ -290,6 +284,12 @@ paths:
application/json:
schema:
$ref: '#/components/schemas/evento'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
components:
schemas:
problem:
@@ -376,6 +376,8 @@ components:
- CLIENT
- SERVER
tipoEvento:
+ maxLength: 255
+ minLength: 0
type: string
esito:
type: string
@@ -390,26 +392,41 @@ components:
type: integer
format: int64
sottotipoEvento:
+ maxLength: 255
+ minLength: 0
type: string
sottotipoEsito:
+ maxLength: 255
+ minLength: 0
type: string
dettaglioEsito:
type: string
idDominio:
+ pattern: "(^([0-9]){11}$)"
type: string
iuv:
+ maxLength: 35
+ minLength: 0
type: string
ccp:
+ maxLength: 35
+ minLength: 0
type: string
idA2A:
+ pattern: "(^[a-zA-Z0-9\\-_]{1,35}$)"
type: string
idPendenza:
+ pattern: "(^[a-zA-Z0-9\\-_]{1,35}$)"
type: string
idPagamento:
+ maxLength: 35
+ minLength: 0
type: string
datiPagoPA:
$ref: '#/components/schemas/datiPagoPA'
severita:
+ maximum: 5
+ minimum: 0
type: integer
format: int32
parametriRichiesta:
@@ -425,8 +442,6 @@ components:
idRiconciliazione:
type: integer
format: int64
- _links:
- $ref: '#/components/schemas/Links'
description: Evento da salvare.
Pageable:
type: object
@@ -507,6 +522,8 @@ components:
- CLIENT
- SERVER
tipoEvento:
+ maxLength: 255
+ minLength: 0
type: string
esito:
type: string
@@ -521,26 +538,41 @@ components:
type: integer
format: int64
sottotipoEvento:
+ maxLength: 255
+ minLength: 0
type: string
sottotipoEsito:
+ maxLength: 255
+ minLength: 0
type: string
dettaglioEsito:
type: string
idDominio:
+ pattern: "(^([0-9]){11}$)"
type: string
iuv:
+ maxLength: 35
+ minLength: 0
type: string
ccp:
+ maxLength: 35
+ minLength: 0
type: string
idA2A:
+ pattern: "(^[a-zA-Z0-9\\-_]{1,35}$)"
type: string
idPendenza:
+ pattern: "(^[a-zA-Z0-9\\-_]{1,35}$)"
type: string
idPagamento:
+ maxLength: 35
+ minLength: 0
type: string
datiPagoPA:
$ref: '#/components/schemas/datiPagoPA'
severita:
+ maximum: 5
+ minimum: 0
type: integer
format: int32
parametriRichiesta:
diff --git a/wars/api-gde/pom.xml b/wars/api-gde/pom.xml
index 428eedae6a..bffdfa0090 100644
--- a/wars/api-gde/pom.xml
+++ b/wars/api-gde/pom.xml
@@ -115,6 +115,34 @@
lombok
true
+
+
+
+ org.springframework.boot
+ spring-boot-starter-test
+ test
+
+
+ com.h2database
+ h2
+ test
+
+
+ org.hamcrest
+ hamcrest-core
+ test
+
+
+ junit
+ junit
+ test
+
+
+ org.springframework.boot
+ spring-boot-starter-validation
+ test
+
+
diff --git a/wars/api-gde/src/main/java/it/govpay/gde/assemblers/DatiPagoPAModelAssembler.java b/wars/api-gde/src/main/java/it/govpay/gde/assemblers/DatiPagoPAModelAssembler.java
deleted file mode 100644
index 9cc394cacd..0000000000
--- a/wars/api-gde/src/main/java/it/govpay/gde/assemblers/DatiPagoPAModelAssembler.java
+++ /dev/null
@@ -1,41 +0,0 @@
-package it.govpay.gde.assemblers;
-
-import java.math.BigDecimal;
-
-import org.springframework.hateoas.server.mvc.RepresentationModelAssemblerSupport;
-import org.springframework.stereotype.Component;
-
-import it.govpay.gde.controller.GdeController;
-import it.govpay.gde.entity.DatiPagoPAEntity;
-import it.govpay.gde.model.DatiPagoPAModel;
-
-@Component
-public class DatiPagoPAModelAssembler extends RepresentationModelAssemblerSupport {
-
- public DatiPagoPAModelAssembler() {
- super(GdeController.class, DatiPagoPAModel.class);
- }
-
- @Override
- public DatiPagoPAModel toModel(DatiPagoPAEntity entity) {
- DatiPagoPAModel model = instantiateModel(entity);
-
- model.setIdCanale(entity.getCodCanale());
- model.setIdPsp(entity.getCodPsp());
- model.setIdIntermediarioPsp(entity.getCodIntermediarioPsp());
- model.setIdIntermediario(entity.getCodIntermediario());
- model.setIdStazione(entity.getCodStazione());
- model.setIdDominio(entity.getCodDominio());
- model.setTipoVersamento(entity.getTipoVersamento());
- model.setModelloPagamento(entity.getModelloPagamento());
-
- model.setIdFlusso(entity.getCodFlusso());
- if(entity.getIdTracciato() != null)
- model.setIdTracciato(new BigDecimal(entity.getIdTracciato()));
- model.setIdRiconciliazione(entity.getTrn());
- model.setSct(entity.getSct());
-
- return model;
- }
-
-}
\ No newline at end of file
diff --git a/wars/api-gde/src/main/java/it/govpay/gde/assemblers/EventoIndexModelAssembler.java b/wars/api-gde/src/main/java/it/govpay/gde/assemblers/EventoIndexModelAssembler.java
index 3f56aefe37..36ff978852 100644
--- a/wars/api-gde/src/main/java/it/govpay/gde/assemblers/EventoIndexModelAssembler.java
+++ b/wars/api-gde/src/main/java/it/govpay/gde/assemblers/EventoIndexModelAssembler.java
@@ -1,7 +1,11 @@
package it.govpay.gde.assemblers;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
+
+import java.math.BigDecimal;
+
import org.apache.commons.lang3.StringUtils;
-import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.hateoas.CollectionModel;
import org.springframework.hateoas.server.mvc.RepresentationModelAssemblerSupport;
import org.springframework.stereotype.Component;
@@ -13,19 +17,14 @@
import it.govpay.gde.entity.converter.DatiPagoPAConverter;
import it.govpay.gde.model.CategoriaEvento;
import it.govpay.gde.model.ComponenteEvento;
+import it.govpay.gde.model.DatiPagoPAModel;
import it.govpay.gde.model.EsitoEvento;
import it.govpay.gde.model.EventoIndexModel;
import it.govpay.gde.model.RuoloEvento;
-import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo;
-import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn;
-
@Component
public class EventoIndexModelAssembler extends RepresentationModelAssemblerSupport {
- @Autowired
- private DatiPagoPAModelAssembler pagoPAModelAssembler;
-
public EventoIndexModelAssembler() {
super(GdeController.class, EventoIndexModel.class);
}
@@ -113,9 +112,30 @@ public void toModel(EventoBaseEntity entity, EventoIndexModel model) {
if(entity.getDatiPagoPA() != null) {
DatiPagoPAConverter converter = new DatiPagoPAConverter();
DatiPagoPAEntity datiPagoPAEntity = converter.convertToEntityAttribute(entity.getDatiPagoPA());
- model.setDatiPagoPA(this.pagoPAModelAssembler.toModel(datiPagoPAEntity));
+ model.setDatiPagoPA(this.toModel(datiPagoPAEntity));
}
model.setSeverita(entity.getSeverita());
}
+ public DatiPagoPAModel toModel(DatiPagoPAEntity entity) {
+ DatiPagoPAModel model = new DatiPagoPAModel();
+
+ model.setIdCanale(entity.getCodCanale());
+ model.setIdPsp(entity.getCodPsp());
+ model.setIdIntermediarioPsp(entity.getCodIntermediarioPsp());
+ model.setIdIntermediario(entity.getCodIntermediario());
+ model.setIdStazione(entity.getCodStazione());
+ model.setIdDominio(entity.getCodDominio());
+ model.setTipoVersamento(entity.getTipoVersamento());
+ model.setModelloPagamento(entity.getModelloPagamento());
+
+ model.setIdFlusso(entity.getCodFlusso());
+ if(entity.getIdTracciato() != null)
+ model.setIdTracciato(new BigDecimal(entity.getIdTracciato()));
+ model.setIdRiconciliazione(entity.getTrn());
+ model.setSct(entity.getSct());
+
+ return model;
+ }
+
}
\ No newline at end of file
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 89e9ea9fc8..411be60865 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
@@ -220,7 +220,7 @@ public ResponseEntity> findEventi(
@GetMapping(path = "/eventi/{id}", produces = { MediaType.APPLICATION_JSON_VALUE} , name = "getEvento")
public ResponseEntity getEventoById(
@Parameter(description="Id dell'evento da leggere.", required=true)
- @PathVariable("id") @Positive(message = "Id dell'evento deve essere un valore > 0") Long id
+ @PathVariable("id") @Positive(message = "Id dell'evento deve essere un valore > 0.") Long id
) {
return this.eventoRepository.findById(id)
.map(this.eventoAssembler::toModel)
@@ -242,16 +242,16 @@ public ResponseEntity> addEvento(
@Parameter(description="Evento da salvare.", required=true, schema=@Schema(implementation = NuovoEventoModel.class))
@Valid
@RequestBody NuovoEventoModel evento){
- this.logger.debug("AAAAAA Salvataggio evento: " + evento.toString());
+ this.logger.debug("Salvataggio evento: " + evento.toString());
try {
EventoEntity entity = this.nuovoEventoMapper.nuovoEventoModelToEventoEntity(evento);
this.eventoRepository.save(entity);
- this.logger.debug("AAAAAA Salvataggio evento completato.");
+ this.logger.debug("Salvataggio evento completato.");
return new ResponseEntity<>(HttpStatus.CREATED);
}catch (Exception e) {
- this.logger.error("AAAAAA Salvataggio evento completato con errore: " +e.getMessage(), e);
+ this.logger.error("Salvataggio evento completato con errore: " +e.getMessage(), e);
throw new InternalException(e);
}
}
diff --git a/wars/api-gde/src/main/java/it/govpay/gde/exception/ResourceNotFoundException.java b/wars/api-gde/src/main/java/it/govpay/gde/exception/ResourceNotFoundException.java
index 28919df073..c25ed992f5 100644
--- a/wars/api-gde/src/main/java/it/govpay/gde/exception/ResourceNotFoundException.java
+++ b/wars/api-gde/src/main/java/it/govpay/gde/exception/ResourceNotFoundException.java
@@ -12,7 +12,7 @@ public class ResourceNotFoundException extends RuntimeException {
public ResourceNotFoundException() {
super("La risorsa "+((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes())
- .getRequest()+" non esiste.");
+ .getRequest().getPathInfo()+" non esiste.");
}
}
diff --git a/wars/api-gde/src/main/java/it/govpay/gde/model/DatiPagoPAModel.java b/wars/api-gde/src/main/java/it/govpay/gde/model/DatiPagoPAModel.java
index 319f6df26e..16c2fe574c 100644
--- a/wars/api-gde/src/main/java/it/govpay/gde/model/DatiPagoPAModel.java
+++ b/wars/api-gde/src/main/java/it/govpay/gde/model/DatiPagoPAModel.java
@@ -2,8 +2,6 @@
import java.math.BigDecimal;
-import org.springframework.hateoas.RepresentationModel;
-
import com.fasterxml.jackson.annotation.JsonInclude;
import com.fasterxml.jackson.annotation.JsonRootName;
@@ -20,7 +18,7 @@
@EqualsAndHashCode(callSuper = false)
@JsonRootName(value = "datiPagoPA")
@JsonInclude(JsonInclude.Include.NON_NULL)
-public class DatiPagoPAModel extends RepresentationModel {
+public class DatiPagoPAModel {
private String idPsp;
diff --git a/wars/api-gde/src/main/java/it/govpay/gde/model/NuovoEventoModel.java b/wars/api-gde/src/main/java/it/govpay/gde/model/NuovoEventoModel.java
index 8d32a07d8c..c397fe60c1 100644
--- a/wars/api-gde/src/main/java/it/govpay/gde/model/NuovoEventoModel.java
+++ b/wars/api-gde/src/main/java/it/govpay/gde/model/NuovoEventoModel.java
@@ -1,6 +1,13 @@
package it.govpay.gde.model;
+import java.time.LocalDateTime;
+
+import javax.validation.constraints.Max;
+import javax.validation.constraints.Min;
+import javax.validation.constraints.Pattern;
import javax.validation.constraints.Positive;
+import javax.validation.constraints.PositiveOrZero;
+import javax.validation.constraints.Size;
import org.springframework.hateoas.server.core.Relation;
@@ -8,10 +15,12 @@
import com.fasterxml.jackson.annotation.JsonRootName;
import lombok.AllArgsConstructor;
+import lombok.Builder;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
+@Builder
@Data
@AllArgsConstructor
@NoArgsConstructor
@@ -19,15 +28,69 @@
@JsonRootName(value = "nuovoEvento")
@Relation(collectionRelation = "eventi")
@JsonInclude(JsonInclude.Include.NON_NULL)
-public class NuovoEventoModel extends EventoModel {
+public class NuovoEventoModel {
+
+ private Long id;
+
+ private ComponenteEvento componente;
+
+ private CategoriaEvento categoriaEvento;
+
+ private RuoloEvento ruolo;
+
+ @Size(max = 255, message = "Il valore presente nel campo tipoEvento non rispetta la lunghezza massima di 255 caratteri.")
+ private String tipoEvento;
+
+ private EsitoEvento esito;
+
+ @org.springframework.format.annotation.DateTimeFormat(iso = org.springframework.format.annotation.DateTimeFormat.ISO.DATE_TIME)
+ private LocalDateTime dataEvento;
+
+ @PositiveOrZero(message = "Il campo durataEvento deve contenere un valore >= 0.")
+ private Long durataEvento;
+
+ @Size(max = 255, message = "Il valore presente nel campo sottotipoEvento non rispetta la lunghezza massima di 255 caratteri.")
+ private String sottotipoEvento;
+
+ @Size(max = 255, message = "Il valore presente nel campo sottotipoEsito non rispetta la lunghezza massima di 255 caratteri.")
+ private String sottotipoEsito;
+
+ private String dettaglioEsito;
+
+ @Pattern(regexp = "(^([0-9]){11}$)", message = "Il valore presente nel campo idDominio non rispetta il pattern previsto.")
+ private String idDominio;
+
+ @Size(max = 35, message = "Il valore presente nel campo iuv non rispetta la lunghezza massima di 35 caratteri.")
+ private String iuv;
+
+ @Size(max = 35, message = "Il valore presente nel campo ccp non rispetta la lunghezza massima di 35 caratteri.")
+ private String ccp;
+
+ @Pattern(regexp = "(^[a-zA-Z0-9\\-_]{1,35}$)", message = "Il valore presente nel campo idA2A non rispetta il pattern previsto.")
+ private String idA2A;
+
+ @Pattern(regexp = "(^[a-zA-Z0-9\\-_]{1,35}$)", message = "Il valore presente nel campo idPendenza non rispetta il pattern previsto.")
+ private String idPendenza;
+
+ @Size(max = 35, message = "Il valore presente nel campo idPagamento non rispetta la lunghezza massima di 35 caratteri.")
+ private String idPagamento;
+
+ private DatiPagoPAModel datiPagoPA;
+
+ @Min(value = 0, message = "Il campo severita deve contenere un valore >= 0.") @Max(value = 5, message = "Il campo severita deve contenere un valore <= 5.")
+ private Integer severita;
+
+ private Object parametriRichiesta;
+
+ private Object parametriRisposta;
- @Positive(message = "Il campo idTracciato deve contenere un valore >= 0.")
+ @Positive(message = "Il campo idTracciato deve contenere un valore > 0.")
private Long idTracciato;
- @Positive(message = "Il campo idFr deve contenere un valore >= 0.")
+ @Positive(message = "Il campo idFr deve contenere un valore > 0.")
private Long idFr;
- @Positive(message = "Il campo idRiconciliazione deve contenere un valore >= 0.")
+ @Positive(message = "Il campo idRiconciliazione deve contenere un valore > 0.")
private Long idRiconciliazione;
}
diff --git a/wars/api-gde/src/main/resources/application.properties b/wars/api-gde/src/main/resources/application.properties
index 78b3bd8d50..557adb6838 100644
--- a/wars/api-gde/src/main/resources/application.properties
+++ b/wars/api-gde/src/main/resources/application.properties
@@ -1,3 +1,5 @@
+spring.main.banner-mode=off
+
#logging.level.org.springframework=ERROR
logging.level.org.springframework=DEBUG
@@ -8,7 +10,7 @@ spring.mvc.datetime-format=yyyy-MM-dd'T'HH:mm:ssZ
spring.jpa.generate-ddl=false
spring.jpa.hibernate.ddl-auto=none
-spring.datasource.url=jdbc:postgresql://localhost:5432/govpay_40
+spring.datasource.url=jdbc:postgresql://localhost:5432/govpay
spring.datasource.username=govpay
spring.datasource.password=govpay
diff --git a/wars/api-gde/src/main/resources/openapi.yaml b/wars/api-gde/src/main/resources/openapi.yaml
index 66f114e66f..73ead55625 100644
--- a/wars/api-gde/src/main/resources/openapi.yaml
+++ b/wars/api-gde/src/main/resources/openapi.yaml
@@ -1,623 +1,602 @@
-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
+ - eventi
+ summary: Ricerca eventi
+ description: Ricerca eventi
+ 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
+ description: informazioni di paginazione e ordinamento
+ required: true
+ schema:
+ $ref: '#/components/schemas/Pageable'
+ - name: dataDa
+ in: query
+ description: Inizio della finestra temporale di osservazione
+ required: false
+ schema:
+ type: string
+ format: date-time
+ - name: dataA
+ in: query
+ description: Fine della finestra temporale di osservazione
+ required: false
+ schema:
+ type: string
+ format: date-time
+ - name: idDominio
+ in: query
+ description: Identificativo del dominio beneficiario
+ required: false
+ schema:
+ type: string
+ - name: iuv
+ in: query
+ description: Identificativo univoco di versamento
+ required: false
+ schema:
+ type: string
+ - name: ccp
+ in: query
+ description: Codice contesto pagamento/ID ricevuta
+ required: false
+ schema:
+ type: string
+ - name: idA2A
+ in: query
+ description: Identificativo del gestionale proprietario della pendenza
+ required: false
+ schema:
+ type: string
+ - name: idPendenza
+ in: query
+ description: Identificativo della pendenza nel gestionale proprietario
+ required: false
+ schema:
+ type: string
+ - name: idPagamento
+ in: query
+ description: Identificativo della richiesta di pagamento
+ required: false
+ schema:
+ type: string
+ - name: categoria
+ in: query
+ description: Filtro per categoria evento
+ required: false
+ schema:
+ type: string
+ enum:
+ - INTERNO
+ - INTERFACCIA
+ - UTENTE
+ - name: esito
+ in: query
+ description: Filtro per esito evento
+ required: false
+ schema:
+ type: string
+ enum:
+ - OK
+ - KO
+ - FAIL
+ - name: ruolo
+ in: query
+ description: Filtro per ruolo evento
+ required: false
+ schema:
+ type: string
+ enum:
+ - CLIENT
+ - SERVER
+ - name: sottotipo
+ in: query
+ description: Filtro per sottotipo evento
+ required: false
+ schema:
+ type: string
+ - name: tipo
+ in: query
+ description: Filtro per tipo evento
+ required: false
+ schema:
+ type: string
+ - name: componente
+ in: query
+ description: Filtro per componente evento
+ 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
+ description: Filtro per severita' errore
+ required: false
+ schema:
+ type: integer
+ format: int32
+ - name: severitaA
+ in: query
+ description: Filtro per severita' errore
+ required: false
+ schema:
+ type: integer
+ format: int32
responses:
- '200':
- description: Elenco degli eventi
+ "404":
+ description: Not Found
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/problem'
+ "500":
+ description: Internal Server Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
+ "400":
+ description: Bad Request
+ content:
+ '*/*':
+ schema:
+ $ref: '#/components/schemas/problem'
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
+ "200":
+ description: Lista eventi
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/PagedModel'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
+ post:
tags:
- - Giornale degli Eventi
+ - eventi
+ summary: Salvataggio di un nuovo evento
+ description: Salvataggio di un nuovo evento
+ 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:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
+ "400":
+ description: Bad Request
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
+ "201":
+ description: Evento salvato con successo
+ content:
+ '*/*':
+ schema:
+ type: object
+ "422":
+ description: Unprocessable Entity
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
+ "401":
+ description: Unauthorized
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
+ /eventi/{id}:
get:
- summary: Dettaglio di un evento
- operationId: getEvento
tags:
- - Giornale degli Eventi
+ - eventi
+ summary: Dettaglio di un evento
+ description: Dettaglio di un evento
+ operationId: getEventoById
parameters:
- - in: path
- name: id
- description: Identificativo Evento
- required: true
- schema:
- type: string
+ - name: id
+ in: path
+ description: Id dell'evento da leggere.
+ required: true
+ schema:
+ type: integer
+ format: int64
responses:
- '201':
- description: Dettaglio di un evento
+ "404":
+ description: Not Found
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
+ "500":
+ description: Internal Server Error
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
+ "400":
+ description: Bad Request
+ content:
+ '*/*':
+ schema:
+ $ref: '#/components/schemas/problem'
+ "403":
+ description: Forbidden
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/problem'
+ "200":
+ description: Dettaglio Evento
+ content:
+ application/json:
+ schema:
+ $ref: '#/components/schemas/evento'
+ "401":
+ description: Unauthorized
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/problem'
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'
- tipoEvento:
type: string
- example: 'nodoInviaRPT'
+ enum:
+ - CLIENT
+ - SERVER
+ tipoEvento:
maxLength: 255
+ minLength: 0
+ type: string
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:
+ minLength: 0
type: string
- description: Descrizione dell'esito
- example: '200'
+ sottotipoEsito:
maxLength: 255
+ minLength: 0
+ type: string
dettaglioEsito:
type: string
- example: 'Operazione completata con successo'
idDominio:
+ pattern: "(^([0-9]){11}$)"
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:
+ minLength: 0
type: string
- description: Codice contesto di pagamento
- example: '1234acdc'
+ ccp:
maxLength: 35
+ minLength: 0
+ type: string
idA2A:
+ pattern: "(^[a-zA-Z0-9\\-_]{1,35}$)"
type: string
- description: Identificativo del gestionale responsabile della pendenza
- example: 'A2A-12345'
- pattern: '(^[a-zA-Z0-9\-_]{1,35}$)'
idPendenza:
+ pattern: "(^[a-zA-Z0-9\\-_]{1,35}$)"
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
+ minLength: 0
+ type: string
datiPagoPA:
- $ref: '#/components/schemas/DatiPagoPA'
+ $ref: '#/components/schemas/datiPagoPA'
severita:
+ maximum: 5
+ minimum: 0
+ type: integer
+ format: int32
+ parametriRichiesta:
+ type: object
+ parametriRisposta:
+ type: object
+ idTracciato:
+ type: integer
+ format: int64
+ idFr:
+ type: integer
+ format: int64
+ idRiconciliazione:
+ type: integer
+ format: int64
+ description: Evento da salvare.
+ Pageable:
+ type: object
+ properties:
+ page:
+ minimum: 0
type: integer
format: int32
- description: indica il livello di severita nel caso di evento con esito KO/FAIL
- example: 0
- FaultBean:
+ size:
+ minimum: 1
+ type: integer
+ format: int32
+ sort:
+ type: array
+ items:
+ type: string
+ PageMetadata:
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
+ size:
+ type: integer
+ format: int64
+ totalElements:
+ type: integer
+ format: int64
+ totalPages:
+ type: integer
+ format: int64
+ number:
+ type: integer
+ format: int64
+ PagedModel:
+ type: object
+ properties:
+ _embedded:
+ type: object
+ properties:
+ objects:
+ type: array
+ items:
+ type: object
+ _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:
+ maxLength: 255
+ minLength: 0
+ type: string
+ esito:
+ type: string
+ enum:
+ - OK
+ - KO
+ - FAIL
+ dataEvento:
+ type: string
+ format: date-time
+ durataEvento:
+ type: integer
+ format: int64
+ sottotipoEvento:
+ maxLength: 255
+ minLength: 0
+ type: string
+ sottotipoEsito:
+ maxLength: 255
+ minLength: 0
+ type: string
+ dettaglioEsito:
+ type: string
+ idDominio:
+ pattern: "(^([0-9]){11}$)"
+ type: string
+ iuv:
+ maxLength: 35
+ minLength: 0
+ type: string
+ ccp:
+ maxLength: 35
+ minLength: 0
+ type: string
+ idA2A:
+ pattern: "(^[a-zA-Z0-9\\-_]{1,35}$)"
+ type: string
+ idPendenza:
+ pattern: "(^[a-zA-Z0-9\\-_]{1,35}$)"
+ type: string
+ idPagamento:
+ maxLength: 35
+ minLength: 0
+ type: string
+ datiPagoPA:
+ $ref: '#/components/schemas/datiPagoPA'
+ severita:
+ maximum: 5
+ minimum: 0
+ type: integer
+ format: int32
+ parametriRichiesta:
+ type: object
+ parametriRisposta:
+ type: object
+ _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
diff --git a/wars/api-gde/src/main/resources/openapi_gen.yaml b/wars/api-gde/src/main/resources/openapi_gen.yaml
deleted file mode 100644
index 5e0c5bebb9..0000000000
--- a/wars/api-gde/src/main/resources/openapi_gen.yaml
+++ /dev/null
@@ -1,570 +0,0 @@
-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:
- - eventi
- summary: Ricerca eventi
- description: Ricerca eventi
- operationId: findEventi
- parameters:
- - name: pageable
- in: query
- description: informazioni di paginazione e ordinamento
- required: true
- schema:
- $ref: '#/components/schemas/Pageable'
- - name: dataDa
- in: query
- description: Inizio della finestra temporale di osservazione
- required: false
- schema:
- type: string
- format: date-time
- - name: dataA
- in: query
- description: Fine della finestra temporale di osservazione
- required: false
- schema:
- type: string
- format: date-time
- - name: idDominio
- in: query
- description: Identificativo del dominio beneficiario
- required: false
- schema:
- type: string
- - name: iuv
- in: query
- description: Identificativo univoco di versamento
- required: false
- schema:
- type: string
- - name: ccp
- in: query
- description: Codice contesto pagamento/ID ricevuta
- required: false
- schema:
- type: string
- - name: idA2A
- in: query
- description: Identificativo del gestionale proprietario della pendenza
- required: false
- schema:
- type: string
- - name: idPendenza
- in: query
- description: Identificativo della pendenza nel gestionale proprietario
- required: false
- schema:
- type: string
- - name: idPagamento
- in: query
- description: Identificativo della richiesta di pagamento
- required: false
- schema:
- type: string
- - name: categoria
- in: query
- description: Filtro per categoria evento
- required: false
- schema:
- type: string
- enum:
- - INTERNO
- - INTERFACCIA
- - UTENTE
- - name: esito
- in: query
- description: Filtro per esito evento
- required: false
- schema:
- type: string
- enum:
- - OK
- - KO
- - FAIL
- - name: ruolo
- in: query
- description: Filtro per ruolo evento
- required: false
- schema:
- type: string
- enum:
- - CLIENT
- - SERVER
- - name: sottotipo
- in: query
- description: Filtro per sottotipo evento
- required: false
- schema:
- type: string
- - name: tipo
- in: query
- description: Filtro per tipo evento
- required: false
- schema:
- type: string
- - name: componente
- in: query
- description: Filtro per componente evento
- 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
- description: Filtro per severita' errore
- required: false
- schema:
- type: integer
- format: int32
- - name: severitaA
- in: query
- description: Filtro per severita' errore
- required: false
- schema:
- type: integer
- format: int32
- responses:
- "422":
- description: Unprocessable Entity
- content:
- '*/*':
- schema:
- $ref: '#/components/schemas/problem'
- "404":
- description: Not Found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- "500":
- description: Internal Server Error
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- "403":
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- "200":
- description: Lista eventi
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/PagedModel'
- post:
- tags:
- - eventi
- summary: Salvataggio di un nuovo evento
- description: Salvataggio di un nuovo evento
- operationId: addEvento
- requestBody:
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/nuovoEvento'
- required: true
- responses:
- "422":
- description: Unprocessable Entity
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- "404":
- description: Not Found
- content:
- '*/*':
- schema:
- $ref: '#/components/schemas/problem'
- "500":
- description: Internal Server Error
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- "201":
- description: Evento salvato con successo
- content:
- '*/*':
- schema:
- type: object
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- "403":
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- "400":
- description: Bad Request
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- /eventi/{id}:
- get:
- tags:
- - eventi
- summary: Dettaglio di un evento
- description: Dettaglio di un evento
- operationId: getEventoById
- parameters:
- - name: id
- in: path
- description: Id dell'evento da leggere.
- required: true
- schema:
- type: integer
- format: int64
- responses:
- "422":
- description: Unprocessable Entity
- content:
- '*/*':
- schema:
- $ref: '#/components/schemas/problem'
- "404":
- description: Not Found
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- "500":
- description: Internal Server Error
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- "401":
- description: Unauthorized
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- "403":
- description: Forbidden
- content:
- application/json:
- schema:
- $ref: '#/components/schemas/problem'
- "200":
- description: Dettaglio Evento
- 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
- 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
- idTracciato:
- type: integer
- format: int64
- idFr:
- type: integer
- format: int64
- idRiconciliazione:
- type: integer
- format: int64
- _links:
- $ref: '#/components/schemas/Links'
- description: Evento da salvare.
- 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
- PagedModel:
- type: object
- properties:
- _embedded:
- type: object
- properties:
- objects:
- type: array
- items:
- type: object
- _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
- parametriRichiesta:
- type: object
- parametriRisposta:
- type: object
- _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/wars/api-gde/src/test/java/it/govpay/gde/ApiGdeTest.java b/wars/api-gde/src/test/java/it/govpay/gde/ApiGdeTest.java
new file mode 100644
index 0000000000..53bcc15414
--- /dev/null
+++ b/wars/api-gde/src/test/java/it/govpay/gde/ApiGdeTest.java
@@ -0,0 +1,71 @@
+package it.govpay.gde;
+
+import static org.hamcrest.Matchers.hasSize;
+import static org.hamcrest.Matchers.is;
+import static org.junit.jupiter.api.Assertions.assertEquals;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MvcResult;
+
+import it.govpay.gde.model.NuovoEventoModel;
+import it.govpay.gde.model.ProblemModel;
+
+public class ApiGdeTest extends BaseApiGdeTest {
+
+ @Test
+ public void test1() throws Exception {
+ mvc.perform(get("/eventi")
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andExpect(content()
+ .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+ .andExpect(jsonPath("$.page.totalElements", is(0)));
+ }
+
+ @Test
+ public void test2() throws Exception {
+ MvcResult mvcResult = mvc.perform(get("/eventi/10000")
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isNotFound())
+ .andExpect(content()
+ .contentTypeCompatibleWith(MediaType.APPLICATION_JSON)).andReturn();
+
+ ProblemModel problem = this.mapFromJson(mvcResult.getResponse().getContentAsString() , ProblemModel.class);
+ assertEquals(mvcResult.getResponse().getStatus(), problem.getStatus());
+ }
+
+ @Test
+ public void test3() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isCreated());
+
+ mvc.perform(get("/eventi")
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andExpect(content()
+ .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+ .andExpect(jsonPath("$.page.totalElements", is(1)))
+ .andExpect(jsonPath("$.page.size", is(25)))
+ .andExpect(jsonPath("$.page.totalPages", is(1)))
+ .andExpect(jsonPath("$.page.number", is(0)))
+ .andExpect(jsonPath("$._embedded.eventi", hasSize(1)))
+ .andExpect(jsonPath("$._embedded.eventi[0].categoriaEvento", is(nuovoEvento.getCategoriaEvento().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].ruolo", is(nuovoEvento.getRuolo().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].componente", is(nuovoEvento.getComponente().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].durataEvento", is(nuovoEvento.getDurataEvento()), long.class))
+ .andExpect(jsonPath("$._embedded.eventi[0].tipoEvento", is(nuovoEvento.getTipoEvento())))
+ .andExpect(jsonPath("$._embedded.eventi[0].sottotipoEvento", is(nuovoEvento.getSottotipoEvento())))
+ .andExpect(jsonPath("$._embedded.eventi[0].esito", is(nuovoEvento.getEsito().getValue())));
+
+ }
+}
diff --git a/wars/api-gde/src/test/java/it/govpay/gde/BaseApiGdeTest.java b/wars/api-gde/src/test/java/it/govpay/gde/BaseApiGdeTest.java
new file mode 100644
index 0000000000..326ae51a57
--- /dev/null
+++ b/wars/api-gde/src/test/java/it/govpay/gde/BaseApiGdeTest.java
@@ -0,0 +1,137 @@
+package it.govpay.gde;
+
+import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.math.BigDecimal;
+import java.text.DateFormat;
+import java.text.SimpleDateFormat;
+import java.time.LocalDateTime;
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+import java.util.TimeZone;
+
+import org.apache.commons.lang3.time.DateFormatUtils;
+import org.junit.runner.RunWith;
+import org.springframework.beans.factory.annotation.Autowired;
+import org.springframework.boot.test.autoconfigure.web.servlet.AutoConfigureMockMvc;
+import org.springframework.boot.test.context.SpringBootTest;
+import org.springframework.hateoas.PagedModel;
+import org.springframework.hateoas.mediatype.hal.Jackson2HalModule;
+import org.springframework.test.context.junit4.SpringRunner;
+import org.springframework.test.web.servlet.MockMvc;
+import org.springframework.test.web.servlet.MvcResult;
+
+import com.fasterxml.jackson.core.JsonParseException;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.core.type.TypeReference;
+import com.fasterxml.jackson.databind.DeserializationFeature;
+import com.fasterxml.jackson.databind.JsonMappingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;
+
+import it.govpay.gde.model.CategoriaEvento;
+import it.govpay.gde.model.ComponenteEvento;
+import it.govpay.gde.model.DatiPagoPAModel;
+import it.govpay.gde.model.EsitoEvento;
+import it.govpay.gde.model.EventoIndexModel;
+import it.govpay.gde.model.NuovoEventoModel;
+import it.govpay.gde.model.RuoloEvento;
+
+@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.MOCK, classes = Application.class)
+@RunWith(SpringRunner.class)
+@AutoConfigureMockMvc
+public abstract class BaseApiGdeTest {
+
+ public static final String STRING_256 = "aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa";
+ public static final String PATTERN_ID_DOMINIO_ERRATO = "123456 8901";
+ public static final String PATTERN_ID_A2A_ERRATO = "aaaaaa_a 123456 8901";
+ public static final String PATTERN_ID_PENDENZA_ERRATO = "aaaaa_aa 123456 8901";
+
+ @Autowired
+ protected MockMvc mvc;
+
+ protected ObjectMapper objectMapper = null;
+
+ public static DateFormat createDefaultDateFormat() {
+ SimpleDateFormat sdf = new SimpleDateFormat(DateFormatUtils.ISO_8601_EXTENDED_DATETIME_FORMAT.getPattern());
+ sdf.setTimeZone(TimeZone.getTimeZone("Europe/Rome"));
+ sdf.setLenient(false);
+ return sdf;
+ }
+
+ public BaseApiGdeTest() {
+ objectMapper = new ObjectMapper();
+
+ objectMapper.setDateFormat(createDefaultDateFormat());
+ objectMapper.registerModule(new JavaTimeModule());
+
+ objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
+ objectMapper.registerModule(new Jackson2HalModule());
+ }
+
+ protected String mapToJson(Object obj) throws JsonProcessingException {
+ return objectMapper.writeValueAsString(obj);
+ }
+ protected T mapFromJson(String json, Class clazz)
+ throws JsonParseException, JsonMappingException, IOException {
+
+ return objectMapper.readValue(json, clazz);
+ }
+
+ protected PagedModel pagedModelFromJson(String json, Class clazz)
+ throws JsonParseException, JsonMappingException, IOException {
+
+ return objectMapper.readValue(json, new TypeReference>() {});
+ }
+
+ protected Map mapFromJson(String json)
+ throws JsonParseException, JsonMappingException, IOException {
+
+ return objectMapper.readValue(json, new TypeReference>() {});
+ }
+
+ protected NuovoEventoModel buildNuovoEventoOK() {
+ NuovoEventoModel nuovoEvento = new NuovoEventoModel();
+ nuovoEvento.setCategoriaEvento(CategoriaEvento.INTERNO);
+ nuovoEvento.setRuolo(RuoloEvento.CLIENT);
+ nuovoEvento.setComponente(ComponenteEvento.GOVPAY);
+ nuovoEvento.setDataEvento(LocalDateTime.now());
+ nuovoEvento.setDurataEvento(0l);
+ nuovoEvento.setTipoEvento("tipoEvento");
+ nuovoEvento.setSottotipoEvento("sottotipoEvento");
+ nuovoEvento.setEsito(EsitoEvento.OK);
+
+ return nuovoEvento;
+ }
+
+ protected DatiPagoPAModel creaDatiPagoPAOk() {
+ DatiPagoPAModel datiPagoPA = new DatiPagoPAModel();
+ datiPagoPA.setIdCanale("codCanale");
+ datiPagoPA.setIdDominio("12345678901");
+ datiPagoPA.setIdFlusso("idFr_1234567890");
+ datiPagoPA.setIdIntermediario("11111111113");
+ datiPagoPA.setIdIntermediarioPsp("11111111113");
+ datiPagoPA.setIdPsp("codPsp");
+ datiPagoPA.setIdRiconciliazione("trn_1234567890");
+ datiPagoPA.setIdStazione("11111111113_01");
+ datiPagoPA.setIdTracciato(BigDecimal.ONE);
+ datiPagoPA.setModelloPagamento("0");
+ datiPagoPA.setSct("sct_1234567890");
+ datiPagoPA.setTipoVersamento("CP");
+ return datiPagoPA;
+ }
+
+ protected Long leggiIdUltimoEvento(MvcResult mvcResult)
+ throws JsonParseException, JsonMappingException, IOException, UnsupportedEncodingException {
+ PagedModel mapFromJson = this.pagedModelFromJson(mvcResult.getResponse().getContentAsString(), EventoIndexModel.class);
+
+ List eventi = new ArrayList<>( mapFromJson.getContent());
+
+ @SuppressWarnings("unchecked")
+ Map mapEvento = (Map) eventi.get(0);
+ Long idEvento = Long.valueOf(mapEvento.get("id").toString());
+ return idEvento;
+ }
+}
diff --git a/wars/api-gde/src/test/java/it/govpay/gde/GetApiGdeTest.java b/wars/api-gde/src/test/java/it/govpay/gde/GetApiGdeTest.java
new file mode 100644
index 0000000000..90cea3a481
--- /dev/null
+++ b/wars/api-gde/src/test/java/it/govpay/gde/GetApiGdeTest.java
@@ -0,0 +1,75 @@
+package it.govpay.gde;
+
+import static org.hamcrest.Matchers.is;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.http.MediaType;
+import org.springframework.test.web.servlet.MvcResult;
+
+import it.govpay.gde.model.NuovoEventoModel;
+
+public class GetApiGdeTest extends BaseApiGdeTest {
+
+ @Test
+ public void testGetOK() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isCreated());
+
+ MvcResult mvcResult = mvc.perform(get("/eventi"))
+ .andExpect(status().isOk())
+ .andExpect(content()
+ .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+ .andExpect(jsonPath("$._embedded.eventi[0].categoriaEvento", is(nuovoEvento.getCategoriaEvento().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].ruolo", is(nuovoEvento.getRuolo().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].componente", is(nuovoEvento.getComponente().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].durataEvento", is(nuovoEvento.getDurataEvento()), long.class))
+ .andExpect(jsonPath("$._embedded.eventi[0].tipoEvento", is(nuovoEvento.getTipoEvento())))
+ .andExpect(jsonPath("$._embedded.eventi[0].sottotipoEvento", is(nuovoEvento.getSottotipoEvento())))
+ .andExpect(jsonPath("$._embedded.eventi[0].esito", is(nuovoEvento.getEsito().getValue()))).andReturn();
+
+ Long idEvento = leggiIdUltimoEvento(mvcResult);
+
+ mvc.perform(get("/eventi/" + idEvento))
+ .andExpect(status().isOk())
+ .andExpect(content()
+ .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+ .andExpect(jsonPath("$.id", is(idEvento), long.class))
+ .andExpect(jsonPath("$.categoriaEvento", is(nuovoEvento.getCategoriaEvento().getValue())))
+ .andExpect(jsonPath("$.ruolo", is(nuovoEvento.getRuolo().getValue())))
+ .andExpect(jsonPath("$.componente", is(nuovoEvento.getComponente().getValue())))
+ .andExpect(jsonPath("$.durataEvento", is(nuovoEvento.getDurataEvento()), long.class))
+ .andExpect(jsonPath("$.tipoEvento", is(nuovoEvento.getTipoEvento())))
+ .andExpect(jsonPath("$.sottotipoEvento", is(nuovoEvento.getSottotipoEvento())))
+ .andExpect(jsonPath("$.esito", is(nuovoEvento.getEsito().getValue()))).andReturn();
+ }
+
+ @Test
+ public void testGetNotFound() throws Exception {
+
+ Long idEvento = 100000l;
+ mvc.perform(get("/eventi/" + idEvento))
+ .andExpect(status().isNotFound())
+ .andExpect(jsonPath("$.title", is("Not Found")))
+ .andExpect(jsonPath("$.status", is(404)))
+ .andExpect(jsonPath("$.detail", is("La risorsa /eventi/"+idEvento+" non esiste.")));
+ }
+
+ @Test
+ public void testGetIdNonValido() throws Exception {
+ Long idEvento = -1l;
+ mvc.perform(get("/eventi/" + idEvento))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("getEventoById.id: Id dell'evento deve essere un valore > 0.")));
+ }
+}
diff --git a/wars/api-gde/src/test/java/it/govpay/gde/PostApiGdeTest.java b/wars/api-gde/src/test/java/it/govpay/gde/PostApiGdeTest.java
new file mode 100644
index 0000000000..19683a5eb3
--- /dev/null
+++ b/wars/api-gde/src/test/java/it/govpay/gde/PostApiGdeTest.java
@@ -0,0 +1,335 @@
+package it.govpay.gde;
+
+import static org.hamcrest.Matchers.is;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
+import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.post;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.content;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.jsonPath;
+import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.status;
+
+import org.junit.jupiter.api.Test;
+import org.springframework.http.MediaType;
+
+import it.govpay.gde.model.DatiPagoPAModel;
+import it.govpay.gde.model.NuovoEventoModel;
+
+public class PostApiGdeTest extends BaseApiGdeTest {
+
+ @Test
+ public void testOK() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isCreated());
+
+ mvc.perform(get("/eventi")
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andExpect(content()
+ .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+ .andExpect(jsonPath("$._embedded.eventi[0].categoriaEvento", is(nuovoEvento.getCategoriaEvento().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].ruolo", is(nuovoEvento.getRuolo().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].componente", is(nuovoEvento.getComponente().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].durataEvento", is(nuovoEvento.getDurataEvento()), long.class))
+ .andExpect(jsonPath("$._embedded.eventi[0].tipoEvento", is(nuovoEvento.getTipoEvento())))
+ .andExpect(jsonPath("$._embedded.eventi[0].sottotipoEvento", is(nuovoEvento.getSottotipoEvento())))
+ .andExpect(jsonPath("$._embedded.eventi[0].esito", is(nuovoEvento.getEsito().getValue())));
+
+ }
+
+ @Test
+ public void testDatiPagoPAOK() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+
+ DatiPagoPAModel datiPagoPA = creaDatiPagoPAOk();
+ nuovoEvento.setDatiPagoPA(datiPagoPA );
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isCreated());
+
+ mvc.perform(get("/eventi")
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isOk())
+ .andExpect(content()
+ .contentTypeCompatibleWith(MediaType.APPLICATION_JSON))
+ .andExpect(jsonPath("$._embedded.eventi[0].categoriaEvento", is(nuovoEvento.getCategoriaEvento().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].ruolo", is(nuovoEvento.getRuolo().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].componente", is(nuovoEvento.getComponente().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].durataEvento", is(nuovoEvento.getDurataEvento()), long.class))
+ .andExpect(jsonPath("$._embedded.eventi[0].tipoEvento", is(nuovoEvento.getTipoEvento())))
+ .andExpect(jsonPath("$._embedded.eventi[0].sottotipoEvento", is(nuovoEvento.getSottotipoEvento())))
+ .andExpect(jsonPath("$._embedded.eventi[0].esito", is(nuovoEvento.getEsito().getValue())))
+ .andExpect(jsonPath("$._embedded.eventi[0].datiPagoPA.idCanale", is(nuovoEvento.getDatiPagoPA().getIdCanale())))
+ .andExpect(jsonPath("$._embedded.eventi[0].datiPagoPA.idDominio", is(nuovoEvento.getDatiPagoPA().getIdDominio())))
+ .andExpect(jsonPath("$._embedded.eventi[0].datiPagoPA.idFlusso", is(nuovoEvento.getDatiPagoPA().getIdFlusso())))
+ .andExpect(jsonPath("$._embedded.eventi[0].datiPagoPA.idIntermediario", is(nuovoEvento.getDatiPagoPA().getIdIntermediario())))
+ .andExpect(jsonPath("$._embedded.eventi[0].datiPagoPA.idIntermediarioPsp", is(nuovoEvento.getDatiPagoPA().getIdIntermediarioPsp())))
+ .andExpect(jsonPath("$._embedded.eventi[0].datiPagoPA.idPsp", is(nuovoEvento.getDatiPagoPA().getIdPsp())))
+ .andExpect(jsonPath("$._embedded.eventi[0].datiPagoPA.idRiconciliazione", is(nuovoEvento.getDatiPagoPA().getIdRiconciliazione())))
+ .andExpect(jsonPath("$._embedded.eventi[0].datiPagoPA.idStazione", is(nuovoEvento.getDatiPagoPA().getIdStazione())))
+ .andExpect(jsonPath("$._embedded.eventi[0].datiPagoPA.idTracciato", is(nuovoEvento.getDatiPagoPA().getIdTracciato())))
+ .andExpect(jsonPath("$._embedded.eventi[0].datiPagoPA.idModelloPagamento", is(nuovoEvento.getDatiPagoPA().getModelloPagamento())))
+ .andExpect(jsonPath("$._embedded.eventi[0].datiPagoPA.idSct", is(nuovoEvento.getDatiPagoPA().getSct())))
+ .andExpect(jsonPath("$._embedded.eventi[0].datiPagoPA.idTipoVersamento", is(nuovoEvento.getDatiPagoPA().getTipoVersamento())))
+
+ ;
+
+ }
+
+ @Test
+ public void testLunghezzaTipoEvento() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setTipoEvento(STRING_256);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il valore presente nel campo tipoEvento non rispetta la lunghezza massima di 255 caratteri.")));
+
+ }
+
+ @Test
+ public void testLunghezzaSottotipoEvento() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setSottotipoEvento(STRING_256);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il valore presente nel campo sottotipoEvento non rispetta la lunghezza massima di 255 caratteri.")));
+ }
+
+ @Test
+ public void testLunghezzaSottotipoEsito() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setSottotipoEsito(STRING_256);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il valore presente nel campo sottotipoEsito non rispetta la lunghezza massima di 255 caratteri.")));
+ }
+
+ @Test
+ public void testLunghezzaIuv() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setIuv(STRING_256);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il valore presente nel campo iuv non rispetta la lunghezza massima di 35 caratteri.")));
+ }
+
+ @Test
+ public void testLunghezzaCcp() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setCcp(STRING_256);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il valore presente nel campo ccp non rispetta la lunghezza massima di 35 caratteri.")));
+ }
+
+ @Test
+ public void testLunghezzaIdPagamento() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setIdPagamento(STRING_256);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il valore presente nel campo idPagamento non rispetta la lunghezza massima di 35 caratteri.")));
+ }
+
+ @Test
+ public void testLunghezzaIdDominio() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setIdDominio(STRING_256);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il valore presente nel campo idDominio non rispetta il pattern previsto.")));
+ }
+
+ @Test
+ public void testLunghezzaIdA2A() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setIdA2A(STRING_256);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il valore presente nel campo idA2A non rispetta il pattern previsto.")));
+ }
+
+ @Test
+ public void testLunghezzaIdPendenza() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setIdPendenza(STRING_256);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il valore presente nel campo idPendenza non rispetta il pattern previsto.")));
+ }
+
+ @Test
+ public void testPatternIdDominio() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setIdDominio(PATTERN_ID_DOMINIO_ERRATO);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il valore presente nel campo idDominio non rispetta il pattern previsto.")));
+ }
+
+ @Test
+ public void testPatternIdA2A() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setIdA2A(PATTERN_ID_A2A_ERRATO);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il valore presente nel campo idA2A non rispetta il pattern previsto.")));
+ }
+
+ @Test
+ public void testPatternIdPendenza() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setIdPendenza(PATTERN_ID_PENDENZA_ERRATO);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il valore presente nel campo idPendenza non rispetta il pattern previsto.")));
+ }
+
+ @Test
+ public void testDurataEventoMinZero() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setDurataEvento(-1l);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il campo durataEvento deve contenere un valore >= 0.")));
+ }
+
+ @Test
+ public void testSeveritaMinZero() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setSeverita(-1);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il campo severita deve contenere un valore >= 0.")));
+ }
+
+ @Test
+ public void testSeveritaMagCinque() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setSeverita(6);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il campo severita deve contenere un valore <= 5.")));
+ }
+
+ @Test
+ public void testIdTracciatoZero() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setIdTracciato(0l);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il campo idTracciato deve contenere un valore > 0.")));
+ }
+
+ @Test
+ public void testIdFrZero() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setIdFr(0l);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il campo idFr deve contenere un valore > 0.")));
+ }
+
+ @Test
+ public void testIdRiconciliazioneZero() throws Exception {
+ NuovoEventoModel nuovoEvento = buildNuovoEventoOK();
+ nuovoEvento.setIdRiconciliazione(0l);
+
+ mvc.perform(post("/eventi")
+ .content(this.mapToJson(nuovoEvento))
+ .contentType(MediaType.APPLICATION_JSON))
+ .andExpect(status().isBadRequest())
+ .andExpect(jsonPath("$.title", is("Bad Request")))
+ .andExpect(jsonPath("$.status", is(400)))
+ .andExpect(jsonPath("$.detail", is("Il campo idRiconciliazione deve contenere un valore > 0.")));
+ }
+}
diff --git a/wars/api-gde/src/test/resources/application.properties b/wars/api-gde/src/test/resources/application.properties
index a6c87dbbb4..040d263ec3 100644
--- a/wars/api-gde/src/test/resources/application.properties
+++ b/wars/api-gde/src/test/resources/application.properties
@@ -5,19 +5,21 @@ logging.level.org.springframework=DEBUG
spring.mvc.date-format=yyyy-MM-dd
spring.mvc.datetime-format=yyyy-MM-dd'T'HH:mm:ssZ
-spring.jpa.generate-ddl=false
-spring.jpa.hibernate.ddl-auto=none
+spring.datasource.url=jdbc:h2:mem:test
+spring.datasource.driverClassName=org.h2.Driver
+spring.datasource.username=sa
+spring.datasource.password=
-spring.jpa.show-sql=true
+spring.jpa.hibernate.ddl-auto=create
-spring.datasource.url=jdbc:postgresql://localhost:5432/govpay_40
-spring.datasource.username=govpay
-spring.datasource.password=govpay
+spring.jpa.database-platform=org.hibernate.dialect.H2Dialect
+spring.jpa.defer-datasource-initialization=true
+spring.jpa.show-sql=false
+spring.h2.console.enabled=false
spring.jpa.open-in-view=false
server.error.whitelabel.enabled=true
-
# Customizzazione Logback
logging.directoryPath=/var/log/govpay