This commit is contained in:
payacom
2026-09-03 16:06:02 +03:30
parent 3f416a7a60
commit 90c5f94b57
31 changed files with 3968 additions and 4283 deletions

File diff suppressed because it is too large Load Diff

View File

@@ -6,6 +6,9 @@ const {
} = require('../../../utils/blockVisibility')
const NEARBY_RADIUS_METERS = 5000
const MIN_RADIUS_METERS = 5000
const MAX_RADIUS_METERS = 50000
const RADIUS_STEP_METERS = 5000
function haversineMeters(lat1, lon1, lat2, lon2) {
const toRad = (deg) => (deg * Math.PI) / 180
@@ -22,6 +25,13 @@ function parseCoord(value) {
return Number.isFinite(n) ? n : null
}
function parseRadiusMeters(value) {
const n = parseFloat(value)
if (!Number.isFinite(n)) return NEARBY_RADIUS_METERS
const clamped = Math.min(Math.max(n, MIN_RADIUS_METERS), MAX_RADIUS_METERS)
return Math.round(clamped / RADIUS_STEP_METERS) * RADIUS_STEP_METERS
}
/**
* GET /users/nearby?lat=&lng=
* Requires auth + show_location + valid coords.
@@ -32,6 +42,7 @@ const getNearbyUsers = async (req, res, next) => {
const userId = String(req.user._id)
const lat = parseCoord(req.query.lat)
const lng = parseCoord(req.query.lng)
const radiusMeters = parseRadiusMeters(req.query.radius)
if (lat == null || lng == null) {
return res.status(422).json({
@@ -98,7 +109,7 @@ const getNearbyUsers = async (req, res, next) => {
if (peerLat == null || peerLng == null) continue
const distanceMeters = haversineMeters(lat, lng, peerLat, peerLng)
if (distanceMeters > NEARBY_RADIUS_METERS) continue
if (distanceMeters > radiusMeters) continue
nearby.push({
_id: uid,
@@ -116,7 +127,7 @@ const getNearbyUsers = async (req, res, next) => {
nearby.sort((a, b) => a.distanceMeters - b.distanceMeters)
res.json({
radiusMeters: NEARBY_RADIUS_METERS,
radiusMeters,
users: nearby
})
} catch (error) {
@@ -126,5 +137,8 @@ const getNearbyUsers = async (req, res, next) => {
module.exports = {
getNearbyUsers,
NEARBY_RADIUS_METERS
NEARBY_RADIUS_METERS,
MIN_RADIUS_METERS,
MAX_RADIUS_METERS,
RADIUS_STEP_METERS
}