@blackcode_sa/metaestetics-api 1.12.69 → 1.12.70

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.d.mts CHANGED
@@ -7634,6 +7634,18 @@ declare class PatientRequirementsService extends BaseService {
7634
7634
 
7635
7635
  declare class ReviewService extends BaseService {
7636
7636
  constructor(db: Firestore, auth: Auth, app: FirebaseApp);
7637
+ /**
7638
+ * Helper function to convert Firestore Timestamps to Date objects
7639
+ * @param timestamp The timestamp to convert
7640
+ * @returns A JavaScript Date object or null
7641
+ */
7642
+ private convertTimestamp;
7643
+ /**
7644
+ * Converts a Firestore document to a Review object with proper date handling
7645
+ * @param docData The raw Firestore document data
7646
+ * @returns A Review object with properly converted dates
7647
+ */
7648
+ private convertDocToReview;
7637
7649
  /**
7638
7650
  * Creates a new review
7639
7651
  * @param data - The review data to create
package/dist/index.d.ts CHANGED
@@ -7634,6 +7634,18 @@ declare class PatientRequirementsService extends BaseService {
7634
7634
 
7635
7635
  declare class ReviewService extends BaseService {
7636
7636
  constructor(db: Firestore, auth: Auth, app: FirebaseApp);
7637
+ /**
7638
+ * Helper function to convert Firestore Timestamps to Date objects
7639
+ * @param timestamp The timestamp to convert
7640
+ * @returns A JavaScript Date object or null
7641
+ */
7642
+ private convertTimestamp;
7643
+ /**
7644
+ * Converts a Firestore document to a Review object with proper date handling
7645
+ * @param docData The raw Firestore document data
7646
+ * @returns A Review object with properly converted dates
7647
+ */
7648
+ private convertDocToReview;
7637
7649
  /**
7638
7650
  * Creates a new review
7639
7651
  * @param data - The review data to create
package/dist/index.js CHANGED
@@ -18088,6 +18088,60 @@ var ReviewService = class extends BaseService {
18088
18088
  constructor(db, auth, app) {
18089
18089
  super(db, auth, app);
18090
18090
  }
18091
+ /**
18092
+ * Helper function to convert Firestore Timestamps to Date objects
18093
+ * @param timestamp The timestamp to convert
18094
+ * @returns A JavaScript Date object or null
18095
+ */
18096
+ convertTimestamp(timestamp) {
18097
+ if (!timestamp) return /* @__PURE__ */ new Date();
18098
+ if (timestamp && timestamp.__isTimestamp === true && typeof timestamp.seconds === "number") {
18099
+ return new Date(timestamp.seconds * 1e3 + (timestamp.nanoseconds || 0) / 1e6);
18100
+ }
18101
+ if (timestamp && timestamp.toDate && typeof timestamp.toDate === "function") {
18102
+ return timestamp.toDate();
18103
+ }
18104
+ if (timestamp instanceof Date) {
18105
+ return timestamp;
18106
+ }
18107
+ if (typeof timestamp === "string" || typeof timestamp === "number") {
18108
+ const date = new Date(timestamp);
18109
+ if (!isNaN(date.getTime())) {
18110
+ return date;
18111
+ }
18112
+ }
18113
+ return /* @__PURE__ */ new Date();
18114
+ }
18115
+ /**
18116
+ * Converts a Firestore document to a Review object with proper date handling
18117
+ * @param docData The raw Firestore document data
18118
+ * @returns A Review object with properly converted dates
18119
+ */
18120
+ convertDocToReview(docData) {
18121
+ const review = docData;
18122
+ review.createdAt = this.convertTimestamp(docData.createdAt);
18123
+ review.updatedAt = this.convertTimestamp(docData.updatedAt);
18124
+ if (review.clinicReview) {
18125
+ review.clinicReview.createdAt = this.convertTimestamp(review.clinicReview.createdAt);
18126
+ review.clinicReview.updatedAt = this.convertTimestamp(review.clinicReview.updatedAt);
18127
+ }
18128
+ if (review.practitionerReview) {
18129
+ review.practitionerReview.createdAt = this.convertTimestamp(review.practitionerReview.createdAt);
18130
+ review.practitionerReview.updatedAt = this.convertTimestamp(review.practitionerReview.updatedAt);
18131
+ }
18132
+ if (review.procedureReview) {
18133
+ review.procedureReview.createdAt = this.convertTimestamp(review.procedureReview.createdAt);
18134
+ review.procedureReview.updatedAt = this.convertTimestamp(review.procedureReview.updatedAt);
18135
+ }
18136
+ if (review.extendedProcedureReviews && Array.isArray(review.extendedProcedureReviews)) {
18137
+ review.extendedProcedureReviews = review.extendedProcedureReviews.map((extReview) => ({
18138
+ ...extReview,
18139
+ createdAt: this.convertTimestamp(extReview.createdAt),
18140
+ updatedAt: this.convertTimestamp(extReview.updatedAt)
18141
+ }));
18142
+ }
18143
+ return review;
18144
+ }
18091
18145
  /**
18092
18146
  * Creates a new review
18093
18147
  * @param data - The review data to create
@@ -18231,7 +18285,7 @@ var ReviewService = class extends BaseService {
18231
18285
  console.log("\u274C ReviewService.getReview - Review not found:", reviewId);
18232
18286
  return null;
18233
18287
  }
18234
- const review = { ...docSnap.data(), id: reviewId };
18288
+ const review = { ...this.convertDocToReview(docSnap.data()), id: reviewId };
18235
18289
  try {
18236
18290
  const appointmentDoc = await (0, import_firestore56.getDoc)(
18237
18291
  (0, import_firestore56.doc)(this.db, APPOINTMENTS_COLLECTION, review.appointmentId)
@@ -18296,7 +18350,7 @@ var ReviewService = class extends BaseService {
18296
18350
  async getReviewsByPatient(patientId) {
18297
18351
  const q = (0, import_firestore56.query)((0, import_firestore56.collection)(this.db, REVIEWS_COLLECTION), (0, import_firestore56.where)("patientId", "==", patientId));
18298
18352
  const snapshot = await (0, import_firestore56.getDocs)(q);
18299
- const reviews = snapshot.docs.map((doc45) => doc45.data());
18353
+ const reviews = snapshot.docs.map((doc45) => this.convertDocToReview(doc45.data()));
18300
18354
  const enhancedReviews = await Promise.all(
18301
18355
  reviews.map(async (review) => {
18302
18356
  try {
@@ -18351,8 +18405,8 @@ var ReviewService = class extends BaseService {
18351
18405
  );
18352
18406
  const snapshot = await (0, import_firestore56.getDocs)(q);
18353
18407
  const reviews = snapshot.docs.map((doc45) => {
18354
- const data = doc45.data();
18355
- return { ...data, id: doc45.id };
18408
+ const review = this.convertDocToReview(doc45.data());
18409
+ return { ...review, id: doc45.id };
18356
18410
  });
18357
18411
  console.log("\u{1F50D} ReviewService.getReviewsByClinic - Found reviews before enhancement:", {
18358
18412
  clinicId,
@@ -18427,8 +18481,8 @@ var ReviewService = class extends BaseService {
18427
18481
  );
18428
18482
  const snapshot = await (0, import_firestore56.getDocs)(q);
18429
18483
  const reviews = snapshot.docs.map((doc45) => {
18430
- const data = doc45.data();
18431
- return { ...data, id: doc45.id };
18484
+ const review = this.convertDocToReview(doc45.data());
18485
+ return { ...review, id: doc45.id };
18432
18486
  });
18433
18487
  console.log("\u{1F50D} ReviewService.getReviewsByPractitioner - Found reviews before enhancement:", {
18434
18488
  practitionerId,
@@ -18574,7 +18628,7 @@ var ReviewService = class extends BaseService {
18574
18628
  if (snapshot.empty) {
18575
18629
  return null;
18576
18630
  }
18577
- return snapshot.docs[0].data();
18631
+ return this.convertDocToReview(snapshot.docs[0].data());
18578
18632
  }
18579
18633
  /**
18580
18634
  * Deletes a review
package/dist/index.mjs CHANGED
@@ -18346,6 +18346,60 @@ var ReviewService = class extends BaseService {
18346
18346
  constructor(db, auth, app) {
18347
18347
  super(db, auth, app);
18348
18348
  }
18349
+ /**
18350
+ * Helper function to convert Firestore Timestamps to Date objects
18351
+ * @param timestamp The timestamp to convert
18352
+ * @returns A JavaScript Date object or null
18353
+ */
18354
+ convertTimestamp(timestamp) {
18355
+ if (!timestamp) return /* @__PURE__ */ new Date();
18356
+ if (timestamp && timestamp.__isTimestamp === true && typeof timestamp.seconds === "number") {
18357
+ return new Date(timestamp.seconds * 1e3 + (timestamp.nanoseconds || 0) / 1e6);
18358
+ }
18359
+ if (timestamp && timestamp.toDate && typeof timestamp.toDate === "function") {
18360
+ return timestamp.toDate();
18361
+ }
18362
+ if (timestamp instanceof Date) {
18363
+ return timestamp;
18364
+ }
18365
+ if (typeof timestamp === "string" || typeof timestamp === "number") {
18366
+ const date = new Date(timestamp);
18367
+ if (!isNaN(date.getTime())) {
18368
+ return date;
18369
+ }
18370
+ }
18371
+ return /* @__PURE__ */ new Date();
18372
+ }
18373
+ /**
18374
+ * Converts a Firestore document to a Review object with proper date handling
18375
+ * @param docData The raw Firestore document data
18376
+ * @returns A Review object with properly converted dates
18377
+ */
18378
+ convertDocToReview(docData) {
18379
+ const review = docData;
18380
+ review.createdAt = this.convertTimestamp(docData.createdAt);
18381
+ review.updatedAt = this.convertTimestamp(docData.updatedAt);
18382
+ if (review.clinicReview) {
18383
+ review.clinicReview.createdAt = this.convertTimestamp(review.clinicReview.createdAt);
18384
+ review.clinicReview.updatedAt = this.convertTimestamp(review.clinicReview.updatedAt);
18385
+ }
18386
+ if (review.practitionerReview) {
18387
+ review.practitionerReview.createdAt = this.convertTimestamp(review.practitionerReview.createdAt);
18388
+ review.practitionerReview.updatedAt = this.convertTimestamp(review.practitionerReview.updatedAt);
18389
+ }
18390
+ if (review.procedureReview) {
18391
+ review.procedureReview.createdAt = this.convertTimestamp(review.procedureReview.createdAt);
18392
+ review.procedureReview.updatedAt = this.convertTimestamp(review.procedureReview.updatedAt);
18393
+ }
18394
+ if (review.extendedProcedureReviews && Array.isArray(review.extendedProcedureReviews)) {
18395
+ review.extendedProcedureReviews = review.extendedProcedureReviews.map((extReview) => ({
18396
+ ...extReview,
18397
+ createdAt: this.convertTimestamp(extReview.createdAt),
18398
+ updatedAt: this.convertTimestamp(extReview.updatedAt)
18399
+ }));
18400
+ }
18401
+ return review;
18402
+ }
18349
18403
  /**
18350
18404
  * Creates a new review
18351
18405
  * @param data - The review data to create
@@ -18489,7 +18543,7 @@ var ReviewService = class extends BaseService {
18489
18543
  console.log("\u274C ReviewService.getReview - Review not found:", reviewId);
18490
18544
  return null;
18491
18545
  }
18492
- const review = { ...docSnap.data(), id: reviewId };
18546
+ const review = { ...this.convertDocToReview(docSnap.data()), id: reviewId };
18493
18547
  try {
18494
18548
  const appointmentDoc = await getDoc39(
18495
18549
  doc38(this.db, APPOINTMENTS_COLLECTION, review.appointmentId)
@@ -18554,7 +18608,7 @@ var ReviewService = class extends BaseService {
18554
18608
  async getReviewsByPatient(patientId) {
18555
18609
  const q = query32(collection32(this.db, REVIEWS_COLLECTION), where32("patientId", "==", patientId));
18556
18610
  const snapshot = await getDocs32(q);
18557
- const reviews = snapshot.docs.map((doc45) => doc45.data());
18611
+ const reviews = snapshot.docs.map((doc45) => this.convertDocToReview(doc45.data()));
18558
18612
  const enhancedReviews = await Promise.all(
18559
18613
  reviews.map(async (review) => {
18560
18614
  try {
@@ -18609,8 +18663,8 @@ var ReviewService = class extends BaseService {
18609
18663
  );
18610
18664
  const snapshot = await getDocs32(q);
18611
18665
  const reviews = snapshot.docs.map((doc45) => {
18612
- const data = doc45.data();
18613
- return { ...data, id: doc45.id };
18666
+ const review = this.convertDocToReview(doc45.data());
18667
+ return { ...review, id: doc45.id };
18614
18668
  });
18615
18669
  console.log("\u{1F50D} ReviewService.getReviewsByClinic - Found reviews before enhancement:", {
18616
18670
  clinicId,
@@ -18685,8 +18739,8 @@ var ReviewService = class extends BaseService {
18685
18739
  );
18686
18740
  const snapshot = await getDocs32(q);
18687
18741
  const reviews = snapshot.docs.map((doc45) => {
18688
- const data = doc45.data();
18689
- return { ...data, id: doc45.id };
18742
+ const review = this.convertDocToReview(doc45.data());
18743
+ return { ...review, id: doc45.id };
18690
18744
  });
18691
18745
  console.log("\u{1F50D} ReviewService.getReviewsByPractitioner - Found reviews before enhancement:", {
18692
18746
  practitionerId,
@@ -18832,7 +18886,7 @@ var ReviewService = class extends BaseService {
18832
18886
  if (snapshot.empty) {
18833
18887
  return null;
18834
18888
  }
18835
- return snapshot.docs[0].data();
18889
+ return this.convertDocToReview(snapshot.docs[0].data());
18836
18890
  }
18837
18891
  /**
18838
18892
  * Deletes a review
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@blackcode_sa/metaestetics-api",
3
3
  "private": false,
4
- "version": "1.12.69",
4
+ "version": "1.12.70",
5
5
  "description": "Firebase authentication service with anonymous upgrade support",
6
6
  "main": "dist/index.js",
7
7
  "module": "dist/index.mjs",
@@ -29,6 +29,82 @@ export class ReviewService extends BaseService {
29
29
  super(db, auth, app);
30
30
  }
31
31
 
32
+ /**
33
+ * Helper function to convert Firestore Timestamps to Date objects
34
+ * @param timestamp The timestamp to convert
35
+ * @returns A JavaScript Date object or null
36
+ */
37
+ private convertTimestamp(timestamp: any): Date {
38
+ if (!timestamp) return new Date();
39
+
40
+ // Firebase Timestamp object with __isTimestamp
41
+ if (timestamp && timestamp.__isTimestamp === true && typeof timestamp.seconds === 'number') {
42
+ return new Date(timestamp.seconds * 1000 + (timestamp.nanoseconds || 0) / 1000000);
43
+ }
44
+
45
+ // Firebase Firestore Timestamp with toDate method
46
+ if (timestamp && timestamp.toDate && typeof timestamp.toDate === 'function') {
47
+ return timestamp.toDate();
48
+ }
49
+
50
+ // Already a Date object
51
+ if (timestamp instanceof Date) {
52
+ return timestamp;
53
+ }
54
+
55
+ // String or number
56
+ if (typeof timestamp === 'string' || typeof timestamp === 'number') {
57
+ const date = new Date(timestamp);
58
+ if (!isNaN(date.getTime())) {
59
+ return date;
60
+ }
61
+ }
62
+
63
+ return new Date();
64
+ }
65
+
66
+ /**
67
+ * Converts a Firestore document to a Review object with proper date handling
68
+ * @param docData The raw Firestore document data
69
+ * @returns A Review object with properly converted dates
70
+ */
71
+ private convertDocToReview(docData: any): Review {
72
+ const review = docData as Review;
73
+
74
+ // Convert main review timestamps
75
+ review.createdAt = this.convertTimestamp(docData.createdAt);
76
+ review.updatedAt = this.convertTimestamp(docData.updatedAt);
77
+
78
+ // Convert clinic review timestamps if present
79
+ if (review.clinicReview) {
80
+ review.clinicReview.createdAt = this.convertTimestamp(review.clinicReview.createdAt);
81
+ review.clinicReview.updatedAt = this.convertTimestamp(review.clinicReview.updatedAt);
82
+ }
83
+
84
+ // Convert practitioner review timestamps if present
85
+ if (review.practitionerReview) {
86
+ review.practitionerReview.createdAt = this.convertTimestamp(review.practitionerReview.createdAt);
87
+ review.practitionerReview.updatedAt = this.convertTimestamp(review.practitionerReview.updatedAt);
88
+ }
89
+
90
+ // Convert procedure review timestamps if present
91
+ if (review.procedureReview) {
92
+ review.procedureReview.createdAt = this.convertTimestamp(review.procedureReview.createdAt);
93
+ review.procedureReview.updatedAt = this.convertTimestamp(review.procedureReview.updatedAt);
94
+ }
95
+
96
+ // Convert extended procedure reviews timestamps if present
97
+ if (review.extendedProcedureReviews && Array.isArray(review.extendedProcedureReviews)) {
98
+ review.extendedProcedureReviews = review.extendedProcedureReviews.map(extReview => ({
99
+ ...extReview,
100
+ createdAt: this.convertTimestamp(extReview.createdAt),
101
+ updatedAt: this.convertTimestamp(extReview.updatedAt),
102
+ }));
103
+ }
104
+
105
+ return review;
106
+ }
107
+
32
108
  /**
33
109
  * Creates a new review
34
110
  * @param data - The review data to create
@@ -206,7 +282,7 @@ export class ReviewService extends BaseService {
206
282
  return null;
207
283
  }
208
284
 
209
- const review = { ...docSnap.data(), id: reviewId } as Review;
285
+ const review = { ...this.convertDocToReview(docSnap.data()), id: reviewId };
210
286
 
211
287
  try {
212
288
  // Fetch the associated appointment to enhance with entity names
@@ -293,7 +369,7 @@ export class ReviewService extends BaseService {
293
369
  async getReviewsByPatient(patientId: string): Promise<Review[]> {
294
370
  const q = query(collection(this.db, REVIEWS_COLLECTION), where('patientId', '==', patientId));
295
371
  const snapshot = await getDocs(q);
296
- const reviews = snapshot.docs.map(doc => doc.data() as Review);
372
+ const reviews = snapshot.docs.map(doc => this.convertDocToReview(doc.data()));
297
373
 
298
374
  // Enhance reviews with entity names from appointments
299
375
  const enhancedReviews = await Promise.all(
@@ -364,8 +440,8 @@ export class ReviewService extends BaseService {
364
440
  );
365
441
  const snapshot = await getDocs(q);
366
442
  const reviews = snapshot.docs.map(doc => {
367
- const data = doc.data() as Review;
368
- return { ...data, id: doc.id };
443
+ const review = this.convertDocToReview(doc.data());
444
+ return { ...review, id: doc.id };
369
445
  });
370
446
 
371
447
  console.log('🔍 ReviewService.getReviewsByClinic - Found reviews before enhancement:', {
@@ -459,8 +535,8 @@ export class ReviewService extends BaseService {
459
535
  );
460
536
  const snapshot = await getDocs(q);
461
537
  const reviews = snapshot.docs.map(doc => {
462
- const data = doc.data() as Review;
463
- return { ...data, id: doc.id };
538
+ const review = this.convertDocToReview(doc.data());
539
+ return { ...review, id: doc.id };
464
540
  });
465
541
 
466
542
  console.log('🔍 ReviewService.getReviewsByPractitioner - Found reviews before enhancement:', {
@@ -644,7 +720,7 @@ export class ReviewService extends BaseService {
644
720
  return null;
645
721
  }
646
722
 
647
- return snapshot.docs[0].data() as Review;
723
+ return this.convertDocToReview(snapshot.docs[0].data());
648
724
  }
649
725
 
650
726
  /**