# Eventor.ro Local Gateway

Local Gateway este un proiect separat de aplicatia cPanel. Se instaleaza pe laptop/mini-PC in reteaua locala a festivalului si foloseste o baza MySQL/MariaDB locala.

## Ce sincronizeaza

Snapshotul este limitat la un singur eveniment:

- bilete active/blocate/refundate/anulate pentru eveniment
- hash-uri QR, nu tokenuri brute
- entitlements, zone, gates, festival days
- counters curente
- bratari active/blocate/refundate
- wallets si solduri
- vendors, terminals si scanner devices
- check-in online aprobat, doar status si URL foto aprobat daca exista

Nu descarca intreaga baza de date.

## API central

- `POST /api/local-gateway/register` - creare gateway de catre admin.
- `POST /api/local-gateway/:gatewayCode/pull-snapshot` - descarca snapshot cu `Authorization: Bearer <token>`.
- `POST /api/local-gateway/:gatewayCode/push-sync` - trimite scanari si tranzactii cashless locale.
- `GET /api/local-gateway/:gatewayCode/status` - status gateway si warning pentru mai multe gateway-uri active.
- `POST /api/local-gateway/:gatewayCode/device-pair` - imperechere device.
- `GET /api/local-gateway/:gatewayCode/snapshot-status` - status snapshot/sync.

Tokenul gateway este salvat central doar ca hash SHA-256. Tokenul brut se afiseaza o singura data la creare.

## Idempotenta si conflicte

Scanarile si tranzactiile cashless folosesc `idempotency_key`.

La push sync:

- daca cheia exista central, itemul este tratat ca duplicate;
- daca biletul a fost blocat/refundat dupa snapshot, itemul devine conflict;
- daca wallet-ul este blocat sau soldul central nu permite debitarea, itemul devine conflict;
- un conflict nu opreste intreg batch-ul.

## Securitate

- Nu expune gateway-ul in internet public.
- Foloseste Wi-Fi local protejat.
- Dashboard-ul local trebuie protejat operational prin reteaua privata si PIN/local auth inainte de productie extinsa.
- Activeaza full disk encryption pe laptop/mini-PC daca se pastreaza poze sau date personale local.
- Sterge snapshoturile locale dupa festival si dupa reconcilierea finala.

## Module locale finale

- `/scanner` valideaza QR si wristband token, cu mod intrare, iesire si validare.
- `/vendor-pos` proceseaza cumparaturi cashless locale si salveaza tranzactiile pentru sync.
- `/nfc-writer` este SIMULARE NFC si nu scrie pe hardware real.
- `/live-stats` foloseste polling local si afiseaza inside, intrari, iesiri, vanzari si nesincronizate.
