Applicazione mobile per la prenotazione e organizzazione di partite nei campi sportivi del territorio.
- Frontend Mobile: React Native + TypeScript + Expo
- Backend: Node.js + TypeScript + Express + Prisma
- Database: PostgreSQL
- Cache & Locking: Redis
- Autenticazione: JWT + bcrypt
- Node.js >= 20.x
- npm >= 10.x
- Docker + Docker Compose (per PostgreSQL e Redis)
# Backend
cd backend
npm install
# Mobile
cd ../mobile
npm install# Backend
cp backend/.env.example backend/.env
# Mobile
cp mobile/.env.example mobile/.envEdita i file .env con i tuoi dati (DB_URL, API_URL, etc.)
docker-compose up -dQuesto avvia PostgreSQL e Redis.
cd backend
npx prisma migrate dev --name initcd backend
npm run devIl server sarà disponibile su http://localhost:3000.
cd mobile
npm startScansiona il codice QR con Expo Go (Android/iOS) oppure premi i per iOS Simulator o a per Android Emulator.
fields/
├── backend/ # Server Node.js + Express
│ ├── src/
│ │ ├── index.ts # Entry point
│ │ ├── app.ts # Express app
│ │ ├── routes/ # Endpoint routes
│ │ ├── controllers/ # Business logic
│ │ ├── services/ # Services (DB, external APIs)
│ │ ├── utils/ # Helper functions
│ │ └── middleware/ # Auth, validation, error handling
│ ├── prisma/
│ │ └── schema.prisma # Prisma ORM schema
│ ├── package.json
│ ├── tsconfig.json
│ ├── .env.example
│ └── .gitignore
├── mobile/ # React Native + Expo app
│ ├── src/
│ │ ├── screens/ # App screens
│ │ ├── components/ # Reusable components
│ │ ├── hooks/ # Custom hooks (useAuth, useBookings, etc.)
│ │ ├── services/ # API client, utils
│ │ └── types/ # TypeScript types
│ ├── app.json # Expo configuration
│ ├── package.json
│ ├── tsconfig.json
│ ├── .env.example
│ └── .gitignore
├── docker-compose.yml # PostgreSQL + Redis
└── README.md
- Registrazione e Login (account obbligatorio per prenotazioni)
- Prenotazione Campi (con lock concorrente)
- Creazione Party (pubblici o privati)
- Inviti e Gestione Squadra (join come guest o account)
- Sistema di Punti e Badge (gamification)
- Notifiche Push (conferme, promemoria, cambi)
- Calendario e Cronologia (prenotazioni passate/future)
- Dashboard di Gestione (disponibilità, prezzi, campi)
- Analytics (prenotazioni, utenti attivi, revenue)
- Segnalazioni e Moderazione (ban, regole)
POST /auth/register- RegistrazionePOST /auth/login- LoginPOST /auth/refresh- Refresh tokenPOST /auth/logout- Logout
GET /fields- Lista campiGET /fields/:id- Dettagli campoPOST /fields- Crea campo (admin)
GET /bookings- I miei bookingPOST /bookings- Crea prenotazioneDELETE /bookings/:id- Cancella prenotazioneGET /fields/:id/availability- Disponibilità oraria
GET /parties- Liste party pubbliciPOST /parties- Crea partyPOST /parties/:id/join- Unisciti a partyDELETE /parties/:id/members/:userId- Rimuovi membro
GET /users/:id/points- Punti utenteGET /users/:id/badges- Badge utenteGET /leaderboard- Top 10 giocatori
users- Utenti registrati (email, phone, password_hash, points)fields- Campi sportivi (nome, sport, capacità, orari)bookings- Prenotazioni (field_id, start, end, owner_id, status)parties- Party (owner_id, field_id, is_public, max_players)party_members- Membri party (party_id, user_id|guest, display_name)badges- Badge disponibili (id, name, criteria)user_badges- Badge assegnati a utentipoints_log- Log transazioni punti (user_id, points, reason)
- Prenotazione Obbligatoria: Solo account registrato può creare booking.
- No Overlap: Constraint DB impedisce prenotazioni sovrapposte stesso campo.
- Party & Squadra: Owner prenotazione + membri party = squadra completa.
- Guest in Party: Ospiti possono unirsi a party con nome/telefono (no account).
- Gamification: Punti per prenotazioni completate, badge per traguardi.
- Cancellazione: Penalty punti se cancellato < 24h prima.
cd backend
npm run dev # usa nodemon per auto-restartcd mobile
expo start
# Premi 'i' (iOS), 'a' (Android), 'w' (web)cd backend
npm run test
cd ../mobile
npm run test- Usa container Docker (
docker build -t fields-api .) - Deploy su Heroku, Railway, Render, AWS ECS, etc.
- Variabili d'ambiente salvate nel platform (DATABASE_URL, JWT_SECRET, etc.)
- Expo:
expo buildper APK/IPA - Oppure gestisci locally con Xcode (iOS) e Android Studio
- Managed PostgreSQL (AWS RDS, Azure DB, Railway, Neon)
- Run migrations su production:
prisma migrate deploy
"Cannot find module 'typescript'"
npm install --save-dev typescriptDocker Compose non avvia Postgres
docker-compose logs postgres
docker-compose down --volumes # reset
docker-compose up -dPrisma schema non sincronizza
cd backend
npx prisma migrate dev --name init