@blackcode_sa/metaestetics-api 1.15.6 → 1.15.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/index.js CHANGED
@@ -13924,25 +13924,52 @@ var PractitionerService = class extends BaseService {
13924
13924
  constraints.push((0, import_firestore36.where)("fullNameLower", ">=", searchTerm));
13925
13925
  constraints.push((0, import_firestore36.where)("fullNameLower", "<=", searchTerm + "\uF8FF"));
13926
13926
  constraints.push((0, import_firestore36.orderBy)("fullNameLower"));
13927
- if (filters.lastDoc) {
13928
- if (typeof filters.lastDoc.data === "function") {
13929
- constraints.push((0, import_firestore36.startAfter)(filters.lastDoc));
13930
- } else if (Array.isArray(filters.lastDoc)) {
13931
- constraints.push((0, import_firestore36.startAfter)(...filters.lastDoc));
13932
- } else {
13933
- constraints.push((0, import_firestore36.startAfter)(filters.lastDoc));
13927
+ if (filters.location && filters.radiusInKm) {
13928
+ if (filters.lastDoc) {
13929
+ if (typeof filters.lastDoc.data === "function") {
13930
+ constraints.push((0, import_firestore36.startAfter)(filters.lastDoc));
13931
+ } else if (Array.isArray(filters.lastDoc)) {
13932
+ constraints.push((0, import_firestore36.startAfter)(...filters.lastDoc));
13933
+ } else {
13934
+ constraints.push((0, import_firestore36.startAfter)(filters.lastDoc));
13935
+ }
13936
+ }
13937
+ constraints.push((0, import_firestore36.limit)((filters.pagination || 10) * 2));
13938
+ } else {
13939
+ if (filters.lastDoc) {
13940
+ if (typeof filters.lastDoc.data === "function") {
13941
+ constraints.push((0, import_firestore36.startAfter)(filters.lastDoc));
13942
+ } else if (Array.isArray(filters.lastDoc)) {
13943
+ constraints.push((0, import_firestore36.startAfter)(...filters.lastDoc));
13944
+ } else {
13945
+ constraints.push((0, import_firestore36.startAfter)(filters.lastDoc));
13946
+ }
13934
13947
  }
13948
+ constraints.push((0, import_firestore36.limit)(filters.pagination || 10));
13935
13949
  }
13936
- constraints.push((0, import_firestore36.limit)(filters.pagination || 10));
13937
13950
  const q = (0, import_firestore36.query)(
13938
13951
  (0, import_firestore36.collection)(this.db, PRACTITIONERS_COLLECTION),
13939
13952
  ...constraints
13940
13953
  );
13941
13954
  const querySnapshot = await (0, import_firestore36.getDocs)(q);
13942
- const practitioners = querySnapshot.docs.map(
13955
+ let practitioners = querySnapshot.docs.map(
13943
13956
  (doc51) => ({ ...doc51.data(), id: doc51.id })
13944
13957
  );
13945
13958
  const lastDoc = querySnapshot.docs.length > 0 ? querySnapshot.docs[querySnapshot.docs.length - 1] : null;
13959
+ if (filters.location && filters.radiusInKm && filters.radiusInKm > 0) {
13960
+ const location = filters.location;
13961
+ const radiusInKm = filters.radiusInKm;
13962
+ practitioners = practitioners.filter((practitioner) => {
13963
+ const clinics = practitioner.clinicsInfo || [];
13964
+ return clinics.some((clinic) => {
13965
+ const distanceInKm = (0, import_geofire_common2.distanceBetween)(
13966
+ [location.latitude, location.longitude],
13967
+ [clinic.location.latitude, clinic.location.longitude]
13968
+ );
13969
+ return distanceInKm <= radiusInKm;
13970
+ });
13971
+ });
13972
+ }
13946
13973
  console.log(
13947
13974
  `[PRACTITIONER_SERVICE] Strategy 1 success: ${practitioners.length} practitioners`
13948
13975
  );
@@ -14012,11 +14039,10 @@ var PractitionerService = class extends BaseService {
14012
14039
  practitioners = practitioners.filter((practitioner) => {
14013
14040
  const clinics = practitioner.clinicsInfo || [];
14014
14041
  return clinics.some((clinic) => {
14015
- const distance = (0, import_geofire_common2.distanceBetween)(
14042
+ const distanceInKm = (0, import_geofire_common2.distanceBetween)(
14016
14043
  [location.latitude, location.longitude],
14017
14044
  [clinic.location.latitude, clinic.location.longitude]
14018
14045
  );
14019
- const distanceInKm = distance / 1e3;
14020
14046
  return distanceInKm <= radiusInKm;
14021
14047
  });
14022
14048
  });
@@ -14215,11 +14241,10 @@ var PractitionerService = class extends BaseService {
14215
14241
  filteredPractitioners = filteredPractitioners.filter((practitioner) => {
14216
14242
  const clinics = practitioner.clinicsInfo || [];
14217
14243
  return clinics.some((clinic) => {
14218
- const distance = (0, import_geofire_common2.distanceBetween)(
14244
+ const distanceInKm = (0, import_geofire_common2.distanceBetween)(
14219
14245
  [location.latitude, location.longitude],
14220
14246
  [clinic.location.latitude, clinic.location.longitude]
14221
14247
  );
14222
- const distanceInKm = distance / 1e3;
14223
14248
  return distanceInKm <= radiusInKm;
14224
14249
  });
14225
14250
  });
@@ -15965,7 +15990,7 @@ async function getAllClinicsInRange(db, center, rangeInKm, pagination, lastDoc,
15965
15990
  [center.latitude, center.longitude],
15966
15991
  [clinic.location.latitude, clinic.location.longitude]
15967
15992
  );
15968
- const distanceInKm = distance / 1e3;
15993
+ const distanceInKm = distance;
15969
15994
  if (distanceInKm <= rangeInKm) {
15970
15995
  const filteredClinic = filterClinicEmbeddedArrays(clinic, excludeDraftPractitioners);
15971
15996
  matchingClinics.push({
@@ -16084,7 +16109,7 @@ async function findClinicsInRadius(db, center, radiusInKm, filters) {
16084
16109
  [center.latitude, center.longitude],
16085
16110
  [clinic.location.latitude, clinic.location.longitude]
16086
16111
  );
16087
- const distanceInKm = distance / 1e3;
16112
+ const distanceInKm = distance;
16088
16113
  if (distanceInKm <= radiusInKm) {
16089
16114
  matchingDocs.push(clinic);
16090
16115
  }
@@ -16406,7 +16431,7 @@ function applyInMemoryFilters(clinics, filters) {
16406
16431
  const distance = (0, import_geofire_common6.distanceBetween)(
16407
16432
  [filters.center.latitude, filters.center.longitude],
16408
16433
  [clinic.location.latitude, clinic.location.longitude]
16409
- ) / 1e3;
16434
+ );
16410
16435
  console.log(
16411
16436
  `[CLINIC_SERVICE] Clinic ${clinic.name}: distance ${distance.toFixed(2)}km (limit: ${filters.radiusInKm}km)`
16412
16437
  );
@@ -24119,7 +24144,7 @@ var ProcedureService = class extends BaseService {
24119
24144
  const distance = (0, import_geofire_common8.distanceBetween)(
24120
24145
  [location.latitude, location.longitude],
24121
24146
  [clinicLocation.latitude, clinicLocation.longitude]
24122
- ) / 1e3;
24147
+ );
24123
24148
  procedure.distance = distance;
24124
24149
  return distance <= radiusInKm;
24125
24150
  });
package/dist/index.mjs CHANGED
@@ -13945,25 +13945,52 @@ var PractitionerService = class extends BaseService {
13945
13945
  constraints.push(where13("fullNameLower", ">=", searchTerm));
13946
13946
  constraints.push(where13("fullNameLower", "<=", searchTerm + "\uF8FF"));
13947
13947
  constraints.push(orderBy4("fullNameLower"));
13948
- if (filters.lastDoc) {
13949
- if (typeof filters.lastDoc.data === "function") {
13950
- constraints.push(startAfter6(filters.lastDoc));
13951
- } else if (Array.isArray(filters.lastDoc)) {
13952
- constraints.push(startAfter6(...filters.lastDoc));
13953
- } else {
13954
- constraints.push(startAfter6(filters.lastDoc));
13948
+ if (filters.location && filters.radiusInKm) {
13949
+ if (filters.lastDoc) {
13950
+ if (typeof filters.lastDoc.data === "function") {
13951
+ constraints.push(startAfter6(filters.lastDoc));
13952
+ } else if (Array.isArray(filters.lastDoc)) {
13953
+ constraints.push(startAfter6(...filters.lastDoc));
13954
+ } else {
13955
+ constraints.push(startAfter6(filters.lastDoc));
13956
+ }
13957
+ }
13958
+ constraints.push(limit7((filters.pagination || 10) * 2));
13959
+ } else {
13960
+ if (filters.lastDoc) {
13961
+ if (typeof filters.lastDoc.data === "function") {
13962
+ constraints.push(startAfter6(filters.lastDoc));
13963
+ } else if (Array.isArray(filters.lastDoc)) {
13964
+ constraints.push(startAfter6(...filters.lastDoc));
13965
+ } else {
13966
+ constraints.push(startAfter6(filters.lastDoc));
13967
+ }
13955
13968
  }
13969
+ constraints.push(limit7(filters.pagination || 10));
13956
13970
  }
13957
- constraints.push(limit7(filters.pagination || 10));
13958
13971
  const q = query13(
13959
13972
  collection13(this.db, PRACTITIONERS_COLLECTION),
13960
13973
  ...constraints
13961
13974
  );
13962
13975
  const querySnapshot = await getDocs13(q);
13963
- const practitioners = querySnapshot.docs.map(
13976
+ let practitioners = querySnapshot.docs.map(
13964
13977
  (doc51) => ({ ...doc51.data(), id: doc51.id })
13965
13978
  );
13966
13979
  const lastDoc = querySnapshot.docs.length > 0 ? querySnapshot.docs[querySnapshot.docs.length - 1] : null;
13980
+ if (filters.location && filters.radiusInKm && filters.radiusInKm > 0) {
13981
+ const location = filters.location;
13982
+ const radiusInKm = filters.radiusInKm;
13983
+ practitioners = practitioners.filter((practitioner) => {
13984
+ const clinics = practitioner.clinicsInfo || [];
13985
+ return clinics.some((clinic) => {
13986
+ const distanceInKm = distanceBetween(
13987
+ [location.latitude, location.longitude],
13988
+ [clinic.location.latitude, clinic.location.longitude]
13989
+ );
13990
+ return distanceInKm <= radiusInKm;
13991
+ });
13992
+ });
13993
+ }
13967
13994
  console.log(
13968
13995
  `[PRACTITIONER_SERVICE] Strategy 1 success: ${practitioners.length} practitioners`
13969
13996
  );
@@ -14033,11 +14060,10 @@ var PractitionerService = class extends BaseService {
14033
14060
  practitioners = practitioners.filter((practitioner) => {
14034
14061
  const clinics = practitioner.clinicsInfo || [];
14035
14062
  return clinics.some((clinic) => {
14036
- const distance = distanceBetween(
14063
+ const distanceInKm = distanceBetween(
14037
14064
  [location.latitude, location.longitude],
14038
14065
  [clinic.location.latitude, clinic.location.longitude]
14039
14066
  );
14040
- const distanceInKm = distance / 1e3;
14041
14067
  return distanceInKm <= radiusInKm;
14042
14068
  });
14043
14069
  });
@@ -14236,11 +14262,10 @@ var PractitionerService = class extends BaseService {
14236
14262
  filteredPractitioners = filteredPractitioners.filter((practitioner) => {
14237
14263
  const clinics = practitioner.clinicsInfo || [];
14238
14264
  return clinics.some((clinic) => {
14239
- const distance = distanceBetween(
14265
+ const distanceInKm = distanceBetween(
14240
14266
  [location.latitude, location.longitude],
14241
14267
  [clinic.location.latitude, clinic.location.longitude]
14242
14268
  );
14243
- const distanceInKm = distance / 1e3;
14244
14269
  return distanceInKm <= radiusInKm;
14245
14270
  });
14246
14271
  });
@@ -16037,7 +16062,7 @@ async function getAllClinicsInRange(db, center, rangeInKm, pagination, lastDoc,
16037
16062
  [center.latitude, center.longitude],
16038
16063
  [clinic.location.latitude, clinic.location.longitude]
16039
16064
  );
16040
- const distanceInKm = distance / 1e3;
16065
+ const distanceInKm = distance;
16041
16066
  if (distanceInKm <= rangeInKm) {
16042
16067
  const filteredClinic = filterClinicEmbeddedArrays(clinic, excludeDraftPractitioners);
16043
16068
  matchingClinics.push({
@@ -16161,7 +16186,7 @@ async function findClinicsInRadius(db, center, radiusInKm, filters) {
16161
16186
  [center.latitude, center.longitude],
16162
16187
  [clinic.location.latitude, clinic.location.longitude]
16163
16188
  );
16164
- const distanceInKm = distance / 1e3;
16189
+ const distanceInKm = distance;
16165
16190
  if (distanceInKm <= radiusInKm) {
16166
16191
  matchingDocs.push(clinic);
16167
16192
  }
@@ -16491,7 +16516,7 @@ function applyInMemoryFilters(clinics, filters) {
16491
16516
  const distance = distanceBetween4(
16492
16517
  [filters.center.latitude, filters.center.longitude],
16493
16518
  [clinic.location.latitude, clinic.location.longitude]
16494
- ) / 1e3;
16519
+ );
16495
16520
  console.log(
16496
16521
  `[CLINIC_SERVICE] Clinic ${clinic.name}: distance ${distance.toFixed(2)}km (limit: ${filters.radiusInKm}km)`
16497
16522
  );
@@ -24354,7 +24379,7 @@ var ProcedureService = class extends BaseService {
24354
24379
  const distance = distanceBetween6(
24355
24380
  [location.latitude, location.longitude],
24356
24381
  [clinicLocation.latitude, clinicLocation.longitude]
24357
- ) / 1e3;
24382
+ );
24358
24383
  procedure.distance = distance;
24359
24384
  return distance <= radiusInKm;
24360
24385
  });
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@blackcode_sa/metaestetics-api",
3
3
  "private": false,
4
- "version": "1.15.6",
4
+ "version": "1.15.7",
5
5
  "description": "Firebase authentication service with anonymous upgrade support",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.mjs",
@@ -977,8 +977,7 @@ export async function getAllClinicsInRange(
977
977
  [clinic.location.latitude, clinic.location.longitude]
978
978
  );
979
979
 
980
- // Convert to kilometers
981
- const distanceInKm = distance / 1000;
980
+ const distanceInKm = distance; // distanceBetween already returns km
982
981
 
983
982
  if (distanceInKm <= rangeInKm) {
984
983
  const filteredClinic = filterClinicEmbeddedArrays(clinic, excludeDraftPractitioners);
@@ -434,11 +434,10 @@ function applyInMemoryFilters(clinics: Clinic[], filters: any): (Clinic & { dist
434
434
  return false;
435
435
  }
436
436
 
437
- const distance =
438
- distanceBetween(
439
- [filters.center.latitude, filters.center.longitude],
440
- [clinic.location.latitude, clinic.location.longitude],
441
- ) / 1000; // Convert to km
437
+ const distance = distanceBetween(
438
+ [filters.center.latitude, filters.center.longitude],
439
+ [clinic.location.latitude, clinic.location.longitude],
440
+ ); // Already returns km
442
441
 
443
442
  console.log(
444
443
  `[CLINIC_SERVICE] Clinic ${clinic.name}: distance ${distance.toFixed(2)}km (limit: ${
@@ -60,8 +60,7 @@ export async function findClinicsInRadius(
60
60
  [clinic.location.latitude, clinic.location.longitude]
61
61
  );
62
62
 
63
- // Konvertujemo u kilometre
64
- const distanceInKm = distance / 1000;
63
+ const distanceInKm = distance; // distanceBetween already returns km
65
64
 
66
65
  if (distanceInKm <= radiusInKm) {
67
66
  matchingDocs.push(clinic);
@@ -1563,23 +1563,37 @@ export class PractitionerService extends BaseService {
1563
1563
  constraints.push(where("fullNameLower", "<=", searchTerm + "\uf8ff"));
1564
1564
  constraints.push(orderBy("fullNameLower"));
1565
1565
 
1566
- if (filters.lastDoc) {
1567
- if (typeof filters.lastDoc.data === "function") {
1568
- constraints.push(startAfter(filters.lastDoc));
1569
- } else if (Array.isArray(filters.lastDoc)) {
1570
- constraints.push(startAfter(...filters.lastDoc));
1571
- } else {
1572
- constraints.push(startAfter(filters.lastDoc));
1566
+ if (filters.location && filters.radiusInKm) {
1567
+ // Fetch more results when geo filtering will reduce count
1568
+ if (filters.lastDoc) {
1569
+ if (typeof filters.lastDoc.data === "function") {
1570
+ constraints.push(startAfter(filters.lastDoc));
1571
+ } else if (Array.isArray(filters.lastDoc)) {
1572
+ constraints.push(startAfter(...filters.lastDoc));
1573
+ } else {
1574
+ constraints.push(startAfter(filters.lastDoc));
1575
+ }
1573
1576
  }
1577
+ constraints.push(limit((filters.pagination || 10) * 2));
1578
+ } else {
1579
+ if (filters.lastDoc) {
1580
+ if (typeof filters.lastDoc.data === "function") {
1581
+ constraints.push(startAfter(filters.lastDoc));
1582
+ } else if (Array.isArray(filters.lastDoc)) {
1583
+ constraints.push(startAfter(...filters.lastDoc));
1584
+ } else {
1585
+ constraints.push(startAfter(filters.lastDoc));
1586
+ }
1587
+ }
1588
+ constraints.push(limit(filters.pagination || 10));
1574
1589
  }
1575
- constraints.push(limit(filters.pagination || 10));
1576
1590
 
1577
1591
  const q = query(
1578
1592
  collection(this.db, PRACTITIONERS_COLLECTION),
1579
1593
  ...constraints
1580
1594
  );
1581
1595
  const querySnapshot = await getDocs(q);
1582
- const practitioners = querySnapshot.docs.map(
1596
+ let practitioners = querySnapshot.docs.map(
1583
1597
  (doc) => ({ ...doc.data(), id: doc.id } as Practitioner)
1584
1598
  );
1585
1599
  const lastDoc =
@@ -1587,6 +1601,22 @@ export class PractitionerService extends BaseService {
1587
1601
  ? querySnapshot.docs[querySnapshot.docs.length - 1]
1588
1602
  : null;
1589
1603
 
1604
+ // Apply geo filter if location is provided (in-memory, same as Strategy 2)
1605
+ if (filters.location && filters.radiusInKm && filters.radiusInKm > 0) {
1606
+ const location = filters.location;
1607
+ const radiusInKm = filters.radiusInKm;
1608
+ practitioners = practitioners.filter((practitioner) => {
1609
+ const clinics = practitioner.clinicsInfo || [];
1610
+ return clinics.some((clinic) => {
1611
+ const distanceInKm = distanceBetween(
1612
+ [location.latitude, location.longitude],
1613
+ [clinic.location.latitude, clinic.location.longitude]
1614
+ ); // Already returns km
1615
+ return distanceInKm <= radiusInKm;
1616
+ });
1617
+ });
1618
+ }
1619
+
1590
1620
  console.log(
1591
1621
  `[PRACTITIONER_SERVICE] Strategy 1 success: ${practitioners.length} practitioners`
1592
1622
  );
@@ -1672,11 +1702,10 @@ export class PractitionerService extends BaseService {
1672
1702
  practitioners = practitioners.filter((practitioner) => {
1673
1703
  const clinics = practitioner.clinicsInfo || [];
1674
1704
  return clinics.some((clinic) => {
1675
- const distance = distanceBetween(
1705
+ const distanceInKm = distanceBetween(
1676
1706
  [location.latitude, location.longitude],
1677
1707
  [clinic.location.latitude, clinic.location.longitude]
1678
- );
1679
- const distanceInKm = distance / 1000;
1708
+ ); // Already returns km
1680
1709
  return distanceInKm <= radiusInKm;
1681
1710
  });
1682
1711
  });
@@ -1936,11 +1965,10 @@ export class PractitionerService extends BaseService {
1936
1965
  filteredPractitioners = filteredPractitioners.filter((practitioner) => {
1937
1966
  const clinics = practitioner.clinicsInfo || [];
1938
1967
  return clinics.some((clinic) => {
1939
- const distance = distanceBetween(
1968
+ const distanceInKm = distanceBetween(
1940
1969
  [location.latitude, location.longitude],
1941
1970
  [clinic.location.latitude, clinic.location.longitude]
1942
- );
1943
- const distanceInKm = distance / 1000;
1971
+ ); // Already returns km
1944
1972
  return distanceInKm <= radiusInKm;
1945
1973
  });
1946
1974
  });
@@ -2174,11 +2174,10 @@ export class ProcedureService extends BaseService {
2174
2174
  return false;
2175
2175
  }
2176
2176
 
2177
- const distance =
2178
- distanceBetween(
2179
- [location.latitude, location.longitude],
2180
- [clinicLocation.latitude, clinicLocation.longitude],
2181
- ) / 1000; // Convert to km
2177
+ const distance = distanceBetween(
2178
+ [location.latitude, location.longitude],
2179
+ [clinicLocation.latitude, clinicLocation.longitude],
2180
+ ); // Already returns km
2182
2181
 
2183
2182
  // Attach distance for frontend sorting/display
2184
2183
  (procedure as any).distance = distance;