fix: correzioni critiche e checklist test manuali
CORREZIONI:
- Badge confrontato ESATTAMENTE come stringa (rimosso .lstrip("0"))
- Success modal si chiude quando arriva nuovo badge (fix dipendenze useCallback)
- Polling ogni 30s per invalidare sessione se server riparte
- Area carosello allargata per testi lunghi (es. russo)
DOCUMENTAZIONE:
- API_SPECIFICATION.md aggiornata: badge come stringa esatta
- Creata TEST_CHECKLIST.md con 22 test manuali
- Aggiornati piani backend e frontend
Badge sono STRINGHE, non numeri:
- "0008988288" != "8988288" (zeri iniziali significativi)
This commit is contained in:
@@ -39,6 +39,7 @@ VotoFocolari/
|
||||
├── backend-mock/
|
||||
│ ├── main.py # Entry point con argparse
|
||||
│ ├── Pipfile # Dipendenze Python
|
||||
│ ├── API_SPECIFICATION.md # Specifiche per backend reale
|
||||
│ ├── api/routes.py # Endpoint API
|
||||
│ ├── schemas/models.py # Modelli Pydantic
|
||||
│ └── data/
|
||||
@@ -65,14 +66,15 @@ VotoFocolari/
|
||||
1. **Login Validatore**: Passa badge + inserisci password → Sessione 30 min
|
||||
2. **Attesa Partecipante**: Schermata grande "Passa il badge"
|
||||
3. **Visualizzazione Utente**: Card con foto, nome, ruolo, stato ammissione
|
||||
4. **Conferma Ingresso**: Validatore ripassa il badge → Carosello benvenuto multilingua
|
||||
4. **Conferma Ingresso**: Validatore ripassa il badge → Carosello benvenuto multilingua (8s)
|
||||
|
||||
### Gestione RFID
|
||||
|
||||
- **Multi-pattern**: Supporta layout tastiera US (`;?`) e IT (`ò_`)
|
||||
- **Multi-pattern**: Supporta layout tastiera US (`;?`) e IT (`ò_`), con `\n` dopo fine sequenza
|
||||
- **Timeout 2.5s**: Per scansioni accidentali
|
||||
- **ESC annulla**: Scansione in corso
|
||||
- **Enter handling**: Gestito automaticamente
|
||||
- **Stesso badge ignorato**: Se passato più volte di seguito
|
||||
|
||||
### Sicurezza Sessioni
|
||||
|
||||
@@ -125,6 +127,7 @@ VotoFocolari/
|
||||
| Chiamate API | `frontend/src/services/api.ts` |
|
||||
| Endpoint backend | `backend-mock/api/routes.py` |
|
||||
| Dati mock utenti | `backend-mock/data/users_default.json` |
|
||||
| Specifiche API produzione | `backend-mock/API_SPECIFICATION.md` |
|
||||
| Configurazione Vite | `frontend/vite.config.ts` |
|
||||
|
||||
---
|
||||
@@ -142,6 +145,10 @@ VotoFocolari/
|
||||
|
||||
4. **NumLock**: Su desktop, viene mostrato un banner per ricordare di attivare NumLock.
|
||||
|
||||
5. **Badge Duplicati**: Se lo stesso badge viene passato più volte di seguito, viene ignorato (no ricaricamento).
|
||||
|
||||
6. **Success Modal Interrompibile**: Se durante il carosello di benvenuto si passa un nuovo badge, la modal si chiude e viene caricato subito il nuovo utente.
|
||||
|
||||
---
|
||||
|
||||
## TODO (da concordare con committenti)
|
||||
|
||||
@@ -70,7 +70,7 @@ backend-mock/
|
||||
- [x] `POST /login-validate` - verifica solo password validatore
|
||||
- [x] `GET /anagrafica/{badge_code}` - ricerca utente
|
||||
- [x] Pulizia caratteri sentinel dal badge
|
||||
- [x] Confronto con e senza zeri iniziali
|
||||
- [x] **Confronto ESATTO come stringa** (zeri iniziali significativi)
|
||||
- [x] Warning automatico se non ammesso
|
||||
- [x] `POST /entry-request` - registrazione ingresso
|
||||
- [x] Verifica password validatore
|
||||
@@ -173,3 +173,17 @@ curl -X POST http://localhost:8000/entry-request \
|
||||
## ✅ BACKEND COMPLETATO
|
||||
|
||||
Tutti i task sono stati implementati e testati.
|
||||
|
||||
### 📄 Documentazione API
|
||||
Per le specifiche complete da implementare nel backend reale, vedere:
|
||||
**`backend-mock/API_SPECIFICATION.md`**
|
||||
|
||||
Questo documento contiene:
|
||||
- Descrizione completa di tutti gli endpoint
|
||||
- Schema request/response JSON
|
||||
- Codici di errore e gestione
|
||||
- Meccanismo invalidazione sessioni (server_start_time)
|
||||
- Considerazioni di sicurezza
|
||||
- Struttura database suggerita
|
||||
- Casi di test minimi
|
||||
|
||||
|
||||
@@ -71,7 +71,7 @@ Ottimizzata per tablet in orizzontale.
|
||||
- [x] `RFIDStatus.tsx` - indicatore stato scanner
|
||||
- [x] `UserCard.tsx` - card utente con foto e ruolo
|
||||
- [x] `CountdownTimer.tsx` - timer con progress bar
|
||||
- [x] `WelcomeCarousel.tsx` - carosello messaggi multilingua
|
||||
- [x] `WelcomeCarousel.tsx` - carosello messaggi multilingua con **animazione smooth sliding**
|
||||
- [x] `NumLockBanner.tsx` - avviso NumLock per desktop
|
||||
|
||||
### 7. Schermate (`screens/`)
|
||||
@@ -80,10 +80,10 @@ Ottimizzata per tablet in orizzontale.
|
||||
- [x] `ValidatorLoginScreen.tsx` - attesa badge + password + NumLockBanner
|
||||
- [x] `ActiveGateScreen.tsx` - varco attivo:
|
||||
- [x] Card utente (layout largo per tablet)
|
||||
- [x] **Schermata "badge non trovato"** con countdown 30s
|
||||
- [x] **Schermata "badge non trovato"** con countdown barra visiva (30s)
|
||||
- [x] **Notifica badge validatore ignorato**
|
||||
- [x] NumLockBanner
|
||||
- [x] `SuccessModal.tsx` - conferma ingresso con carosello
|
||||
- [x] `SuccessModal.tsx` - conferma ingresso con carosello (**durata aumentata 8s**)
|
||||
- [x] `ErrorModal.tsx` - errore fullscreen
|
||||
- [x] `DebugScreen.tsx` - pagina diagnostica RFID
|
||||
|
||||
@@ -95,10 +95,13 @@ Ottimizzata per tablet in orizzontale.
|
||||
- [x] **Qualsiasi badge può essere validatore** (verificato con password)
|
||||
- [x] Password salvata in sessione per conferme ingresso
|
||||
- [x] **Invalidazione sessione se server riparte** (serverStartTime)
|
||||
- [x] **Polling periodico (30s) per verificare server restart**
|
||||
- [x] Timeout sessione 30 minuti
|
||||
- [x] Timeout utente 60 secondi
|
||||
- [x] **Timeout badge non trovato 30 secondi**
|
||||
- [x] **Ignora stesso badge passato più volte** (no ricaricamento)
|
||||
- [x] Cambio rapido badge partecipante
|
||||
- [x] **Badge durante success modal chiude modal e carica nuovo utente** (fix dipendenze useCallback)
|
||||
- [x] Conferma con badge validatore (quello della sessione)
|
||||
- [x] **Notifica se badge validatore rippassato senza utente**
|
||||
- [x] Logging transizioni con prefisso `[FLOW]`
|
||||
@@ -107,9 +110,10 @@ Ottimizzata per tablet in orizzontale.
|
||||
|
||||
- [x] Componente `WelcomeCarousel.tsx`
|
||||
- [x] 10 lingue supportate
|
||||
- [x] Scorrimento automatico ogni 800ms
|
||||
- [x] **Animazione smooth sliding** (slide up/down)
|
||||
- [x] Scorrimento automatico (intervallo calcolato dinamicamente)
|
||||
- [x] Modale fullscreen verde
|
||||
- [x] Durata totale: 5 secondi
|
||||
- [x] **Durata totale: 8 secondi** (più rilassato)
|
||||
|
||||
### 10. Debug & Diagnostica
|
||||
|
||||
@@ -135,4 +139,46 @@ Ottimizzata per tablet in orizzontale.
|
||||
|
||||
---
|
||||
|
||||
## 🧪 TODO: Test Automatici
|
||||
|
||||
### Test da Implementare
|
||||
|
||||
- [ ] **Test RFID Scanner:**
|
||||
- [ ] Rilevamento pattern US (`;` → `?`)
|
||||
- [ ] Rilevamento pattern IT (`ò` → `_`)
|
||||
- [ ] Timeout scansione incompleta
|
||||
- [ ] ESC annulla scansione
|
||||
- [ ] Enter post-completamento ignorato
|
||||
|
||||
- [ ] **Test Flow Validatore:**
|
||||
- [ ] Login con password corretta
|
||||
- [ ] Login con password errata
|
||||
- [ ] Sessione persistente in localStorage
|
||||
- [ ] Invalidazione sessione al riavvio server
|
||||
- [ ] Logout manuale
|
||||
|
||||
- [ ] **Test Flow Partecipante:**
|
||||
- [ ] Badge trovato ammesso → mostra card verde
|
||||
- [ ] Badge trovato non ammesso → mostra card rossa + warning
|
||||
- [ ] Badge non trovato → mostra schermata errore con countdown
|
||||
- [ ] Stesso badge passato più volte → ignorato
|
||||
- [ ] Badge diverso passato → cambia utente visualizzato
|
||||
- [ ] Timeout 60s → torna in attesa
|
||||
|
||||
- [ ] **Test Conferma Ingresso:**
|
||||
- [ ] Badge validatore su utente ammesso → success modal
|
||||
- [ ] Badge validatore su utente NON ammesso → notifica ignorato
|
||||
- [ ] Badge validatore senza utente → notifica ignorato
|
||||
- [ ] **⚠️ IMPORTANTE:** Simulare bug che bypassa frontend → backend DEVE bloccare
|
||||
|
||||
- [ ] **Test Success Modal:**
|
||||
- [ ] Carosello scorre tutte le lingue
|
||||
- [ ] Durata corretta (8s)
|
||||
- [ ] Badge durante modal → chiude modal e carica nuovo utente
|
||||
|
||||
---
|
||||
|
||||
## ✅ FRONTEND COMPLETATO
|
||||
|
||||
Tutte le funzionalità principali sono state implementate. Rimangono da sviluppare i test automatici.
|
||||
|
||||
|
||||
Reference in New Issue
Block a user