From 21c413a9ccecc12d016a8947c02586f2a5397647 Mon Sep 17 00:00:00 2001 From: ga Date: Fri, 21 Aug 2026 11:50:49 +0000 Subject: [PATCH] Fix: search/nearby 500 (pgx numeric vs float8) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit pgx по умолчанию передаёт float64 как numeric. В запросе BETWEEN $1 - $6 AND $1 + $6 numeric-numeric сравнивалось с double precision lat/lng и возвращало ошибку. Фикс: ::float8 касты на все параметры запроса. Проверено: /search/nearby → 200 с count=2 для юзеров в 600м. --- internal/locations/repo.go | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/internal/locations/repo.go b/internal/locations/repo.go index e65893a..2c9313d 100644 --- a/internal/locations/repo.go +++ b/internal/locations/repo.go @@ -110,21 +110,21 @@ func (r *Repo) Nearby(ctx context.Context, myID uuid.UUID, lat, lng, radiusKm fl AND u.id != $3 AND ul.lat IS NOT NULL AND ul.lng IS NOT NULL AND ul.updated_at > NOW() - INTERVAL '1 hour' - AND ul.lat BETWEEN $1 - $6 AND $1 + $6 - AND ul.lng BETWEEN $2 - $7 AND $2 + $7 + AND ul.lat BETWEEN ($1::float8 - $6::float8) AND ($1::float8 + $6::float8) + AND ul.lng BETWEEN ($2::float8 - $7::float8) AND ($2::float8 + $7::float8) ) SELECT id, name, photo_url, lat, lng, 2 * 6371 * asin(sqrt( - sin(radians((lat - $1) / 2))^2 + - cos(radians($1)) * cos(radians(lat)) * - sin(radians((lng - $2) / 2))^2 + sin(radians((lat - $1::float8) / 2))^2 + + cos(radians($1::float8)) * cos(radians(lat)) * + sin(radians((lng - $2::float8) / 2))^2 )) * 1000 AS dist_m FROM bbox WHERE 2 * 6371 * asin(sqrt( - sin(radians((lat - $1) / 2))^2 + - cos(radians($1)) * cos(radians(lat)) * - sin(radians((lng - $2) / 2))^2 - )) <= $4 + sin(radians((lat - $1::float8) / 2))^2 + + cos(radians($1::float8)) * cos(radians(lat)) * + sin(radians((lng - $2::float8) / 2))^2 + )) <= $4::float8 ORDER BY dist_m LIMIT $5`, lat, lng, myID, radiusKm, limit, latDelta, lngDelta,