Il consumer ascolta la coda SQS pn-notification-cost-to-update e gestisce gli eventi NOTIFICATION_COST_INITIALIZATION.
Per ogni messaggio ricevuto:
- avvia il processo
UPDATE NOTIFICATION COST - imposta il contesto di logging (MDC) con informazioni utili come
messageId,traceIdeiun - delega la gestione del messaggio al router interno
- al termine dell’elaborazione pubblica un evento di outcome su EventBridge con stato
OK - in caso di errore, traccia l’eccezione nei log e rilancia l’errore
La gestione è asincrona: l’API pubblica un messaggio in coda e il consumer esegue la persistenza reale dei dati.
Il router ha la responsabilità di instradare il messaggio verso l’handler corretto in base al tipo evento.
Nel dettaglio:
- estrae il tipo evento dal messaggio tramite la configurazione di routing
- se il tipo evento è
NOTIFICATION_COST_INITIALIZATION, inoltra il payload al relativo handler - recupera
eventIdeiunper arricchire il contesto MDC prima della lavorazione - se il tipo evento non è presente o non è supportato, genera un errore di routing
Attualmente il router supporta il solo evento:
NOTIFICATION_COST_INITIALIZATION
L’handler che gestisce NOTIFICATION_COST_INITIALIZATION:
- estrae
iun,notificationCostsepayments - salva i record nella tabella
NotificationDeliveryCost - aggiorna i record nella tabella
PaymentInfo - gestisce eventuali errori di persistenza con log dedicati
Al completamento della gestione, il servizio pubblica un evento su EventBridge contenente:
iunstatus = OK
Per eseguire correttamente lo script, è necessario configurare l'ambiente come segue:
È necessario prima avviare LocalStack e successivamente eseguire lo script di inizializzazione del consumer:
- Avviare LocalStack con il comando (in un terminale separato):
sudo docker compose up localstack - Una volta che LocalStack è in esecuzione ed è raggiungibile su
http://localhost:4566, eseguire da host lo scriptinit-for-consumer.shper inizializzare le risorse necessarie al consumer.
- Variabile d'ambiente:
PN_NOTIFICATIONCOSTSERVICE_NOTIFICATIONDELIVERYCOSTTABLE_TABLENAME - Nome risorsa CloudFormation:
NotificationDeliveryCostTableName - Tipo: Tabella DynamoDB
- Funzionalità: La tabella pn-NotificationDeliveryCost viene utilizzata per persistere i costi di consegna delle notifiche.
- Variabile d'ambiente:
PN_NOTIFICATIONCOSTSERVICE_PAYMENTINFOTABLE_TABLENAME - Nome risorsa CloudFormation:
PaymentInfoTableName - Tipo: Tabella DynamoDB
- Funzionalità: La tabella pn-PaymentInfo viene utilizzata per persistere le informazioni di pagamento associate a una notifica.
- Variabile d'ambiente:
PN_NOTIFICATIONCOSTSERVICE_TOPICS_PNNOTIFICATIONCOSTTOUPDATE - Nome risorsa CloudFormation:
PnNotificationCostToUpdateQueueName - Tipo: Input (Coda SQS)
- Scopo: Disaccoppia la richiesta di validazione dei dati di pagamento dalla logica di business. Il servizio invia un messaggio alla coda.
- Trigger: Riceve un evento di tipo
NotificationCostInitializationEvent.
- Esegue una migrazione di dati per calcolare e salvare i costi di consegna delle notifiche.
- In base al numero degli items della lista di oggetti
recipientspresenti nella notifica, crea n record corrispondenti recuperando per ciascuno il relativo recipientId e popolando il relativo camporecipientInternalId. -
- Analizza gli item della tabella
pn-Timelinesfiltrando per le seguenti categorie:- SEND_ANALOG_DOMICILE: Vengono estratti i campi
sentAttemptMade,productTypeeanalogCost. - Se
sentAttemptMadeè uguale a0, vengono popolati i campi relativi al primo invio (firstAnalogCost). - Se
sentAttemptMadeè uguale a1, vengono popolati i campi relativi al secondo invio (secondAnalogCost).
- SEND_ANALOG_DOMICILE: Vengono estratti i campi
- Analizza gli item della tabella
- SEND_SIMPLE_REGISTERED_LETTER: Vengono recuperati i campi
productTypeeanalogCost(comecost) per popolaresimpleRegisteredLetterCost. - REQUEST_REFUSED o NOTIFICATION_CANCELLED: Il flag
isDeletedviene impostato atrueper tutti i record creati sulla tabellaNotificationDeliveryCost. - Trasforma i dati raccolti in un nuovo item.
- Salva l'item in una nuova tabella DynamoDB (
NotificationDeliveryCost).
Questo script esegue un processo di migrazione per popolare la tabella NotificationDeliveryCost.
Analizza le notifiche e le relative timeline per calcolare i costi di consegna.
| Variabile Ambiente | Descrizione | Default | Obbligatorio |
|---|---|---|---|
| AWS_REGION | La regione AWS per le operazioni DynamoDB. | - | No |
| AWS_PROFILE | profilo AWS per le operazioni DynamoDB | - | No |
| MFA_TOKEN | token AWS per le operazioni DynamoDB | - | No |
| NODE_ENV | Env per l'esecuzione | local |
Si |
*Nota: Obbligatori solo per ambienti diversi da local.
Prima di eseguire lo script, è necessario assicurarsi che le tabelle DynamoDB pn-Timelines, NotificationDeliveryCost e PaymentInfo siano correttamente configurate e accessibili.
Installare le dipendenze del progetto con npm install.
Per eseguire correttamente lo script, è necessario configurare l'ambiente come segue:
Creare un file .env nel percorso src/config/.env con la seguente struttura:
Snippet di codice
NODE_ENV=dev
AWS_PROFILE=dev MFA_TOKEN=123456 AWS_REGION=eu-south-1
Assicurarsi di associare l'AWS_PROFILE corretto in base all'ambiente di destinazione e di inserire un MFA_TOKEN valido
al momento del lancio.
In locale è sufficiente inizializzare la variabile NODE_ENV a local. È necessario avviare LocalStack eseguendo
il file init-for-migration.sh, quindi lanciare il comando:
Bash
NODE_TLS_REJECT_UNAUTHORIZED=0 node index.js IUN-STANDARD-MIX IUN-SIMPLE-LETTER