package api import ( "time" "git.neonxp.ru/neonxp/guessr/pkg/middleware" "github.com/labstack/echo/v4" ) func (h *Handler) PostGuess(c echo.Context) error { req := &postGuessRequest{} if err := c.Bind(req); err != nil { return err } if state := c.Get("state"); state == nil { return echo.ErrNotFound } state := c.Get("state").(*middleware.State) resp, err := h.places.Guess( c.Request().Context(), state.CurrentGUID, req.Lat, req.Lng) if err != nil { return err } addPoints := 1000 - resp.Distance if addPoints > 0 { state.Points += addPoints } state.CurrentGUID = "" state.Image = "" if err := middleware.SetState(c, *state, int(365*24*time.Hour)); err != nil { return err } return c.JSON(200, postGuessResponse{ GUID: resp.GUID, Image: resp.Img, Name: resp.Name, Geojson: resp.Geojson, Distance: resp.Distance, State: state, }) } type postGuessRequest struct { Lat float32 `json:"lat"` Lng float32 `json:"lng"` } type postGuessResponse struct { GUID string `json:"guid"` Image string `json:"image"` Name string `json:"name"` Geojson any `json:"geojson"` Distance int `json:"distance"` State *middleware.State `json:"state"` }