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)
5.1 KiB
5.1 KiB
📋 Piano Sviluppo Backend Mock
Obiettivo
Server FastAPI mock per simulare il backend del sistema di controllo accessi. Struttura modulare con separazione tra API, modelli e dati.
Struttura Target
backend-mock/
├── main.py # Entry point con argparse
├── Pipfile # Dipendenze pipenv
├── .gitignore
├── api/
│ ├── __init__.py
│ └── routes.py # Definizione endpoint
├── schemas/
│ ├── __init__.py
│ └── models.py # Modelli Pydantic
└── data/
├── users_default.json # Dataset utenti default (badge reali)
└── users_test.json # Dataset per test
Checklist Sviluppo
1. Setup Progetto
- Creare cartella
backend-mock/ - Creare
Pipfileper pipenv - Configurare
.gitignoreper Python - Creare struttura cartelle (
api/,schemas/,data/)
2. Modelli Pydantic (schemas/models.py)
LoginRequest- badge + passwordEntryRequest- user_badge + validator_passwordUserResponse- dati utente + warning opzionaleRoomInfoResponse- nome sala + meeting_id + server_start_timeLoginResponse- success + message + tokenEntryResponse- success + message (SENZA welcome_message)- Spostare modelli in file dedicato
3. Dati Mock (data/*.json)
- Password validatore (solo password, badge gestito dal frontend)
- Lista utenti mock con badge reali:
0008988288- Marco Bianchi (Votante, ammesso)0007399575- Laura Rossi (Votante, ammessa)0000514162- Giuseppe Verdi (Tecnico, NON ammesso)0006478281- NON nel DB (per test "non trovato")
- Estrarre dati in file JSON separato
- Creare dataset alternativo per test (
users_test.json) - Caricare dati dinamicamente all'avvio
Nota: I messaggi di benvenuto multilingua sono gestiti dal frontend con carosello.
TODO (da concordare con committenti):
- Valutare se
login-validatedebba ricevere e verificare anche il badge del validatore
4. Routes API (api/routes.py)
GET /info-room- info sala + server_start_time per invalidare sessioniPOST /login-validate- verifica solo password validatoreGET /anagrafica/{badge_code}- ricerca utente- Pulizia caratteri sentinel dal badge
- Confronto ESATTO come stringa (zeri iniziali significativi)
- Warning automatico se non ammesso
POST /entry-request- registrazione ingresso- Verifica password validatore
- Verifica utente ammesso
- Risposta asettica (solo success + message)
- Spostare routes in file dedicato
5. Entry Point (main.py)
- Blocco
if __name__ == "__main__" - Configurazione uvicorn (host, port)
- Messaggi console all'avvio
- Implementare argparse con opzioni:
--port/-p: porta server (default: 8000)--data/-d: path file JSON dati (default:data/users_default.json)--host: host binding (default:0.0.0.0)
- Caricamento dinamico dati da JSON
- Import routes da modulo
api
6. Invalidazione Sessioni
SERVER_START_TIMEgenerato all'avvio del server- Restituito in
/info-roomper permettere al frontend di invalidare sessioni vecchie - Se il server riparte, tutte le sessioni frontend vengono invalidate
Schema File JSON Dati
{
"validator_password": "focolari",
"room": {
"room_name": "Sala Assemblea",
"meeting_id": "VOT-2024"
},
"users": [
{
"badge_code": "0008988288",
"nome": "Marco",
"cognome": "Bianchi",
"url_foto": "https://...",
"ruolo": "Votante",
"ammesso": true
}
]
}
Comandi Esecuzione
Via Script (consigliato)
./dev.sh server # Avvia server con frontend
./dev.sh server -p 9000 # Porta custom
./dev.sh backend # Solo API, no frontend
Manuale
cd backend-mock
pipenv install
pipenv run python main.py
Test Rapidi
# Health check
curl http://localhost:8000/
# Info sala (include server_start_time)
curl http://localhost:8000/info-room
# Ricerca utente reale
curl http://localhost:8000/anagrafica/0008988288
# Badge non trovato
curl http://localhost:8000/anagrafica/0006478281
# Login validatore
curl -X POST http://localhost:8000/login-validate \
-H "Content-Type: application/json" \
-d '{"badge": "qualsiasi", "password": "focolari"}'
# Richiesta ingresso
curl -X POST http://localhost:8000/entry-request \
-H "Content-Type: application/json" \
-d '{"user_badge": "0008988288", "validator_password": "focolari"}'
✅ 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