56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
package placesroute
|
|
|
|
import (
|
|
"sync"
|
|
|
|
"bitbucket.org/nemt/nemt-portal-api/application/applicationservice"
|
|
"bitbucket.org/nemt/nemt-portal-api/infra/config"
|
|
"bitbucket.org/nemt/nemt-portal-api/server/router/routeutils"
|
|
"github.com/labstack/echo"
|
|
"golang.org/x/net/context"
|
|
"googlemaps.github.io/maps"
|
|
)
|
|
|
|
var (
|
|
instance *controller
|
|
once sync.Once
|
|
)
|
|
|
|
type controller struct {
|
|
cfg *config.Config
|
|
svc *applicationservice.Service
|
|
maps *maps.Client
|
|
}
|
|
|
|
func controllerInstance(cfg *config.Config, svc *applicationservice.Service) *controller {
|
|
once.Do(func() {
|
|
c, _ := maps.NewClient(maps.WithClientIDAndSignature("gme-bluecrossandblue1", "msqgD-jdqCyR0M_1u5C1HION5iI="))
|
|
instance = &controller{
|
|
cfg: cfg,
|
|
svc: svc,
|
|
maps: c,
|
|
}
|
|
})
|
|
|
|
return instance
|
|
}
|
|
|
|
func (c *controller) handle(ctx echo.Context) error {
|
|
name, err := routeutils.GetAndValidateStringQueryParam(ctx, "name", "name is mandatory")
|
|
if err != nil {
|
|
return err
|
|
}
|
|
|
|
req := maps.PlaceAutocompleteRequest{
|
|
Input: name,
|
|
Language: "en",
|
|
}
|
|
|
|
resp, err := c.maps.PlaceAutocomplete(context.Background(), &req)
|
|
if err != nil {
|
|
return routeutils.HandleAPIError(ctx, err)
|
|
}
|
|
|
|
return routeutils.ResponseAPIOK(ctx, resp)
|
|
}
|