34 lines
862 B
Go
34 lines
862 B
Go
package location
|
|
|
|
import (
|
|
"context"
|
|
|
|
"gitlab.com/pactual1/backend/models"
|
|
"gitlab.com/pactual1/backend/services/location/mapbox_lib"
|
|
)
|
|
|
|
type service struct {
|
|
accessToken string
|
|
}
|
|
|
|
type Service interface {
|
|
SearchPlace(context.Context, string) ([]*models.Place, error)
|
|
}
|
|
|
|
func NewService(accessToken string) Service {
|
|
return service{accessToken: accessToken}
|
|
}
|
|
|
|
func (s service) SearchPlace(ctx context.Context, query string) ([]*models.Place, error) {
|
|
geocoder := mapbox.NewFastHttpGeocoder(mapbox.AccessToken(s.accessToken))
|
|
resp, err := geocoder.ForwardGeocode(ctx, &mapbox.ForwardGeocodeRequest{SearchText: query})
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
var places []*models.Place
|
|
for _, feature := range resp.Features {
|
|
places = append(places, &models.Place{Text: feature.Text, Coordinates: feature.Geometry.Coordinates})
|
|
}
|
|
return places, nil
|
|
}
|