- Descrizione
- Caratteristiche
- Architettura
- Prerequisiti
- Installazione
- Configurazione
- API Endpoints
- Esempi
- Testing
- Deployment
- Contribuire
- Licenza
Cotral Server API è un servizio backend TypeScript che funge da layer intermedio per le API ufficiali di Cotral (http://travel.mob.cotralspa.it:7777/beApp
). Il servizio trasforma le risposte XML native in JSON strutturato e aggiunge funzionalità come la gestione delle fermate preferite tramite database SQLite.
- Ricerca fermate per località
- Ricerca paline per codice fermata, posizione GPS o percorso
- Monitoraggio transiti in tempo reale
- Tracking veicoli con posizioni GPS
- Gestione preferiti con persistenza su database SQLite
- Trasformazione XML→JSON automatica
- API RESTful con risposte JSON standardizzate
- Documentazione OpenAPI completa
- Ricerca paline nel raggio GPS personalizzabile
- Ricerca percorsi tra località di partenza e destinazione
- Sistema di fermate preferite multi-utente
- Informazioni dettagliate sui veicoli in servizio
- Calcolo ritardi e tempi di attesa
cotral-server-api/
├── src/
│ ├── controllers/ # Controller per gestione richieste
│ ├── services/ # Logica di business e integrazione API Cotral
│ ├── routes/ # Definizione delle route Fastify
│ ├── interfaces/ # TypeScript interfaces
│ ├── utils/ # Funzioni di utilità
│ ├── database.ts # Gestione connessione SQLite
│ └── app.ts # Entry point dell'applicazione
├── database.sqlite # Database SQLite (generato automaticamente)
├── OpenAPI.yaml # Documentazione API Swagger/OpenAPI
├── package.json # Dipendenze e script
└── README.md # Questo file
Tecnologia | Utilizzo |
---|---|
TypeScript | Linguaggio principale per type safety |
Fastify | Framework web ad alte prestazioni |
Axios | Client HTTP per chiamate API esterne |
SQLite3 | Database embedded per dati persistenti |
XML2JS | Parser XML to JSON |
- Node.js >= 14.x
- npm >= 6.x o yarn >= 1.x
- Git per clonare il repository
git clone https://github.com/ChromuSx/cotral-server-api.git
cd cotral-server-api
npm install
# oppure
yarn install
npm run build
# Modalità sviluppo con hot-reload
npm run dev
# Modalità produzione
npm start
Il server sarà disponibile su http://localhost:3000
Crea un file .env
nella root del progetto (opzionale):
# Server
PORT=3000
HOST=127.0.0.1
# Database
DB_PATH=./database.sqlite
# API Cotral (opzionale, usa i default se non specificato)
COTRAL_BASE_URL=http://travel.mob.cotralspa.it:7777/beApp
COTRAL_USER_ID=1BB73DCDAFA007572FC51E7407AB497C
Metodo | Endpoint | Descrizione |
---|---|---|
GET | /stops/{locality} |
Ottiene tutte le fermate di una località |
GET | /stops/firststop/{locality} |
Ottiene la prima fermata di una località |
Metodo | Endpoint | Descrizione |
---|---|---|
GET | /poles/{stopCode} |
Ottiene paline per codice fermata |
GET | /poles/position |
Ottiene paline vicine a coordinate GPS |
GET | /poles/{arrivalLocality}/{destinationLocality} |
Paline per percorso |
GET | /poles/destinations/{arrivalLocality} |
Destinazioni disponibili |
GET | /poles/favorites/{userId} |
Paline preferite dell'utente |
POST | /poles/favorites |
Aggiunge palina ai preferiti |
DELETE | /poles/favorites |
Rimuove palina dai preferiti |
Metodo | Endpoint | Descrizione |
---|---|---|
GET | /transits/{poleCode} |
Ottiene transiti per codice palina |
Metodo | Endpoint | Descrizione |
---|---|---|
GET | /vehiclerealtimepositions/{vehicleCode} |
Posizione GPS in tempo reale |
curl -X GET "http://localhost:3000/stops/Roma"
Risposta:
[
{
"codiceStop": "70101",
"nomeStop": "ROMA - ANAGNINA",
"localita": "ROMA",
"coordX": 41.839722,
"coordY": 12.601944
}
]
curl -X GET "http://localhost:3000/poles/position?latitude=41.8397&longitude=12.6019&range=0.01"
curl -X GET "http://localhost:3000/transits/70101A"
Risposta:
{
"pole": {
"codicePalina": "70101A",
"nomePalina": "ANAGNINA - Capolinea",
"localita": "ROMA",
"coordX": 41.839722,
"coordY": 12.601944
},
"transits": [
{
"idCorsa": "123456",
"percorso": "ROMA - FRASCATI",
"orarioPartenzaCorsa": "2024-01-15T14:30:00",
"tempoTransito": "2024-01-15T14:35:00",
"ritardo": "00:02:00",
"automezzo": {
"codice": "BUS001",
"isAlive": true
}
}
]
}
curl -X POST "http://localhost:3000/poles/favorites" \
-H "Content-Type: application/json" \
-d '{
"userId": 1,
"poleCode": "70101A",
"stopCode": 70101
}'
# Test endpoint base
curl http://localhost:3000/
# Test con parametri query
curl "http://localhost:3000/poles/70101?userId=1"
Importa il file OpenAPI.yaml
in Postman per avere una collezione completa di tutti gli endpoint con esempi di richieste e risposte.
# Esegui i test (se configurati)
npm test
- Fork questo repository
- Crea un nuovo Web Service su Render
- Connetti il tuo repository GitHub
- Configura:
- Build Command:
npm install
- Start Command:
npm start
- Build Command:
- Deploy
FROM node:16-alpine
WORKDIR /app
COPY package*.json ./
RUN npm ci --only=production
COPY . .
EXPOSE 3000
CMD ["npm", "start"]
Build e run:
docker build -t cotral-api .
docker run -p 3000:3000 cotral-api
Il progetto è compatibile con:
- Heroku
- Railway
- Fly.io
- DigitalOcean App Platform
- AWS Elastic Beanstalk
Contribuzioni, issues e feature requests sono benvenute.
- Fork il progetto
- Crea il tuo feature branch (
git checkout -b feature/NuovaFunzionalita
) - Commit delle modifiche (
git commit -m 'Aggiunta nuova funzionalità'
) - Push al branch (
git push origin feature/NuovaFunzionalita
) - Apri una Pull Request
- Mantieni il codice TypeScript type-safe
- Aggiungi test per nuove funzionalità
- Aggiorna la documentazione OpenAPI quando aggiungi nuovi endpoint
- Segui le convenzioni di naming esistenti
- Commenta il codice solo dove necessario per chiarire logiche complesse
Distribuito sotto licenza MIT. Vedi il file LICENSE per maggiori informazioni.
Giovanni Guarino
📧 Email: giovanni.guarino1999@gmail.com
🔗 GitHub: @ChromuSx
- Cotral S.p.A. per le API pubbliche
- Community Fastify per l'eccellente framework
- Contributors del progetto