fixing bugs with item notification radius

This commit is contained in:
jackiettran
2025-11-20 15:01:15 -05:00
parent 413ac6b6e2
commit 83872fe039
11 changed files with 842 additions and 680 deletions

View File

@@ -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,