# Infrastruttura Async / DB

## Scopo

Questo diagramma descrive il flusso comune usato da tutti i moduli GUI quando eseguono una query sul database.

## Flusso trasversale

            flowchart TD
        A["Evento UI (click / selezione / ricerca)"] --> B["Metodo finestra"]
        B --> C["AsyncRunner.run(awaitable)"]
        C --> D["Coroutines sul loop globale"]
        D --> E["AsyncMSSQLClient.query_json() / exec()"]
        E --> F["SQL Server"]
        F --> G["Risultato query"]
        G --> H["Future completata"]
        H --> I["Callback _ok / _err su thread Tk"]
        I --> J["Aggiornamento widget"]

## Relazioni principali

            flowchart LR
        Main["main.py"] --> Loop["get_global_loop()"]
        Main --> DB["AsyncMSSQLClient"]
        Windows["Moduli GUI"] --> Runner["AsyncRunner"]
        Runner --> Loop
        Runner --> DB
        DB --> SQL["SQL Server Mediseawall"]

## Note

- Il loop asincrono è condiviso tra tutte le finestre.

- Il client DB è condiviso e creato una sola volta nel launcher.

- I callback che aggiornano la UI rientrano sempre sul thread Tk.