59 lines
1.2 KiB
Go
59 lines
1.2 KiB
Go
|
package endpoints
|
||
|
|
||
|
import (
|
||
|
"fmt"
|
||
|
"github.com/gin-gonic/gin"
|
||
|
"relynolli-server/external/yaGeo"
|
||
|
"relynolli-server/models"
|
||
|
"relynolli-server/status"
|
||
|
"time"
|
||
|
)
|
||
|
|
||
|
type handlers struct{}
|
||
|
|
||
|
type Handlers interface {
|
||
|
SearchAddress(c *gin.Context)
|
||
|
}
|
||
|
|
||
|
func GetHandlers() Handlers {
|
||
|
return &handlers{}
|
||
|
}
|
||
|
|
||
|
type searchAddressParams struct {
|
||
|
SearchString string `form:"q"`
|
||
|
}
|
||
|
|
||
|
func (h *handlers) SearchAddress(c *gin.Context) {
|
||
|
query := new(searchAddressParams)
|
||
|
err := c.ShouldBindQuery(query)
|
||
|
meta := models.Meta{
|
||
|
RequestStarted: time.Now().Unix(),
|
||
|
}
|
||
|
response := models.Response{
|
||
|
Status: status.STATUS_OK,
|
||
|
Meta: &meta,
|
||
|
}
|
||
|
if err != nil {
|
||
|
response.Info = fmt.Sprintf("Error: %s", err.Error())
|
||
|
response.Status = status.STATUS_BAD_REQUEST
|
||
|
meta.RequestFinished = time.Now().Unix()
|
||
|
c.JSON(400, response)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
geo := yaGeo.Init()
|
||
|
results, err := geo.GeoCode(query.SearchString)
|
||
|
|
||
|
if err != nil {
|
||
|
response.Info = fmt.Sprintf("Error: %s", err.Error())
|
||
|
response.Status = status.STATUS_SERVER_ERROR
|
||
|
meta.RequestFinished = time.Now().Unix()
|
||
|
c.JSON(500, response)
|
||
|
return
|
||
|
}
|
||
|
|
||
|
response.Data = results
|
||
|
meta.RequestFinished = time.Now().Unix()
|
||
|
c.JSON(200, response)
|
||
|
}
|