- 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-apinpm install
# oppure
yarn installnpm run build# Modalità sviluppo con hot-reload
npm run dev
# Modalità produzione
npm startIl 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-apiIl 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
Questo progetto è completamente gratuito e open source. Se lo trovi utile e vuoi supportare il suo sviluppo continuo e gli aggiornamenti futuri, considera di fare una donazione. Il tuo supporto aiuta a mantenere vivo il progetto e mi motiva ad aggiungere nuove funzionalità e miglioramenti!
Ogni contributo, non importa quanto piccolo, è molto apprezzato! ❤️
Distribuito sotto licenza MIT. Vedi il file LICENSE per maggiori informazioni.
Giovanni Guarino
📧 Email: giovanni.guarino1999@gmail.com
🔗 GitHub: @ChromuSx
