This commit implements the core routing functionality for the trip planner MVP: 1. API handlers for city autocomplete, station listing, route search, and route GeoJSON 2. Router integration with Yandex Schedules API for building routing graphs 3. Pareto-optimal route search with max 1 transfer and MCT filtering 4. Cron job for station status detection and closure monitoring 5. Circuit breaker and rate limiter integration in Yandex client 6. Redis cache-aside layer for city directories and station lists Co-Authored-By: Claude <noreply@anthropic.com>
62 lines
1.3 KiB
Go
62 lines
1.3 KiB
Go
package main
|
|
|
|
import (
|
|
"context"
|
|
"log"
|
|
"time"
|
|
|
|
"trip-planner/internal/cache"
|
|
"trip-planner/internal/yandex"
|
|
)
|
|
|
|
// stationStatusKey returns the Redis key for station status.
|
|
func stationStatusKey(id string) *cache.CacheKey {
|
|
return &cache.CacheKey{
|
|
Kind: "station",
|
|
Code: id,
|
|
}
|
|
}
|
|
|
|
func main() {
|
|
ctx := context.Background()
|
|
|
|
// Initialize Redis cache
|
|
redisClient := cache.NewRedisCache(&cache.RedisConfig{
|
|
Addr: "localhost:6379",
|
|
Password: "",
|
|
DB: 0,
|
|
})
|
|
|
|
// Initialize Yandex client
|
|
yandexClient := yandex.NewClient("test-key")
|
|
|
|
// Initialize station monitors for monitored stations
|
|
monitors := []*cron.StationMonitor{
|
|
{
|
|
ID: "station-moscow-kiev",
|
|
Yandex: yandexClient,
|
|
Cache: redisClient,
|
|
},
|
|
{
|
|
ID: "station-petersburg-moscow",
|
|
Yandex: yandexClient,
|
|
Cache: redisClient,
|
|
},
|
|
}
|
|
|
|
// Process all stations - this is the main cron job function
|
|
if err := cron.ProcessAllStations(ctx, monitors); err != nil {
|
|
log.Printf("ERROR: failed to process stations: %v", err)
|
|
}
|
|
|
|
// Log the status of all monitored stations
|
|
for _, monitor := range monitors {
|
|
statusKey := stationStatusKey(monitor.ID)
|
|
statusData, err := monitor.Cache.Get(ctx, statusKey)
|
|
if err == nil && statusData != nil {
|
|
log.Printf("INFO: station %s status: %s", monitor.ID, string(statusData))
|
|
}
|
|
}
|
|
|
|
log.Println("Cron job completed")
|
|
} |