multimodal-routing/handlers/handlers.go

46 lines
1023 B
Go

package handlers
import (
"fmt"
"sync"
"time"
"github.com/paulmach/orb/geojson"
"github.com/spf13/viper"
)
type MultimodalRoutingHandler struct {
Carpool *CarpoolRoutingHandler
}
func NewMultimodalRoutingHandler(cfg *viper.Viper) (*MultimodalRoutingHandler, error) {
carpoolHandler, err := NewCarpoolRoutingHandler(cfg.Sub("carpool"))
if err != nil {
return nil, fmt.Errorf("could not initialize carpool handler : %w", err)
}
return &MultimodalRoutingHandler{
Carpool: carpoolHandler,
}, nil
}
func (h *MultimodalRoutingHandler) Search(departure geojson.Feature, destination geojson.Feature, departureDate time.Time) ([]*geojson.FeatureCollection, error) {
ch := make(chan *geojson.FeatureCollection)
journeys := []*geojson.FeatureCollection{}
var wg sync.WaitGroup
// Carpool
go h.Carpool.Search(ch, departure, destination, departureDate)
wg.Add(1)
go func() {
defer wg.Done()
for journey := range ch {
journeys = append(journeys, journey)
}
}()
wg.Wait()
return journeys, nil
}