FlowPay Check Sessions API (2.0.0-beta)

Download OpenAPI specification:

FlowPay Check Sessions Service

Questo progetto implementa un microservizio Vapor dedicato alla gestione di sessioni di "presa visione" di documenti HTML. Il servizio genera pagine a partire da template Leaf, raccoglie l'accettazione dell'utente finale e ne traccia ogni accesso a fini di audit.

Architettura del progetto

  • App: inizializza l'applicazione, configura il database, registra i servizi Leaf e collega i controller.
  • Api: espone i controller HTTP e i relativi DTO; si occupa della validazione dell'input e delle risposte restituite.
  • Core: contiene i modelli Fluent (CheckSession, AccessLog) e la logica di dominio per la gestione dello stato della sessione.
  • Tests: suite XCTest che verifica creazione sessioni, render dei template, flusso di accettazione e logging.
  • Resources/Views: template Leaf collocati sotto documents/ e pagine condivise (session.leaf) che appendono il footer di conferma.

Flusso di accettazione

  1. CreazionePOST /check-sessions accetta il nome del template, eventuale URL di redirect e un dizionario di variabili (stringa/stringa) da iniettare nella vista. Restituisce l'identificativo della sessione insieme allo stato iniziale pending.
  2. VisualizzazioneGET /check-sessions/{sessionId} renderizza il template scelto e mostra il footer con checkbox e pulsante di conferma. Ogni apertura viene registrata in tabella access_logs con IP, user-agent, header principali e path richiesto.
  3. StatoGET /check-sessions/{sessionId}/status restituisce lo stato corrente (pending, accepted, rejected) insieme al timestamp di accettazione, utile per orchestrare frontend o workflow asincroni.
  4. Accettazione/RifiutoPOST /check-sessions/{sessionId}/{response} richiede il form accepted=true e supporta due percorsi:
    • response = accept: porta la sessione in stato accepted e, se configurato, reindirizza l'utente (303 See Other); senza redirect restituisce 200 OK.
    • response = reject: registra il rifiuto impostando lo stato su rejected, mantenendo lo stesso comportamento di redirect facoltativo.

Gli stati disponibili sono:

  • pending: la sessione attende l'interazione dell'utente.
  • accepted: il documento è stato confermato e l'utente può essere reindirizzato.
  • rejected: indica che l'utente ha rifiutato il documento tramite endpoint /reject.

Template e variabili

  • Ogni template va salvato in Resources/Views/documents/<nome>.leaf.
  • Le variabili vengono passate come dizionario e possono essere richiamate nel template con #(chiave).
  • Il file Resources/Views/session.leaf incapsula il template dinamico e gestisce il footer, evitando duplicazione di logica nei template di dominio.

Logging e audit

  • Ad ogni GET /check-sessions/{sessionId} viene creato un record AccessLog con IP, user-agent, accept-language, referer, metodo HTTP e path.
  • In caso di accettazione vengono memorizzati timestamp, IP e user-agent dell'utente che ha confermato.
  • Queste informazioni consentono di ricostruire l'intero percorso di presa visione del documento.

Test e validazioni

  • La suite CheckSessionTests verifica creazione, render, accettazione e gestione di template temporanei.
  • Per lanciare i test: swift test.
  • La validazione input assicura che templateName sia non vuoto (max 80 caratteri) e che la checkbox di accettazione sia impostata a true prima di aggiornare lo stato della sessione.

CheckSessions

Flusso per la visualizzazione e l'accettazione di documenti HTML generati con Leaf

Create a check session

Creates a new acknowledgement session bound to a Leaf template and returns its identifier.

Request Body schema: application/json
required
templateName
required
string [ 1 .. 80 ] characters

Leaf template stored under Resources/Views/documents

redirectURL
string <uri>

Optional absolute URL used after confirmation

required
object

Key-value pairs injected into the template

Responses

Request samples

Content type
application/json
{
  • "templateName": "string",
  • "redirectURL": "http://example.com",
  • "variables": {
    }
}

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "templateName": "string",
  • "redirectURL": "https://flowpay.it/success",
  • "status": "pending",
  • "createdAt": "2019-08-24T14:15:22Z",
  • "acceptedAt": "2019-08-24T14:15:22Z"
}

Render the session template

Renders the HTML template associated with the provided session and appends the acknowledgement footer.

path Parameters
sessionId
required
string <uuid>

Identifier of the check session

Responses

Retrieve acknowledgement status

Returns the current acknowledgement status for the provided session.

path Parameters
sessionId
required
string <uuid>

Identifier of the check session

Responses

Response samples

Content type
application/json
{
  • "id": "497f6eca-6276-4993-bfeb-53cbbbba6f08",
  • "status": "pending",
  • "acceptedAt": "2019-08-24T14:15:22Z"
}

Confirm or reject the acknowledgement

Validates the acceptance checkbox, updates the session status, and optionally redirects the user. Use accept to confirm the acknowledgement or reject to record a refusal.

path Parameters
sessionId
required
string <uuid>

Identifier of the check session

response
required
string
Enum: "accept" "reject"

Action to execute on the session

Request Body schema: application/x-www-form-urlencoded
required
accepted
required
boolean

Must be true to process the acknowledgement outcome

Responses