generated from pagopa/template-java-spring-microservice
-
Notifications
You must be signed in to change notification settings - Fork 0
Home
Jacopo Carlini edited this page Nov 14, 2024
·
11 revisions
Welcome to the pagopa-wisp-converter wiki!
flowchart TD
A((Inizio)) --> B[Elimina timer su RPT]
subgraph convert
B --> C[Recupera RPTRequestEntity dal database]
C --> E
E[Estrai dati sessione da RPTRequestEntity] --> F[Salva RT come stato REDIRECT]
F --> G[Genera posizione debitoria tramite API GPD]
G --> H[Salva mappatura richiesta in cache per generazione RT]
H --> I[Esegui chiamata al servizio di checkout]
I --> J[Salva mappatura del carrello in cache]
J --> K[Imposta timer eCommerce per ciascun avviso nel carrello]
K --> L[Restituisci URI di reindirizzamento]
end
L --> V(((OK)))
convert --> |Exception| Q[Registra messaggio di errore e invia RTKo]
Q --> R{Eccezione è AppException?}
R -->|Sì| S[Lancia nuovamente AppException]
R -->|No| T[Lancia nuova AppException con codice errore]
T --> U(((Errore)))
S --> U
style convert fill:#FFB793
flowchart TD
A((Inizio: sendOkPaaInviaRt)) --> B[Converti payload in richiesta PaSendRTV2]
subgraph main_flow [Flusso principale]
B --> C[Recupera dati di configurazione dalla cache]
C --> D[Recupera mapping NAV-IUV dalla cache]
D --> E[Usa paymentNote per ottenere i dati di sessione]
E --> F[Recupera stazione dalla cache e estrai ricevuta da richiesta]
%% Controllo stazione su GPD
F --> G{Stazione è abilitata su GPD?}
G -->|Sì|K[Genera report per RT non generabile]
K((Itera su ciascun RPT estratto)) --> L[estrazione delle RPT]
L --> RE[salva evento RE]
RE --> K
G -->|No| H[Estrai RPT richiesti da sessionData]
H --> HH((itear su ogni RPT))
HH --> I[build request]
I --> AA[genera idempotencyKey]
AA --> BB{is IdempotencyKey Processable?}
BB --> |Si|CC[lock idempotency key status to avoid concurrency issues]
BB --> |No|HH
subgraph save
CC --> DD[save receipt-rt with status SENDING and rawReceipt]
DD --> EE[send the receipt to the creditor institution via the URL set in the station configuration]
EE --> FF[generate a new event in RE for store the successful sending of the receipt]
end
FF --> GG[Unlock idempotency key after a successful operation]
GG --> HH
subgraph sendReceiptToCreditorInstitution
save --> |eccezione|AAA{Cattura AppException o Exception}
AAA --> |Exception|BBB[schedule a retry of the sending]
AAA --> |AppException|CCC[is RECEIPT_GENERATION_ERROR_DEAD_LETTER]
CCC --> |si|DDD[salva la request della dead letter]
CCC --> |no|BBB
BBB --> FFF@{ shape: cross-circ, label: "Summary" }
DDD --> FFF
end
FFF --> GG
end
K --> |fine iterazioni|Fine
HH --> |fine iterazioni|Fine
%% Eccezione separata
R[Cattura AppException o Exception] -->|AppException| S[Lancia nuovamente AppException]
R -->|Exception| T[Lancia AppException con errore specifico]
S --> errore(((errore)))
T --> errore
Fine(((OK)))
%% Collegamento tra flusso principale e eccezione
main_flow --> |eccezione|R
style save fill:#f0b562
style sendReceiptToCreditorInstitution fill:#80ed9d
flowchart TD
subgraph main_flow [Flusso principale]
A[Inizio: sendOkPaaInviaRtToCreditorInstitution] --> B[Converti payload in richiesta PaSendRTV2]
B --> C[Recupera dati di configurazione dalla cache]
C --> D[Recupera mapping NAV-IUV dalla cache]
D --> E[Usa paymentNote per ottenere i dati di sessione]
E --> F[Recupera stazione dalla cache e estrai ricevuta da richiesta]
%% Controllo stazione su GPD
F --> G{Stazione è abilitata su GPD?}
G -->|Sì| H[Genera report per RT non generabile]
%% Processo alternativo se stazione non è su GPD
G -->|No| J[Estrai RPT richiesti da sessionData]
J --> K((Inizio iterazione RPT))
%% Iterazione e invio RPT per ciascun elemento
K --> L[Clona e aggiorna richiesta PaSendRTV2 per gestione multi-beneficiario]
L --> M[Genera header paaInviaRT per richiesta corrente]
M --> N[Genera contenuto OK RT dal sessionData e configura ricevuta]
N --> O[Invia ricevuta a istituto creditore]
%% Gestione errori di invio
O -->|Errore invio| P[Aggiungi a coda per retry]
P --> K
O --> K
K --> U(((Fine iterazione RPT)))
end
H --> U
%% Eccezione separata
R[Cattura AppException o Exception] -->|AppException| S[Lancia nuovamente AppException]
R -->|Exception| T[Lancia AppException con errore specifico]
S --> V
T --> V
V(((Errore)))
%% Collegamento tra flusso principale e eccezione
main_flow --> R