feat: Controllo accessi RFID completo con gestione sessioni
- Aggiunto supporto multi-pattern RFID (US/IT layout) - Implementata invalidazione sessioni al restart del server - Schermata "badge non trovato" con countdown 30s - Notifica quando badge validatore passato senza utente - Database aggiornato con badge reali di test - Layout ottimizzato per tablet orizzontale - Banner NumLock per desktop - Toggle visibilità password - Carosello benvenuto multilingua (10 lingue) - Pagina debug RFID (/debug)
This commit is contained in:
258
dev.sh
Executable file
258
dev.sh
Executable file
@@ -0,0 +1,258 @@
|
||||
#!/bin/bash
|
||||
# ============================================
|
||||
# Focolari Voting System - Script di Sviluppo
|
||||
# ============================================
|
||||
#
|
||||
# Utilizzo:
|
||||
# ./dev.sh install - Installa dipendenze frontend e backend
|
||||
# ./dev.sh dev - Avvia frontend (dev) + backend (api-only)
|
||||
# ./dev.sh build - Builda il frontend
|
||||
# ./dev.sh server - Builda frontend (se necessario) e avvia server completo
|
||||
# ./dev.sh backend - Avvia solo il backend (api-only)
|
||||
# ./dev.sh frontend - Avvia solo il frontend in dev mode
|
||||
# ./dev.sh shell - Apre shell pipenv del backend
|
||||
# ./dev.sh clean - Pulisce build e cache
|
||||
# ./dev.sh help - Mostra questo messaggio
|
||||
#
|
||||
|
||||
set -e
|
||||
|
||||
# Directory del progetto
|
||||
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
|
||||
BACKEND_DIR="$SCRIPT_DIR/backend-mock"
|
||||
FRONTEND_DIR="$SCRIPT_DIR/frontend"
|
||||
FRONTEND_DIST="$FRONTEND_DIR/dist"
|
||||
|
||||
# Colori per output
|
||||
RED='\033[0;31m'
|
||||
GREEN='\033[0;32m'
|
||||
YELLOW='\033[1;33m'
|
||||
BLUE='\033[0;34m'
|
||||
NC='\033[0m' # No Color
|
||||
|
||||
# Funzioni di utilità
|
||||
info() {
|
||||
echo -e "${BLUE}ℹ️ $1${NC}"
|
||||
}
|
||||
|
||||
success() {
|
||||
echo -e "${GREEN}✅ $1${NC}"
|
||||
}
|
||||
|
||||
warn() {
|
||||
echo -e "${YELLOW}⚠️ $1${NC}"
|
||||
}
|
||||
|
||||
error() {
|
||||
echo -e "${RED}❌ $1${NC}"
|
||||
exit 1
|
||||
}
|
||||
|
||||
# Verifica prerequisiti
|
||||
check_prereqs() {
|
||||
command -v node >/dev/null 2>&1 || error "Node.js non trovato. Installalo prima."
|
||||
command -v npm >/dev/null 2>&1 || error "npm non trovato. Installalo prima."
|
||||
command -v python3 >/dev/null 2>&1 || error "Python3 non trovato. Installalo prima."
|
||||
command -v pipenv >/dev/null 2>&1 || error "pipenv non trovato. Installa con: pip install pipenv"
|
||||
}
|
||||
|
||||
# Installa dipendenze
|
||||
cmd_install() {
|
||||
info "Installazione dipendenze..."
|
||||
|
||||
check_prereqs
|
||||
|
||||
# Backend
|
||||
info "Installazione dipendenze backend (pipenv)..."
|
||||
cd "$BACKEND_DIR"
|
||||
pipenv install
|
||||
success "Backend installato"
|
||||
|
||||
# Frontend
|
||||
info "Installazione dipendenze frontend (npm)..."
|
||||
cd "$FRONTEND_DIR"
|
||||
npm install
|
||||
success "Frontend installato"
|
||||
|
||||
success "Tutte le dipendenze installate!"
|
||||
}
|
||||
|
||||
# Build frontend
|
||||
cmd_build() {
|
||||
info "Build frontend..."
|
||||
cd "$FRONTEND_DIR"
|
||||
npm run build
|
||||
success "Frontend buildato in $FRONTEND_DIST"
|
||||
}
|
||||
|
||||
# Verifica se serve rebuild
|
||||
needs_rebuild() {
|
||||
# Se dist non esiste, serve build
|
||||
if [ ! -d "$FRONTEND_DIST" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Se dist/index.html non esiste, serve build
|
||||
if [ ! -f "$FRONTEND_DIST/index.html" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Controlla se ci sono file frontend più recenti della build
|
||||
local latest_src=$(find "$FRONTEND_DIR/src" -type f -newer "$FRONTEND_DIST/index.html" 2>/dev/null | head -1)
|
||||
if [ -n "$latest_src" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
# Controlla anche index.html e config
|
||||
if [ "$FRONTEND_DIR/index.html" -nt "$FRONTEND_DIST/index.html" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
if [ "$FRONTEND_DIR/vite.config.ts" -nt "$FRONTEND_DIST/index.html" ]; then
|
||||
return 0
|
||||
fi
|
||||
|
||||
return 1
|
||||
}
|
||||
|
||||
# Server completo (build + backend)
|
||||
cmd_server() {
|
||||
check_prereqs
|
||||
|
||||
# Rebuild se necessario
|
||||
if needs_rebuild; then
|
||||
warn "Rilevati cambiamenti nel frontend, rebuild in corso..."
|
||||
cmd_build
|
||||
else
|
||||
info "Frontend già aggiornato, skip build"
|
||||
fi
|
||||
|
||||
# Avvia backend con frontend
|
||||
info "Avvio server completo..."
|
||||
cd "$BACKEND_DIR"
|
||||
pipenv run python main.py "$@"
|
||||
}
|
||||
|
||||
# Solo backend
|
||||
cmd_backend() {
|
||||
check_prereqs
|
||||
info "Avvio backend (API only)..."
|
||||
cd "$BACKEND_DIR"
|
||||
pipenv run python main.py --api-only "$@"
|
||||
}
|
||||
|
||||
# Solo frontend dev
|
||||
cmd_frontend() {
|
||||
check_prereqs
|
||||
info "Avvio frontend in dev mode..."
|
||||
cd "$FRONTEND_DIR"
|
||||
npm run dev
|
||||
}
|
||||
|
||||
# Dev mode: backend api-only + frontend dev (in parallelo)
|
||||
cmd_dev() {
|
||||
check_prereqs
|
||||
|
||||
info "Avvio ambiente di sviluppo..."
|
||||
info "Backend API: http://localhost:8000"
|
||||
info "Frontend Dev: http://localhost:5173"
|
||||
echo ""
|
||||
|
||||
# Avvia backend in background
|
||||
cd "$BACKEND_DIR"
|
||||
pipenv run python main.py --api-only &
|
||||
BACKEND_PID=$!
|
||||
|
||||
# Trap per cleanup
|
||||
trap "kill $BACKEND_PID 2>/dev/null" EXIT
|
||||
|
||||
# Avvia frontend
|
||||
cd "$FRONTEND_DIR"
|
||||
npm run dev
|
||||
}
|
||||
|
||||
# Shell pipenv
|
||||
cmd_shell() {
|
||||
info "Apertura shell pipenv backend..."
|
||||
cd "$BACKEND_DIR"
|
||||
pipenv shell
|
||||
}
|
||||
|
||||
# Pulizia
|
||||
cmd_clean() {
|
||||
info "Pulizia build e cache..."
|
||||
|
||||
# Frontend
|
||||
rm -rf "$FRONTEND_DIR/node_modules/.vite"
|
||||
rm -rf "$FRONTEND_DIST"
|
||||
|
||||
# Backend
|
||||
find "$BACKEND_DIR" -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
|
||||
find "$BACKEND_DIR" -type f -name "*.pyc" -delete 2>/dev/null || true
|
||||
|
||||
success "Pulizia completata"
|
||||
}
|
||||
|
||||
# Help
|
||||
cmd_help() {
|
||||
echo "============================================"
|
||||
echo "Focolari Voting System - Script di Sviluppo"
|
||||
echo "============================================"
|
||||
echo ""
|
||||
echo "Utilizzo: ./dev.sh <comando> [opzioni]"
|
||||
echo ""
|
||||
echo "Comandi disponibili:"
|
||||
echo " install Installa dipendenze frontend e backend"
|
||||
echo " dev Avvia frontend (dev) + backend (api-only) in parallelo"
|
||||
echo " build Builda il frontend per produzione"
|
||||
echo " server Builda frontend (se cambiato) e avvia server completo"
|
||||
echo " backend Avvia solo il backend (api-only)"
|
||||
echo " frontend Avvia solo il frontend in dev mode"
|
||||
echo " shell Apre shell pipenv del backend"
|
||||
echo " clean Pulisce build e cache"
|
||||
echo " help Mostra questo messaggio"
|
||||
echo ""
|
||||
echo "Esempi:"
|
||||
echo " ./dev.sh install # Setup iniziale"
|
||||
echo " ./dev.sh dev # Sviluppo (hot reload)"
|
||||
echo " ./dev.sh server # Produzione locale"
|
||||
echo " ./dev.sh server -p 9000 # Server su porta 9000"
|
||||
echo " ./dev.sh server -d data/users_test.json # Con dataset test"
|
||||
echo ""
|
||||
}
|
||||
|
||||
# Main
|
||||
case "${1:-help}" in
|
||||
install)
|
||||
cmd_install
|
||||
;;
|
||||
build)
|
||||
cmd_build
|
||||
;;
|
||||
server)
|
||||
shift
|
||||
cmd_server "$@"
|
||||
;;
|
||||
backend)
|
||||
shift
|
||||
cmd_backend "$@"
|
||||
;;
|
||||
frontend)
|
||||
cmd_frontend
|
||||
;;
|
||||
dev)
|
||||
cmd_dev
|
||||
;;
|
||||
shell)
|
||||
cmd_shell
|
||||
;;
|
||||
clean)
|
||||
cmd_clean
|
||||
;;
|
||||
help|--help|-h)
|
||||
cmd_help
|
||||
;;
|
||||
*)
|
||||
error "Comando sconosciuto: $1. Usa './dev.sh help' per la lista comandi."
|
||||
;;
|
||||
esac
|
||||
Reference in New Issue
Block a user