relynolli-server/handlers/address/endpoints/ep.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)
}