fixing bugs with item notification radius
This commit is contained in:
@@ -20,6 +20,12 @@ class LocationService {
|
||||
throw new Error('Radius must be between 1 and 100 miles');
|
||||
}
|
||||
|
||||
console.log('Finding users in radius:', {
|
||||
centerLatitude: latitude,
|
||||
centerLongitude: longitude,
|
||||
radiusMiles
|
||||
});
|
||||
|
||||
try {
|
||||
// Haversine formula:
|
||||
// distance = 3959 * acos(cos(radians(lat1)) * cos(radians(lat2))
|
||||
@@ -27,26 +33,28 @@ class LocationService {
|
||||
// + sin(radians(lat1)) * sin(radians(lat2)))
|
||||
// Note: 3959 is Earth's radius in miles
|
||||
const query = `
|
||||
SELECT
|
||||
u.id,
|
||||
u.email,
|
||||
u."firstName",
|
||||
u."lastName",
|
||||
ua.latitude,
|
||||
ua.longitude,
|
||||
(3959 * acos(
|
||||
LEAST(1.0,
|
||||
cos(radians(:lat)) * cos(radians(ua.latitude))
|
||||
* cos(radians(ua.longitude) - radians(:lng))
|
||||
+ sin(radians(:lat)) * sin(radians(ua.latitude))
|
||||
)
|
||||
)) AS distance
|
||||
FROM "Users" u
|
||||
INNER JOIN "UserAddresses" ua ON u.id = ua."userId"
|
||||
WHERE ua."isPrimary" = true
|
||||
AND ua.latitude IS NOT NULL
|
||||
AND ua.longitude IS NOT NULL
|
||||
HAVING distance < :radiusMiles
|
||||
SELECT * FROM (
|
||||
SELECT
|
||||
u.id,
|
||||
u.email,
|
||||
u."firstName",
|
||||
u."lastName",
|
||||
ua.latitude,
|
||||
ua.longitude,
|
||||
(3959 * acos(
|
||||
LEAST(1.0,
|
||||
cos(radians(:lat)) * cos(radians(ua.latitude))
|
||||
* cos(radians(ua.longitude) - radians(:lng))
|
||||
+ sin(radians(:lat)) * sin(radians(ua.latitude))
|
||||
)
|
||||
)) AS distance
|
||||
FROM "Users" u
|
||||
INNER JOIN "UserAddresses" ua ON u.id = ua."userId"
|
||||
WHERE ua."isPrimary" = true
|
||||
AND ua.latitude IS NOT NULL
|
||||
AND ua.longitude IS NOT NULL
|
||||
) AS user_distances
|
||||
WHERE distance < :radiusMiles
|
||||
ORDER BY distance ASC
|
||||
`;
|
||||
|
||||
@@ -59,6 +67,13 @@ class LocationService {
|
||||
type: QueryTypes.SELECT
|
||||
});
|
||||
|
||||
console.log('Users found in radius:', users.map(u => ({
|
||||
id: u.id,
|
||||
userLat: u.latitude,
|
||||
userLng: u.longitude,
|
||||
distance: parseFloat(u.distance).toFixed(2)
|
||||
})));
|
||||
|
||||
return users.map(user => ({
|
||||
id: user.id,
|
||||
email: user.email,
|
||||
|
||||
Reference in New Issue
Block a user