@blackcode_sa/metaestetics-api 1.6.0 → 1.6.2

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.mjs CHANGED
@@ -255,7 +255,7 @@ var UserRole = /* @__PURE__ */ ((UserRole2) => {
255
255
  var USERS_COLLECTION = "users";
256
256
 
257
257
  // src/services/auth.service.ts
258
- import { z as z18 } from "zod";
258
+ import { z as z19 } from "zod";
259
259
 
260
260
  // src/validations/schemas.ts
261
261
  import { z as z3 } from "zod";
@@ -792,7 +792,7 @@ var USER_ERRORS = {
792
792
  };
793
793
 
794
794
  // src/services/user.service.ts
795
- import { z as z14 } from "zod";
795
+ import { z as z15 } from "zod";
796
796
 
797
797
  // src/services/patient/patient.service.ts
798
798
  import {
@@ -2525,7 +2525,7 @@ import {
2525
2525
  updateDoc as updateDoc7,
2526
2526
  setDoc as setDoc6,
2527
2527
  deleteDoc,
2528
- Timestamp as Timestamp7,
2528
+ Timestamp as Timestamp6,
2529
2529
  serverTimestamp as serverTimestamp8
2530
2530
  } from "firebase/firestore";
2531
2531
 
@@ -2654,52 +2654,8 @@ var SubscriptionModel = /* @__PURE__ */ ((SubscriptionModel2) => {
2654
2654
 
2655
2655
  // src/validations/clinic.schema.ts
2656
2656
  import { z as z12 } from "zod";
2657
- import { Timestamp as Timestamp6 } from "firebase/firestore";
2658
-
2659
- // src/validations/practitioner.schema.ts
2660
- import { z as z11 } from "zod";
2661
2657
  import { Timestamp as Timestamp5 } from "firebase/firestore";
2662
2658
 
2663
- // src/backoffice/types/static/certification.types.ts
2664
- var CertificationLevel = /* @__PURE__ */ ((CertificationLevel2) => {
2665
- CertificationLevel2["AESTHETICIAN"] = "aesthetician";
2666
- CertificationLevel2["NURSE_ASSISTANT"] = "nurse_assistant";
2667
- CertificationLevel2["NURSE"] = "nurse";
2668
- CertificationLevel2["NURSE_PRACTITIONER"] = "nurse_practitioner";
2669
- CertificationLevel2["PHYSICIAN_ASSISTANT"] = "physician_assistant";
2670
- CertificationLevel2["DOCTOR"] = "doctor";
2671
- CertificationLevel2["SPECIALIST"] = "specialist";
2672
- CertificationLevel2["PLASTIC_SURGEON"] = "plastic_surgeon";
2673
- return CertificationLevel2;
2674
- })(CertificationLevel || {});
2675
- var CertificationSpecialty = /* @__PURE__ */ ((CertificationSpecialty3) => {
2676
- CertificationSpecialty3["LASER"] = "laser";
2677
- CertificationSpecialty3["INJECTABLES"] = "injectables";
2678
- CertificationSpecialty3["CHEMICAL_PEELS"] = "chemical_peels";
2679
- CertificationSpecialty3["MICRODERMABRASION"] = "microdermabrasion";
2680
- CertificationSpecialty3["BODY_CONTOURING"] = "body_contouring";
2681
- CertificationSpecialty3["SKIN_CARE"] = "skin_care";
2682
- CertificationSpecialty3["WOUND_CARE"] = "wound_care";
2683
- CertificationSpecialty3["ANESTHESIA"] = "anesthesia";
2684
- return CertificationSpecialty3;
2685
- })(CertificationSpecialty || {});
2686
-
2687
- // src/types/practitioner/index.ts
2688
- var PRACTITIONERS_COLLECTION = "practitioners";
2689
- var REGISTER_TOKENS_COLLECTION = "register_tokens";
2690
- var PractitionerStatus = /* @__PURE__ */ ((PractitionerStatus2) => {
2691
- PractitionerStatus2["DRAFT"] = "draft";
2692
- PractitionerStatus2["ACTIVE"] = "active";
2693
- return PractitionerStatus2;
2694
- })(PractitionerStatus || {});
2695
- var PractitionerTokenStatus = /* @__PURE__ */ ((PractitionerTokenStatus2) => {
2696
- PractitionerTokenStatus2["ACTIVE"] = "active";
2697
- PractitionerTokenStatus2["USED"] = "used";
2698
- PractitionerTokenStatus2["EXPIRED"] = "expired";
2699
- PractitionerTokenStatus2["REVOKED"] = "revoked";
2700
- return PractitionerTokenStatus2;
2701
- })(PractitionerTokenStatus || {});
2702
-
2703
2659
  // src/validations/reviews.schema.ts
2704
2660
  import { z as z10 } from "zod";
2705
2661
  var baseReviewSchema = z10.object({
@@ -2833,6 +2789,9 @@ var createReviewSchema = z10.object({
2833
2789
  }
2834
2790
  );
2835
2791
 
2792
+ // src/validations/shared.schema.ts
2793
+ import { z as z11 } from "zod";
2794
+
2836
2795
  // src/backoffice/types/static/procedure-family.types.ts
2837
2796
  var ProcedureFamily = /* @__PURE__ */ ((ProcedureFamily2) => {
2838
2797
  ProcedureFamily2["AESTHETICS"] = "aesthetics";
@@ -2859,59 +2818,21 @@ var Currency = /* @__PURE__ */ ((Currency2) => {
2859
2818
  return Currency2;
2860
2819
  })(Currency || {});
2861
2820
 
2862
- // src/validations/practitioner.schema.ts
2863
- var practitionerBasicInfoSchema = z11.object({
2864
- firstName: z11.string().min(2).max(50),
2865
- lastName: z11.string().min(2).max(50),
2866
- title: z11.string().min(2).max(100),
2821
+ // src/validations/shared.schema.ts
2822
+ var sharedClinicContactInfoSchema = z11.object({
2867
2823
  email: z11.string().email(),
2868
- phoneNumber: z11.string().regex(/^\+?[1-9]\d{1,14}$/, "Invalid phone number"),
2869
- dateOfBirth: z11.instanceof(Timestamp5).or(z11.date()),
2870
- gender: z11.enum(["male", "female", "other"]),
2871
- profileImageUrl: z11.string().url().optional(),
2872
- bio: z11.string().max(1e3).optional(),
2873
- languages: z11.array(z11.string()).min(1)
2874
- });
2875
- var practitionerCertificationSchema = z11.object({
2876
- level: z11.nativeEnum(CertificationLevel),
2877
- specialties: z11.array(z11.nativeEnum(CertificationSpecialty)),
2878
- licenseNumber: z11.string().min(3).max(50),
2879
- issuingAuthority: z11.string().min(2).max(100),
2880
- issueDate: z11.instanceof(Timestamp5).or(z11.date()),
2881
- expiryDate: z11.instanceof(Timestamp5).or(z11.date()).optional(),
2882
- verificationStatus: z11.enum(["pending", "verified", "rejected"])
2883
- });
2884
- var timeSlotSchema = z11.object({
2885
- start: z11.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format"),
2886
- end: z11.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format")
2887
- }).nullable();
2888
- var practitionerWorkingHoursSchema = z11.object({
2889
- practitionerId: z11.string().min(1),
2890
- clinicId: z11.string().min(1),
2891
- monday: timeSlotSchema,
2892
- tuesday: timeSlotSchema,
2893
- wednesday: timeSlotSchema,
2894
- thursday: timeSlotSchema,
2895
- friday: timeSlotSchema,
2896
- saturday: timeSlotSchema,
2897
- sunday: timeSlotSchema,
2898
- createdAt: z11.instanceof(Timestamp5).or(z11.date()),
2899
- updatedAt: z11.instanceof(Timestamp5).or(z11.date())
2824
+ phoneNumber: z11.string(),
2825
+ alternativePhoneNumber: z11.string().nullable().optional(),
2826
+ website: z11.string().nullable().optional()
2900
2827
  });
2901
- var practitionerClinicWorkingHoursSchema = z11.object({
2902
- clinicId: z11.string().min(1),
2903
- workingHours: z11.object({
2904
- monday: timeSlotSchema,
2905
- tuesday: timeSlotSchema,
2906
- wednesday: timeSlotSchema,
2907
- thursday: timeSlotSchema,
2908
- friday: timeSlotSchema,
2909
- saturday: timeSlotSchema,
2910
- sunday: timeSlotSchema
2911
- }),
2912
- isActive: z11.boolean(),
2913
- createdAt: z11.instanceof(Timestamp5).or(z11.date()),
2914
- updatedAt: z11.instanceof(Timestamp5).or(z11.date())
2828
+ var sharedClinicLocationSchema = z11.object({
2829
+ address: z11.string(),
2830
+ city: z11.string(),
2831
+ country: z11.string(),
2832
+ postalCode: z11.string(),
2833
+ latitude: z11.number().min(-90).max(90),
2834
+ longitude: z11.number().min(-180).max(180),
2835
+ geohash: z11.string().nullable().optional()
2915
2836
  });
2916
2837
  var procedureSummaryInfoSchema = z11.object({
2917
2838
  id: z11.string().min(1),
@@ -2931,79 +2852,22 @@ var procedureSummaryInfoSchema = z11.object({
2931
2852
  practitionerId: z11.string().min(1),
2932
2853
  practitionerName: z11.string().min(1)
2933
2854
  });
2934
- var practitionerSchema = z11.object({
2935
- id: z11.string().min(1),
2936
- userRef: z11.string().min(1),
2937
- basicInfo: practitionerBasicInfoSchema,
2938
- certification: practitionerCertificationSchema,
2939
- clinics: z11.array(z11.string()),
2940
- clinicWorkingHours: z11.array(practitionerClinicWorkingHoursSchema),
2941
- clinicsInfo: z11.array(clinicInfoSchema),
2942
- procedures: z11.array(z11.string()),
2943
- proceduresInfo: z11.array(procedureSummaryInfoSchema),
2944
- reviewInfo: practitionerReviewInfoSchema,
2945
- isActive: z11.boolean(),
2946
- isVerified: z11.boolean(),
2947
- status: z11.nativeEnum(PractitionerStatus),
2948
- createdAt: z11.instanceof(Timestamp5).or(z11.date()),
2949
- updatedAt: z11.instanceof(Timestamp5).or(z11.date())
2950
- });
2951
- var createPractitionerSchema = z11.object({
2952
- userRef: z11.string().min(1),
2953
- basicInfo: practitionerBasicInfoSchema,
2954
- certification: practitionerCertificationSchema,
2955
- clinics: z11.array(z11.string()).optional(),
2956
- clinicWorkingHours: z11.array(practitionerClinicWorkingHoursSchema).optional(),
2957
- clinicsInfo: z11.array(clinicInfoSchema).optional(),
2958
- proceduresInfo: z11.array(procedureSummaryInfoSchema).optional(),
2959
- isActive: z11.boolean(),
2960
- isVerified: z11.boolean(),
2961
- status: z11.nativeEnum(PractitionerStatus).optional()
2962
- });
2963
- var createDraftPractitionerSchema = z11.object({
2964
- basicInfo: practitionerBasicInfoSchema,
2965
- certification: practitionerCertificationSchema,
2966
- clinics: z11.array(z11.string()).optional(),
2967
- clinicWorkingHours: z11.array(practitionerClinicWorkingHoursSchema).optional(),
2968
- clinicsInfo: z11.array(clinicInfoSchema).optional(),
2969
- proceduresInfo: z11.array(procedureSummaryInfoSchema).optional(),
2970
- isActive: z11.boolean().optional().default(false),
2971
- isVerified: z11.boolean().optional().default(false)
2972
- });
2973
- var practitionerTokenSchema = z11.object({
2974
- id: z11.string().min(1),
2975
- token: z11.string().min(6),
2976
- practitionerId: z11.string().min(1),
2977
- email: z11.string().email(),
2978
- clinicId: z11.string().min(1),
2979
- status: z11.nativeEnum(PractitionerTokenStatus),
2980
- createdBy: z11.string().min(1),
2981
- createdAt: z11.instanceof(Timestamp5).or(z11.date()),
2982
- expiresAt: z11.instanceof(Timestamp5).or(z11.date()),
2983
- usedBy: z11.string().optional(),
2984
- usedAt: z11.instanceof(Timestamp5).or(z11.date()).optional()
2855
+ var clinicInfoSchema = z11.object({
2856
+ id: z11.string(),
2857
+ featuredPhoto: z11.string(),
2858
+ name: z11.string(),
2859
+ description: z11.string().nullable().optional(),
2860
+ location: sharedClinicLocationSchema,
2861
+ contactInfo: sharedClinicContactInfoSchema
2985
2862
  });
2986
- var createPractitionerTokenSchema = z11.object({
2987
- practitionerId: z11.string().min(1),
2988
- email: z11.string().email(),
2989
- clinicId: z11.string().min(1),
2990
- expiresAt: z11.date().optional()
2991
- });
2992
- var practitionerSignupSchema = z11.object({
2993
- email: z11.string().email(),
2994
- password: z11.string().min(8),
2995
- firstName: z11.string().min(2).max(50),
2996
- lastName: z11.string().min(2).max(50),
2997
- token: z11.string().optional(),
2998
- profileData: z11.object({
2999
- basicInfo: z11.object({
3000
- phoneNumber: z11.string().optional(),
3001
- profileImageUrl: z11.string().optional(),
3002
- gender: z11.enum(["male", "female", "other"]).optional(),
3003
- bio: z11.string().optional()
3004
- }).optional(),
3005
- certification: z11.any().optional()
3006
- }).optional()
2863
+ var doctorInfoSchema = z11.object({
2864
+ id: z11.string(),
2865
+ name: z11.string(),
2866
+ description: z11.string().nullable().optional(),
2867
+ photo: z11.string(),
2868
+ rating: z11.number().min(0).max(5),
2869
+ services: z11.array(z11.string())
2870
+ // List of procedure IDs practitioner offers
3007
2871
  });
3008
2872
 
3009
2873
  // src/validations/clinic.schema.ts
@@ -3056,23 +2920,6 @@ var adminInfoSchema = z12.object({
3056
2920
  name: z12.string(),
3057
2921
  email: z12.string().email()
3058
2922
  });
3059
- var clinicInfoSchema = z12.object({
3060
- id: z12.string(),
3061
- featuredPhoto: z12.string(),
3062
- name: z12.string(),
3063
- description: z12.string().nullable().optional(),
3064
- location: clinicLocationSchema,
3065
- contactInfo: clinicContactInfoSchema
3066
- });
3067
- var doctorInfoSchema = z12.object({
3068
- id: z12.string(),
3069
- name: z12.string(),
3070
- description: z12.string().nullable().optional(),
3071
- photo: z12.string(),
3072
- rating: z12.number().min(0).max(5),
3073
- services: z12.array(z12.string())
3074
- // List of procedure IDs practitioner offers
3075
- });
3076
2923
  var clinicAdminSchema = z12.object({
3077
2924
  id: z12.string(),
3078
2925
  userRef: z12.string(),
@@ -3082,8 +2929,8 @@ var clinicAdminSchema = z12.object({
3082
2929
  clinicsManagedInfo: z12.array(clinicInfoSchema),
3083
2930
  contactInfo: contactPersonSchema,
3084
2931
  roleTitle: z12.string(),
3085
- createdAt: z12.instanceof(Date).or(z12.instanceof(Timestamp6)),
3086
- updatedAt: z12.instanceof(Date).or(z12.instanceof(Timestamp6)),
2932
+ createdAt: z12.instanceof(Date).or(z12.instanceof(Timestamp5)),
2933
+ updatedAt: z12.instanceof(Date).or(z12.instanceof(Timestamp5)),
3087
2934
  isActive: z12.boolean()
3088
2935
  });
3089
2936
  var adminTokenSchema = z12.object({
@@ -3092,9 +2939,9 @@ var adminTokenSchema = z12.object({
3092
2939
  email: z12.string().email().optional().nullable(),
3093
2940
  status: z12.nativeEnum(AdminTokenStatus),
3094
2941
  usedByUserRef: z12.string().optional(),
3095
- createdAt: z12.instanceof(Date).or(z12.instanceof(Timestamp6)),
2942
+ createdAt: z12.instanceof(Date).or(z12.instanceof(Timestamp5)),
3096
2943
  // Timestamp
3097
- expiresAt: z12.instanceof(Date).or(z12.instanceof(Timestamp6))
2944
+ expiresAt: z12.instanceof(Date).or(z12.instanceof(Timestamp5))
3098
2945
  // Timestamp
3099
2946
  });
3100
2947
  var createAdminTokenSchema = z12.object({
@@ -3114,9 +2961,9 @@ var clinicGroupSchema = z12.object({
3114
2961
  adminsInfo: z12.array(adminInfoSchema),
3115
2962
  adminTokens: z12.array(adminTokenSchema),
3116
2963
  ownerId: z12.string().nullable(),
3117
- createdAt: z12.instanceof(Date).or(z12.instanceof(Timestamp6)),
2964
+ createdAt: z12.instanceof(Date).or(z12.instanceof(Timestamp5)),
3118
2965
  // Timestamp
3119
- updatedAt: z12.instanceof(Date).or(z12.instanceof(Timestamp6)),
2966
+ updatedAt: z12.instanceof(Date).or(z12.instanceof(Timestamp5)),
3120
2967
  // Timestamp
3121
2968
  isActive: z12.boolean(),
3122
2969
  logo: z12.string().optional().nullable(),
@@ -3156,9 +3003,9 @@ var clinicSchema = z12.object({
3156
3003
  // servicesInfo: z.array(serviceInfoSchema), // Deprecated, use proceduresInfo
3157
3004
  reviewInfo: clinicReviewInfoSchema,
3158
3005
  admins: z12.array(z12.string()),
3159
- createdAt: z12.instanceof(Date).or(z12.instanceof(Timestamp6)),
3006
+ createdAt: z12.instanceof(Date).or(z12.instanceof(Timestamp5)),
3160
3007
  // Timestamp
3161
- updatedAt: z12.instanceof(Date).or(z12.instanceof(Timestamp6)),
3008
+ updatedAt: z12.instanceof(Date).or(z12.instanceof(Timestamp5)),
3162
3009
  // Timestamp
3163
3010
  isActive: z12.boolean(),
3164
3011
  isVerified: z12.boolean(),
@@ -3368,8 +3215,8 @@ async function createClinicAdmin(db, data, clinicGroupService) {
3368
3215
  try {
3369
3216
  clinicAdminSchema.parse({
3370
3217
  ...adminData,
3371
- createdAt: Timestamp7.now(),
3372
- updatedAt: Timestamp7.now()
3218
+ createdAt: Timestamp6.now(),
3219
+ updatedAt: Timestamp6.now()
3373
3220
  });
3374
3221
  console.log("[CLINIC_ADMIN] Admin object validation passed");
3375
3222
  } catch (schemaError) {
@@ -3738,7 +3585,182 @@ import {
3738
3585
  arrayUnion as arrayUnion5,
3739
3586
  arrayRemove as arrayRemove4
3740
3587
  } from "firebase/firestore";
3588
+
3589
+ // src/types/practitioner/index.ts
3590
+ var PRACTITIONERS_COLLECTION = "practitioners";
3591
+ var REGISTER_TOKENS_COLLECTION = "register_tokens";
3592
+ var PractitionerStatus = /* @__PURE__ */ ((PractitionerStatus2) => {
3593
+ PractitionerStatus2["DRAFT"] = "draft";
3594
+ PractitionerStatus2["ACTIVE"] = "active";
3595
+ return PractitionerStatus2;
3596
+ })(PractitionerStatus || {});
3597
+ var PractitionerTokenStatus = /* @__PURE__ */ ((PractitionerTokenStatus2) => {
3598
+ PractitionerTokenStatus2["ACTIVE"] = "active";
3599
+ PractitionerTokenStatus2["USED"] = "used";
3600
+ PractitionerTokenStatus2["EXPIRED"] = "expired";
3601
+ PractitionerTokenStatus2["REVOKED"] = "revoked";
3602
+ return PractitionerTokenStatus2;
3603
+ })(PractitionerTokenStatus || {});
3604
+
3605
+ // src/validations/practitioner.schema.ts
3741
3606
  import { z as z13 } from "zod";
3607
+ import { Timestamp as Timestamp7 } from "firebase/firestore";
3608
+
3609
+ // src/backoffice/types/static/certification.types.ts
3610
+ var CertificationLevel = /* @__PURE__ */ ((CertificationLevel2) => {
3611
+ CertificationLevel2["AESTHETICIAN"] = "aesthetician";
3612
+ CertificationLevel2["NURSE_ASSISTANT"] = "nurse_assistant";
3613
+ CertificationLevel2["NURSE"] = "nurse";
3614
+ CertificationLevel2["NURSE_PRACTITIONER"] = "nurse_practitioner";
3615
+ CertificationLevel2["PHYSICIAN_ASSISTANT"] = "physician_assistant";
3616
+ CertificationLevel2["DOCTOR"] = "doctor";
3617
+ CertificationLevel2["SPECIALIST"] = "specialist";
3618
+ CertificationLevel2["PLASTIC_SURGEON"] = "plastic_surgeon";
3619
+ return CertificationLevel2;
3620
+ })(CertificationLevel || {});
3621
+ var CertificationSpecialty = /* @__PURE__ */ ((CertificationSpecialty3) => {
3622
+ CertificationSpecialty3["LASER"] = "laser";
3623
+ CertificationSpecialty3["INJECTABLES"] = "injectables";
3624
+ CertificationSpecialty3["CHEMICAL_PEELS"] = "chemical_peels";
3625
+ CertificationSpecialty3["MICRODERMABRASION"] = "microdermabrasion";
3626
+ CertificationSpecialty3["BODY_CONTOURING"] = "body_contouring";
3627
+ CertificationSpecialty3["SKIN_CARE"] = "skin_care";
3628
+ CertificationSpecialty3["WOUND_CARE"] = "wound_care";
3629
+ CertificationSpecialty3["ANESTHESIA"] = "anesthesia";
3630
+ return CertificationSpecialty3;
3631
+ })(CertificationSpecialty || {});
3632
+
3633
+ // src/validations/practitioner.schema.ts
3634
+ var practitionerBasicInfoSchema = z13.object({
3635
+ firstName: z13.string().min(2).max(50),
3636
+ lastName: z13.string().min(2).max(50),
3637
+ title: z13.string().min(2).max(100),
3638
+ email: z13.string().email(),
3639
+ phoneNumber: z13.string().regex(/^\+?[1-9]\d{1,14}$/, "Invalid phone number"),
3640
+ dateOfBirth: z13.instanceof(Timestamp7).or(z13.date()),
3641
+ gender: z13.enum(["male", "female", "other"]),
3642
+ profileImageUrl: z13.string().url().optional(),
3643
+ bio: z13.string().max(1e3).optional(),
3644
+ languages: z13.array(z13.string()).min(1)
3645
+ });
3646
+ var practitionerCertificationSchema = z13.object({
3647
+ level: z13.nativeEnum(CertificationLevel),
3648
+ specialties: z13.array(z13.nativeEnum(CertificationSpecialty)),
3649
+ licenseNumber: z13.string().min(3).max(50),
3650
+ issuingAuthority: z13.string().min(2).max(100),
3651
+ issueDate: z13.instanceof(Timestamp7).or(z13.date()),
3652
+ expiryDate: z13.instanceof(Timestamp7).or(z13.date()).optional(),
3653
+ verificationStatus: z13.enum(["pending", "verified", "rejected"])
3654
+ });
3655
+ var timeSlotSchema = z13.object({
3656
+ start: z13.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format"),
3657
+ end: z13.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format")
3658
+ }).nullable();
3659
+ var practitionerWorkingHoursSchema = z13.object({
3660
+ practitionerId: z13.string().min(1),
3661
+ clinicId: z13.string().min(1),
3662
+ monday: timeSlotSchema,
3663
+ tuesday: timeSlotSchema,
3664
+ wednesday: timeSlotSchema,
3665
+ thursday: timeSlotSchema,
3666
+ friday: timeSlotSchema,
3667
+ saturday: timeSlotSchema,
3668
+ sunday: timeSlotSchema,
3669
+ createdAt: z13.instanceof(Timestamp7).or(z13.date()),
3670
+ updatedAt: z13.instanceof(Timestamp7).or(z13.date())
3671
+ });
3672
+ var practitionerClinicWorkingHoursSchema = z13.object({
3673
+ clinicId: z13.string().min(1),
3674
+ workingHours: z13.object({
3675
+ monday: timeSlotSchema,
3676
+ tuesday: timeSlotSchema,
3677
+ wednesday: timeSlotSchema,
3678
+ thursday: timeSlotSchema,
3679
+ friday: timeSlotSchema,
3680
+ saturday: timeSlotSchema,
3681
+ sunday: timeSlotSchema
3682
+ }),
3683
+ isActive: z13.boolean(),
3684
+ createdAt: z13.instanceof(Timestamp7).or(z13.date()),
3685
+ updatedAt: z13.instanceof(Timestamp7).or(z13.date())
3686
+ });
3687
+ var practitionerSchema = z13.object({
3688
+ id: z13.string().min(1),
3689
+ userRef: z13.string().min(1),
3690
+ basicInfo: practitionerBasicInfoSchema,
3691
+ certification: practitionerCertificationSchema,
3692
+ clinics: z13.array(z13.string()),
3693
+ clinicWorkingHours: z13.array(practitionerClinicWorkingHoursSchema),
3694
+ clinicsInfo: z13.array(clinicInfoSchema),
3695
+ procedures: z13.array(z13.string()),
3696
+ proceduresInfo: z13.array(procedureSummaryInfoSchema),
3697
+ reviewInfo: practitionerReviewInfoSchema,
3698
+ isActive: z13.boolean(),
3699
+ isVerified: z13.boolean(),
3700
+ status: z13.nativeEnum(PractitionerStatus),
3701
+ createdAt: z13.instanceof(Timestamp7).or(z13.date()),
3702
+ updatedAt: z13.instanceof(Timestamp7).or(z13.date())
3703
+ });
3704
+ var createPractitionerSchema = z13.object({
3705
+ userRef: z13.string().min(1),
3706
+ basicInfo: practitionerBasicInfoSchema,
3707
+ certification: practitionerCertificationSchema,
3708
+ clinics: z13.array(z13.string()).optional(),
3709
+ clinicWorkingHours: z13.array(practitionerClinicWorkingHoursSchema).optional(),
3710
+ clinicsInfo: z13.array(clinicInfoSchema).optional(),
3711
+ proceduresInfo: z13.array(procedureSummaryInfoSchema).optional(),
3712
+ isActive: z13.boolean(),
3713
+ isVerified: z13.boolean(),
3714
+ status: z13.nativeEnum(PractitionerStatus).optional()
3715
+ });
3716
+ var createDraftPractitionerSchema = z13.object({
3717
+ basicInfo: practitionerBasicInfoSchema,
3718
+ certification: practitionerCertificationSchema,
3719
+ clinics: z13.array(z13.string()).optional(),
3720
+ clinicWorkingHours: z13.array(practitionerClinicWorkingHoursSchema).optional(),
3721
+ clinicsInfo: z13.array(clinicInfoSchema).optional(),
3722
+ proceduresInfo: z13.array(procedureSummaryInfoSchema).optional(),
3723
+ isActive: z13.boolean().optional().default(false),
3724
+ isVerified: z13.boolean().optional().default(false)
3725
+ });
3726
+ var practitionerTokenSchema = z13.object({
3727
+ id: z13.string().min(1),
3728
+ token: z13.string().min(6),
3729
+ practitionerId: z13.string().min(1),
3730
+ email: z13.string().email(),
3731
+ clinicId: z13.string().min(1),
3732
+ status: z13.nativeEnum(PractitionerTokenStatus),
3733
+ createdBy: z13.string().min(1),
3734
+ createdAt: z13.instanceof(Timestamp7).or(z13.date()),
3735
+ expiresAt: z13.instanceof(Timestamp7).or(z13.date()),
3736
+ usedBy: z13.string().optional(),
3737
+ usedAt: z13.instanceof(Timestamp7).or(z13.date()).optional()
3738
+ });
3739
+ var createPractitionerTokenSchema = z13.object({
3740
+ practitionerId: z13.string().min(1),
3741
+ email: z13.string().email(),
3742
+ clinicId: z13.string().min(1),
3743
+ expiresAt: z13.date().optional()
3744
+ });
3745
+ var practitionerSignupSchema = z13.object({
3746
+ email: z13.string().email(),
3747
+ password: z13.string().min(8),
3748
+ firstName: z13.string().min(2).max(50),
3749
+ lastName: z13.string().min(2).max(50),
3750
+ token: z13.string().optional(),
3751
+ profileData: z13.object({
3752
+ basicInfo: z13.object({
3753
+ phoneNumber: z13.string().optional(),
3754
+ profileImageUrl: z13.string().optional(),
3755
+ gender: z13.enum(["male", "female", "other"]).optional(),
3756
+ bio: z13.string().optional()
3757
+ }).optional(),
3758
+ certification: z13.any().optional()
3759
+ }).optional()
3760
+ });
3761
+
3762
+ // src/services/practitioner/practitioner.service.ts
3763
+ import { z as z14 } from "zod";
3742
3764
  import { distanceBetween } from "geofire-common";
3743
3765
  var PractitionerService = class extends BaseService {
3744
3766
  constructor(db, auth, app, clinicService) {
@@ -3807,7 +3829,7 @@ var PractitionerService = class extends BaseService {
3807
3829
  }
3808
3830
  return createdPractitioner;
3809
3831
  } catch (error) {
3810
- if (error instanceof z13.ZodError) {
3832
+ if (error instanceof z14.ZodError) {
3811
3833
  throw new Error(`Invalid practitioner data: ${error.message}`);
3812
3834
  }
3813
3835
  console.error("Error creating practitioner:", error);
@@ -3829,8 +3851,8 @@ var PractitionerService = class extends BaseService {
3829
3851
  if (!clinic) {
3830
3852
  throw new Error(`Clinic ${clinicId} not found`);
3831
3853
  }
3832
- const clinics = data.clinics || [clinicId];
3833
- if (data.clinics) {
3854
+ const clinicsToAdd = /* @__PURE__ */ new Set([clinicId]);
3855
+ if (data.clinics && data.clinics.length > 0) {
3834
3856
  for (const cId of data.clinics) {
3835
3857
  if (cId !== clinicId) {
3836
3858
  const otherClinic = await this.getClinicService().getClinic(cId);
@@ -3838,8 +3860,10 @@ var PractitionerService = class extends BaseService {
3838
3860
  throw new Error(`Clinic ${cId} not found`);
3839
3861
  }
3840
3862
  }
3863
+ clinicsToAdd.add(cId);
3841
3864
  }
3842
3865
  }
3866
+ const clinics = Array.from(clinicsToAdd);
3843
3867
  const defaultReviewInfo = {
3844
3868
  totalReviews: 0,
3845
3869
  averageRating: 0,
@@ -3851,7 +3875,22 @@ var PractitionerService = class extends BaseService {
3851
3875
  recommendationPercentage: 0
3852
3876
  };
3853
3877
  const practitionerId = this.generateId();
3854
- const clinicsInfo = validatedData.clinicsInfo || [];
3878
+ const clinicsInfo = [];
3879
+ for (const cId of clinics) {
3880
+ const clinicData = await this.getClinicService().getClinic(cId);
3881
+ if (clinicData) {
3882
+ clinicsInfo.push({
3883
+ id: clinicData.id,
3884
+ name: clinicData.name,
3885
+ location: clinicData.location,
3886
+ contactInfo: clinicData.contactInfo,
3887
+ // Make sure we're using the right property for featuredPhoto
3888
+ featuredPhoto: clinicData.featuredPhotos && clinicData.featuredPhotos.length > 0 ? clinicData.featuredPhotos[0] : clinicData.coverPhoto || "",
3889
+ description: clinicData.description || null
3890
+ });
3891
+ }
3892
+ }
3893
+ const finalClinicsInfo = validatedData.clinicsInfo && validatedData.clinicsInfo.length > 0 ? validatedData.clinicsInfo : clinicsInfo;
3855
3894
  const proceduresInfo = [];
3856
3895
  const practitionerData = {
3857
3896
  id: practitionerId,
@@ -3861,7 +3900,7 @@ var PractitionerService = class extends BaseService {
3861
3900
  certification: validatedData.certification,
3862
3901
  clinics,
3863
3902
  clinicWorkingHours: validatedData.clinicWorkingHours || [],
3864
- clinicsInfo,
3903
+ clinicsInfo: finalClinicsInfo,
3865
3904
  procedures: [],
3866
3905
  proceduresInfo,
3867
3906
  reviewInfo: defaultReviewInfo,
@@ -3903,7 +3942,7 @@ var PractitionerService = class extends BaseService {
3903
3942
  await setDoc7(doc8(this.db, tokenPath), token);
3904
3943
  return { practitioner: savedPractitioner, token };
3905
3944
  } catch (error) {
3906
- if (error instanceof z13.ZodError) {
3945
+ if (error instanceof z14.ZodError) {
3907
3946
  throw new Error("Invalid practitioner data: " + error.message);
3908
3947
  }
3909
3948
  throw error;
@@ -3956,7 +3995,7 @@ var PractitionerService = class extends BaseService {
3956
3995
  await setDoc7(doc8(this.db, tokenPath), token);
3957
3996
  return token;
3958
3997
  } catch (error) {
3959
- if (error instanceof z13.ZodError) {
3998
+ if (error instanceof z14.ZodError) {
3960
3999
  throw new Error("Invalid token data: " + error.message);
3961
4000
  }
3962
4001
  throw error;
@@ -4116,7 +4155,7 @@ var PractitionerService = class extends BaseService {
4116
4155
  }
4117
4156
  return updatedPractitioner;
4118
4157
  } catch (error) {
4119
- if (error instanceof z13.ZodError) {
4158
+ if (error instanceof z14.ZodError) {
4120
4159
  throw new Error(`Invalid practitioner update data: ${error.message}`);
4121
4160
  }
4122
4161
  console.error(`Error updating practitioner ${practitionerId}:`, error);
@@ -4644,7 +4683,7 @@ var UserService = class extends BaseService {
4644
4683
  });
4645
4684
  return this.getUserById(uid);
4646
4685
  } catch (error) {
4647
- if (error instanceof z14.ZodError) {
4686
+ if (error instanceof z15.ZodError) {
4648
4687
  throw USER_ERRORS.VALIDATION_ERROR;
4649
4688
  }
4650
4689
  throw error;
@@ -4741,7 +4780,7 @@ import {
4741
4780
  Timestamp as Timestamp10
4742
4781
  } from "firebase/firestore";
4743
4782
  import { geohashForLocation as geohashForLocation2 } from "geofire-common";
4744
- import { z as z15 } from "zod";
4783
+ import { z as z16 } from "zod";
4745
4784
 
4746
4785
  // src/services/clinic/utils/photos.utils.ts
4747
4786
  import {
@@ -4945,7 +4984,7 @@ async function createClinicGroup(db, data, ownerId, isDefault = false, clinicAdm
4945
4984
  });
4946
4985
  return groupData;
4947
4986
  } catch (error) {
4948
- if (error instanceof z15.ZodError) {
4987
+ if (error instanceof z16.ZodError) {
4949
4988
  console.error(
4950
4989
  "[CLINIC_GROUP] Zod validation error:",
4951
4990
  JSON.stringify(error.errors, null, 2)
@@ -5360,7 +5399,7 @@ import {
5360
5399
  import {
5361
5400
  geohashForLocation as geohashForLocation4
5362
5401
  } from "geofire-common";
5363
- import { z as z17 } from "zod";
5402
+ import { z as z18 } from "zod";
5364
5403
 
5365
5404
  // src/services/clinic/utils/clinic.utils.ts
5366
5405
  import {
@@ -5381,7 +5420,7 @@ import {
5381
5420
  distanceBetween as distanceBetween2,
5382
5421
  geohashQueryBounds
5383
5422
  } from "geofire-common";
5384
- import { z as z16 } from "zod";
5423
+ import { z as z17 } from "zod";
5385
5424
  async function getClinic(db, clinicId) {
5386
5425
  const docRef = doc11(db, CLINICS_COLLECTION, clinicId);
5387
5426
  const docSnap = await getDoc14(docRef);
@@ -6066,7 +6105,7 @@ var ClinicService = class extends BaseService {
6066
6105
  if (!savedClinic) throw new Error("Failed to retrieve created clinic");
6067
6106
  return savedClinic;
6068
6107
  } catch (error) {
6069
- if (error instanceof z17.ZodError) {
6108
+ if (error instanceof z18.ZodError) {
6070
6109
  throw new Error("Invalid clinic data: " + error.message);
6071
6110
  }
6072
6111
  console.error("Error creating clinic:", error);
@@ -6114,7 +6153,7 @@ var ClinicService = class extends BaseService {
6114
6153
  if (!updatedClinic) throw new Error("Failed to retrieve updated clinic");
6115
6154
  return updatedClinic;
6116
6155
  } catch (error) {
6117
- if (error instanceof z17.ZodError) {
6156
+ if (error instanceof z18.ZodError) {
6118
6157
  throw new Error(
6119
6158
  "Invalid clinic update data: " + error.errors.map((e) => `${e.path.join(".")} - ${e.message}`).join(", ")
6120
6159
  );
@@ -6573,7 +6612,7 @@ var AuthService = class extends BaseService {
6573
6612
  clinicAdmin: adminProfile
6574
6613
  };
6575
6614
  } catch (error) {
6576
- if (error instanceof z18.ZodError) {
6615
+ if (error instanceof z19.ZodError) {
6577
6616
  console.error(
6578
6617
  "[AUTH] Zod validation error in signUpClinicAdmin:",
6579
6618
  JSON.stringify(error.errors, null, 2)
@@ -6746,7 +6785,7 @@ var AuthService = class extends BaseService {
6746
6785
  email
6747
6786
  );
6748
6787
  } catch (error) {
6749
- if (error instanceof z18.ZodError) {
6788
+ if (error instanceof z19.ZodError) {
6750
6789
  throw AUTH_ERRORS.VALIDATION_ERROR;
6751
6790
  }
6752
6791
  const firebaseError = error;
@@ -6869,7 +6908,7 @@ var AuthService = class extends BaseService {
6869
6908
  await emailSchema.parseAsync(email);
6870
6909
  await sendPasswordResetEmail(this.auth, email);
6871
6910
  } catch (error) {
6872
- if (error instanceof z18.ZodError) {
6911
+ if (error instanceof z19.ZodError) {
6873
6912
  throw AUTH_ERRORS.VALIDATION_ERROR;
6874
6913
  }
6875
6914
  const firebaseError = error;
@@ -6908,7 +6947,7 @@ var AuthService = class extends BaseService {
6908
6947
  await passwordSchema.parseAsync(newPassword);
6909
6948
  await confirmPasswordReset(this.auth, oobCode, newPassword);
6910
6949
  } catch (error) {
6911
- if (error instanceof z18.ZodError) {
6950
+ if (error instanceof z19.ZodError) {
6912
6951
  throw AUTH_ERRORS.VALIDATION_ERROR;
6913
6952
  }
6914
6953
  const firebaseError = error;
@@ -7077,7 +7116,7 @@ var AuthService = class extends BaseService {
7077
7116
  practitioner
7078
7117
  };
7079
7118
  } catch (error) {
7080
- if (error instanceof z18.ZodError) {
7119
+ if (error instanceof z19.ZodError) {
7081
7120
  console.error(
7082
7121
  "[AUTH] Zod validation error in signUpPractitioner:",
7083
7122
  JSON.stringify(error.errors, null, 2)
@@ -7369,59 +7408,59 @@ import {
7369
7408
  var PROCEDURES_COLLECTION = "procedures";
7370
7409
 
7371
7410
  // src/validations/procedure.schema.ts
7372
- import { z as z19 } from "zod";
7373
- var createProcedureSchema = z19.object({
7374
- name: z19.string().min(1).max(200),
7375
- description: z19.string().min(1).max(2e3),
7376
- family: z19.nativeEnum(ProcedureFamily),
7377
- categoryId: z19.string().min(1),
7378
- subcategoryId: z19.string().min(1),
7379
- technologyId: z19.string().min(1),
7380
- productId: z19.string().min(1),
7381
- price: z19.number().min(0),
7382
- currency: z19.nativeEnum(Currency),
7383
- pricingMeasure: z19.nativeEnum(PricingMeasure),
7384
- duration: z19.number().min(1).max(480),
7411
+ import { z as z20 } from "zod";
7412
+ var createProcedureSchema = z20.object({
7413
+ name: z20.string().min(1).max(200),
7414
+ description: z20.string().min(1).max(2e3),
7415
+ family: z20.nativeEnum(ProcedureFamily),
7416
+ categoryId: z20.string().min(1),
7417
+ subcategoryId: z20.string().min(1),
7418
+ technologyId: z20.string().min(1),
7419
+ productId: z20.string().min(1),
7420
+ price: z20.number().min(0),
7421
+ currency: z20.nativeEnum(Currency),
7422
+ pricingMeasure: z20.nativeEnum(PricingMeasure),
7423
+ duration: z20.number().min(1).max(480),
7385
7424
  // Max 8 hours
7386
- practitionerId: z19.string().min(1),
7387
- clinicBranchId: z19.string().min(1)
7425
+ practitionerId: z20.string().min(1),
7426
+ clinicBranchId: z20.string().min(1)
7388
7427
  });
7389
- var updateProcedureSchema = z19.object({
7390
- name: z19.string().min(3).max(100).optional(),
7391
- description: z19.string().min(3).max(1e3).optional(),
7392
- price: z19.number().min(0).optional(),
7393
- currency: z19.nativeEnum(Currency).optional(),
7394
- pricingMeasure: z19.nativeEnum(PricingMeasure).optional(),
7395
- duration: z19.number().min(0).optional(),
7396
- isActive: z19.boolean().optional(),
7397
- practitionerId: z19.string().optional(),
7398
- categoryId: z19.string().optional(),
7399
- subcategoryId: z19.string().optional(),
7400
- technologyId: z19.string().optional(),
7401
- productId: z19.string().optional(),
7402
- clinicBranchId: z19.string().optional()
7428
+ var updateProcedureSchema = z20.object({
7429
+ name: z20.string().min(3).max(100).optional(),
7430
+ description: z20.string().min(3).max(1e3).optional(),
7431
+ price: z20.number().min(0).optional(),
7432
+ currency: z20.nativeEnum(Currency).optional(),
7433
+ pricingMeasure: z20.nativeEnum(PricingMeasure).optional(),
7434
+ duration: z20.number().min(0).optional(),
7435
+ isActive: z20.boolean().optional(),
7436
+ practitionerId: z20.string().optional(),
7437
+ categoryId: z20.string().optional(),
7438
+ subcategoryId: z20.string().optional(),
7439
+ technologyId: z20.string().optional(),
7440
+ productId: z20.string().optional(),
7441
+ clinicBranchId: z20.string().optional()
7403
7442
  });
7404
7443
  var procedureSchema = createProcedureSchema.extend({
7405
- id: z19.string().min(1),
7406
- category: z19.any(),
7444
+ id: z20.string().min(1),
7445
+ category: z20.any(),
7407
7446
  // We'll validate the full category object separately
7408
- subcategory: z19.any(),
7447
+ subcategory: z20.any(),
7409
7448
  // We'll validate the full subcategory object separately
7410
- technology: z19.any(),
7449
+ technology: z20.any(),
7411
7450
  // We'll validate the full technology object separately
7412
- product: z19.any(),
7451
+ product: z20.any(),
7413
7452
  // We'll validate the full product object separately
7414
- blockingConditions: z19.array(z19.any()),
7453
+ blockingConditions: z20.array(z20.any()),
7415
7454
  // We'll validate blocking conditions separately
7416
- treatmentBenefits: z19.array(z19.any()),
7455
+ treatmentBenefits: z20.array(z20.any()),
7417
7456
  // We'll validate treatment benefits separately
7418
- preRequirements: z19.array(z19.any()),
7457
+ preRequirements: z20.array(z20.any()),
7419
7458
  // We'll validate requirements separately
7420
- postRequirements: z19.array(z19.any()),
7459
+ postRequirements: z20.array(z20.any()),
7421
7460
  // We'll validate requirements separately
7422
- certificationRequirement: z19.any(),
7461
+ certificationRequirement: z20.any(),
7423
7462
  // We'll validate certification requirement separately
7424
- documentationTemplates: z19.array(z19.any()),
7463
+ documentationTemplates: z20.array(z20.any()),
7425
7464
  // We'll validate documentation templates separately
7426
7465
  clinicInfo: clinicInfoSchema,
7427
7466
  // Clinic info validation
@@ -7429,9 +7468,9 @@ var procedureSchema = createProcedureSchema.extend({
7429
7468
  // Doctor info validation
7430
7469
  reviewInfo: procedureReviewInfoSchema,
7431
7470
  // Procedure review info validation
7432
- isActive: z19.boolean(),
7433
- createdAt: z19.date(),
7434
- updatedAt: z19.date()
7471
+ isActive: z20.boolean(),
7472
+ createdAt: z20.date(),
7473
+ updatedAt: z20.date()
7435
7474
  });
7436
7475
 
7437
7476
  // src/services/procedure/procedure.service.ts
@@ -8500,42 +8539,42 @@ import {
8500
8539
  } from "firebase/firestore";
8501
8540
 
8502
8541
  // src/validations/calendar.schema.ts
8503
- import { z as z21 } from "zod";
8542
+ import { z as z22 } from "zod";
8504
8543
  import { Timestamp as Timestamp18 } from "firebase/firestore";
8505
8544
 
8506
8545
  // src/validations/profile-info.schema.ts
8507
- import { z as z20 } from "zod";
8546
+ import { z as z21 } from "zod";
8508
8547
  import { Timestamp as Timestamp17 } from "firebase/firestore";
8509
- var clinicInfoSchema2 = z20.object({
8510
- id: z20.string(),
8511
- featuredPhoto: z20.string(),
8512
- name: z20.string(),
8513
- description: z20.string(),
8548
+ var clinicInfoSchema2 = z21.object({
8549
+ id: z21.string(),
8550
+ featuredPhoto: z21.string(),
8551
+ name: z21.string(),
8552
+ description: z21.string(),
8514
8553
  location: clinicLocationSchema,
8515
8554
  contactInfo: clinicContactInfoSchema
8516
8555
  });
8517
- var practitionerProfileInfoSchema = z20.object({
8518
- id: z20.string(),
8519
- practitionerPhoto: z20.string().nullable(),
8520
- name: z20.string(),
8521
- email: z20.string().email(),
8522
- phone: z20.string().nullable(),
8556
+ var practitionerProfileInfoSchema = z21.object({
8557
+ id: z21.string(),
8558
+ practitionerPhoto: z21.string().nullable(),
8559
+ name: z21.string(),
8560
+ email: z21.string().email(),
8561
+ phone: z21.string().nullable(),
8523
8562
  certification: practitionerCertificationSchema
8524
8563
  });
8525
- var patientProfileInfoSchema = z20.object({
8526
- id: z20.string(),
8527
- fullName: z20.string(),
8528
- email: z20.string().email(),
8529
- phone: z20.string().nullable(),
8530
- dateOfBirth: z20.instanceof(Timestamp17),
8531
- gender: z20.nativeEnum(Gender)
8564
+ var patientProfileInfoSchema = z21.object({
8565
+ id: z21.string(),
8566
+ fullName: z21.string(),
8567
+ email: z21.string().email(),
8568
+ phone: z21.string().nullable(),
8569
+ dateOfBirth: z21.instanceof(Timestamp17),
8570
+ gender: z21.nativeEnum(Gender)
8532
8571
  });
8533
8572
 
8534
8573
  // src/validations/calendar.schema.ts
8535
8574
  var MIN_APPOINTMENT_DURATION = 15;
8536
- var calendarEventTimeSchema = z21.object({
8537
- start: z21.instanceof(Date).or(z21.instanceof(Timestamp18)),
8538
- end: z21.instanceof(Date).or(z21.instanceof(Timestamp18))
8575
+ var calendarEventTimeSchema = z22.object({
8576
+ start: z22.instanceof(Date).or(z22.instanceof(Timestamp18)),
8577
+ end: z22.instanceof(Date).or(z22.instanceof(Timestamp18))
8539
8578
  }).refine(
8540
8579
  (data) => {
8541
8580
  const startDate = data.start instanceof Timestamp18 ? data.start.toDate() : data.start;
@@ -8556,46 +8595,46 @@ var calendarEventTimeSchema = z21.object({
8556
8595
  path: ["start"]
8557
8596
  }
8558
8597
  );
8559
- var timeSlotSchema2 = z21.object({
8560
- start: z21.date(),
8561
- end: z21.date(),
8562
- isAvailable: z21.boolean()
8598
+ var timeSlotSchema2 = z22.object({
8599
+ start: z22.date(),
8600
+ end: z22.date(),
8601
+ isAvailable: z22.boolean()
8563
8602
  }).refine((data) => data.start < data.end, {
8564
8603
  message: "End time must be after start time",
8565
8604
  path: ["end"]
8566
8605
  });
8567
- var syncedCalendarEventSchema = z21.object({
8568
- eventId: z21.string(),
8569
- syncedCalendarProvider: z21.nativeEnum(SyncedCalendarProvider),
8570
- syncedAt: z21.instanceof(Date).or(z21.instanceof(Timestamp18))
8606
+ var syncedCalendarEventSchema = z22.object({
8607
+ eventId: z22.string(),
8608
+ syncedCalendarProvider: z22.nativeEnum(SyncedCalendarProvider),
8609
+ syncedAt: z22.instanceof(Date).or(z22.instanceof(Timestamp18))
8571
8610
  });
8572
- var procedureInfoSchema = z21.object({
8573
- name: z21.string(),
8574
- description: z21.string(),
8575
- duration: z21.number().min(MIN_APPOINTMENT_DURATION),
8576
- price: z21.number().min(0),
8577
- currency: z21.nativeEnum(Currency)
8611
+ var procedureInfoSchema = z22.object({
8612
+ name: z22.string(),
8613
+ description: z22.string(),
8614
+ duration: z22.number().min(MIN_APPOINTMENT_DURATION),
8615
+ price: z22.number().min(0),
8616
+ currency: z22.nativeEnum(Currency)
8578
8617
  });
8579
- var procedureCategorizationSchema = z21.object({
8580
- procedureFamily: z21.string(),
8618
+ var procedureCategorizationSchema = z22.object({
8619
+ procedureFamily: z22.string(),
8581
8620
  // Replace with proper enum when available
8582
- procedureCategory: z21.string(),
8621
+ procedureCategory: z22.string(),
8583
8622
  // Replace with proper enum when available
8584
- procedureSubcategory: z21.string(),
8623
+ procedureSubcategory: z22.string(),
8585
8624
  // Replace with proper enum when available
8586
- procedureTechnology: z21.string(),
8625
+ procedureTechnology: z22.string(),
8587
8626
  // Replace with proper enum when available
8588
- procedureProduct: z21.string()
8627
+ procedureProduct: z22.string()
8589
8628
  // Replace with proper enum when available
8590
8629
  });
8591
- var createAppointmentSchema2 = z21.object({
8592
- clinicId: z21.string().min(1, "Clinic ID is required"),
8593
- doctorId: z21.string().min(1, "Doctor ID is required"),
8594
- patientId: z21.string().min(1, "Patient ID is required"),
8595
- procedureId: z21.string().min(1, "Procedure ID is required"),
8630
+ var createAppointmentSchema2 = z22.object({
8631
+ clinicId: z22.string().min(1, "Clinic ID is required"),
8632
+ doctorId: z22.string().min(1, "Doctor ID is required"),
8633
+ patientId: z22.string().min(1, "Patient ID is required"),
8634
+ procedureId: z22.string().min(1, "Procedure ID is required"),
8596
8635
  eventLocation: clinicLocationSchema,
8597
8636
  eventTime: calendarEventTimeSchema,
8598
- description: z21.string().optional()
8637
+ description: z22.string().optional()
8599
8638
  }).refine(
8600
8639
  (data) => {
8601
8640
  return true;
@@ -8604,73 +8643,73 @@ var createAppointmentSchema2 = z21.object({
8604
8643
  message: "Invalid appointment parameters"
8605
8644
  }
8606
8645
  );
8607
- var updateAppointmentSchema2 = z21.object({
8608
- appointmentId: z21.string().min(1, "Appointment ID is required"),
8609
- clinicId: z21.string().min(1, "Clinic ID is required"),
8610
- doctorId: z21.string().min(1, "Doctor ID is required"),
8611
- patientId: z21.string().min(1, "Patient ID is required"),
8646
+ var updateAppointmentSchema2 = z22.object({
8647
+ appointmentId: z22.string().min(1, "Appointment ID is required"),
8648
+ clinicId: z22.string().min(1, "Clinic ID is required"),
8649
+ doctorId: z22.string().min(1, "Doctor ID is required"),
8650
+ patientId: z22.string().min(1, "Patient ID is required"),
8612
8651
  eventTime: calendarEventTimeSchema.optional(),
8613
- description: z21.string().optional(),
8614
- status: z21.nativeEnum(CalendarEventStatus).optional()
8652
+ description: z22.string().optional(),
8653
+ status: z22.nativeEnum(CalendarEventStatus).optional()
8615
8654
  });
8616
- var createCalendarEventSchema = z21.object({
8617
- id: z21.string(),
8618
- clinicBranchId: z21.string().nullable().optional(),
8619
- clinicBranchInfo: z21.any().nullable().optional(),
8620
- practitionerProfileId: z21.string().nullable().optional(),
8655
+ var createCalendarEventSchema = z22.object({
8656
+ id: z22.string(),
8657
+ clinicBranchId: z22.string().nullable().optional(),
8658
+ clinicBranchInfo: z22.any().nullable().optional(),
8659
+ practitionerProfileId: z22.string().nullable().optional(),
8621
8660
  practitionerProfileInfo: practitionerProfileInfoSchema.nullable().optional(),
8622
- patientProfileId: z21.string().nullable().optional(),
8661
+ patientProfileId: z22.string().nullable().optional(),
8623
8662
  patientProfileInfo: patientProfileInfoSchema.nullable().optional(),
8624
- procedureId: z21.string().nullable().optional(),
8625
- appointmentId: z21.string().nullable().optional(),
8626
- syncedCalendarEventId: z21.array(syncedCalendarEventSchema).nullable().optional(),
8627
- eventName: z21.string().min(1, "Event name is required"),
8663
+ procedureId: z22.string().nullable().optional(),
8664
+ appointmentId: z22.string().nullable().optional(),
8665
+ syncedCalendarEventId: z22.array(syncedCalendarEventSchema).nullable().optional(),
8666
+ eventName: z22.string().min(1, "Event name is required"),
8628
8667
  eventLocation: clinicLocationSchema.optional(),
8629
8668
  eventTime: calendarEventTimeSchema,
8630
- description: z21.string().optional(),
8631
- status: z21.nativeEnum(CalendarEventStatus),
8632
- syncStatus: z21.nativeEnum(CalendarSyncStatus),
8633
- eventType: z21.nativeEnum(CalendarEventType),
8634
- createdAt: z21.any(),
8669
+ description: z22.string().optional(),
8670
+ status: z22.nativeEnum(CalendarEventStatus),
8671
+ syncStatus: z22.nativeEnum(CalendarSyncStatus),
8672
+ eventType: z22.nativeEnum(CalendarEventType),
8673
+ createdAt: z22.any(),
8635
8674
  // FieldValue for server timestamp
8636
- updatedAt: z21.any()
8675
+ updatedAt: z22.any()
8637
8676
  // FieldValue for server timestamp
8638
8677
  });
8639
- var updateCalendarEventSchema = z21.object({
8640
- syncedCalendarEventId: z21.array(syncedCalendarEventSchema).nullable().optional(),
8641
- appointmentId: z21.string().nullable().optional(),
8642
- eventName: z21.string().optional(),
8678
+ var updateCalendarEventSchema = z22.object({
8679
+ syncedCalendarEventId: z22.array(syncedCalendarEventSchema).nullable().optional(),
8680
+ appointmentId: z22.string().nullable().optional(),
8681
+ eventName: z22.string().optional(),
8643
8682
  eventTime: calendarEventTimeSchema.optional(),
8644
- description: z21.string().optional(),
8645
- status: z21.nativeEnum(CalendarEventStatus).optional(),
8646
- syncStatus: z21.nativeEnum(CalendarSyncStatus).optional(),
8647
- eventType: z21.nativeEnum(CalendarEventType).optional(),
8648
- updatedAt: z21.any()
8683
+ description: z22.string().optional(),
8684
+ status: z22.nativeEnum(CalendarEventStatus).optional(),
8685
+ syncStatus: z22.nativeEnum(CalendarSyncStatus).optional(),
8686
+ eventType: z22.nativeEnum(CalendarEventType).optional(),
8687
+ updatedAt: z22.any()
8649
8688
  // FieldValue for server timestamp
8650
8689
  });
8651
- var calendarEventSchema = z21.object({
8652
- id: z21.string(),
8653
- clinicBranchId: z21.string().nullable().optional(),
8654
- clinicBranchInfo: z21.any().nullable().optional(),
8690
+ var calendarEventSchema = z22.object({
8691
+ id: z22.string(),
8692
+ clinicBranchId: z22.string().nullable().optional(),
8693
+ clinicBranchInfo: z22.any().nullable().optional(),
8655
8694
  // Will be replaced with proper clinic info schema
8656
- practitionerProfileId: z21.string().nullable().optional(),
8695
+ practitionerProfileId: z22.string().nullable().optional(),
8657
8696
  practitionerProfileInfo: practitionerProfileInfoSchema.nullable().optional(),
8658
- patientProfileId: z21.string().nullable().optional(),
8697
+ patientProfileId: z22.string().nullable().optional(),
8659
8698
  patientProfileInfo: patientProfileInfoSchema.nullable().optional(),
8660
- procedureId: z21.string().nullable().optional(),
8699
+ procedureId: z22.string().nullable().optional(),
8661
8700
  procedureInfo: procedureInfoSchema.nullable().optional(),
8662
8701
  procedureCategorization: procedureCategorizationSchema.nullable().optional(),
8663
- appointmentId: z21.string().nullable().optional(),
8664
- syncedCalendarEventId: z21.array(syncedCalendarEventSchema).nullable().optional(),
8665
- eventName: z21.string(),
8702
+ appointmentId: z22.string().nullable().optional(),
8703
+ syncedCalendarEventId: z22.array(syncedCalendarEventSchema).nullable().optional(),
8704
+ eventName: z22.string(),
8666
8705
  eventLocation: clinicLocationSchema.optional(),
8667
8706
  eventTime: calendarEventTimeSchema,
8668
- description: z21.string().optional(),
8669
- status: z21.nativeEnum(CalendarEventStatus),
8670
- syncStatus: z21.nativeEnum(CalendarSyncStatus),
8671
- eventType: z21.nativeEnum(CalendarEventType),
8672
- createdAt: z21.instanceof(Date).or(z21.instanceof(Timestamp18)),
8673
- updatedAt: z21.instanceof(Date).or(z21.instanceof(Timestamp18))
8707
+ description: z22.string().optional(),
8708
+ status: z22.nativeEnum(CalendarEventStatus),
8709
+ syncStatus: z22.nativeEnum(CalendarSyncStatus),
8710
+ eventType: z22.nativeEnum(CalendarEventType),
8711
+ createdAt: z22.instanceof(Date).or(z22.instanceof(Timestamp18)),
8712
+ updatedAt: z22.instanceof(Date).or(z22.instanceof(Timestamp18))
8674
8713
  });
8675
8714
 
8676
8715
  // src/services/calendar/utils/clinic.utils.ts
@@ -11281,7 +11320,7 @@ import {
11281
11320
  var REVIEWS_COLLECTION = "reviews";
11282
11321
 
11283
11322
  // src/services/reviews/reviews.service.ts
11284
- import { z as z22 } from "zod";
11323
+ import { z as z23 } from "zod";
11285
11324
  var ReviewService = class extends BaseService {
11286
11325
  constructor(db, auth, app) {
11287
11326
  super(db, auth, app);
@@ -11387,7 +11426,7 @@ var ReviewService = class extends BaseService {
11387
11426
  await Promise.all(updatePromises);
11388
11427
  return review;
11389
11428
  } catch (error) {
11390
- if (error instanceof z22.ZodError) {
11429
+ if (error instanceof z23.ZodError) {
11391
11430
  throw new Error(`Invalid review data: ${error.message}`);
11392
11431
  }
11393
11432
  throw error;
@@ -13713,54 +13752,54 @@ var ProductService = class extends BaseService {
13713
13752
  };
13714
13753
 
13715
13754
  // src/validations/notification.schema.ts
13716
- import { z as z23 } from "zod";
13717
- var baseNotificationSchema = z23.object({
13718
- id: z23.string().optional(),
13719
- userId: z23.string(),
13720
- notificationTime: z23.any(),
13755
+ import { z as z24 } from "zod";
13756
+ var baseNotificationSchema = z24.object({
13757
+ id: z24.string().optional(),
13758
+ userId: z24.string(),
13759
+ notificationTime: z24.any(),
13721
13760
  // Timestamp
13722
- notificationType: z23.nativeEnum(NotificationType),
13723
- notificationTokens: z23.array(z23.string()),
13724
- status: z23.nativeEnum(NotificationStatus),
13725
- createdAt: z23.any().optional(),
13761
+ notificationType: z24.nativeEnum(NotificationType),
13762
+ notificationTokens: z24.array(z24.string()),
13763
+ status: z24.nativeEnum(NotificationStatus),
13764
+ createdAt: z24.any().optional(),
13726
13765
  // Timestamp
13727
- updatedAt: z23.any().optional(),
13766
+ updatedAt: z24.any().optional(),
13728
13767
  // Timestamp
13729
- title: z23.string(),
13730
- body: z23.string(),
13731
- isRead: z23.boolean(),
13732
- userRole: z23.nativeEnum(UserRole)
13768
+ title: z24.string(),
13769
+ body: z24.string(),
13770
+ isRead: z24.boolean(),
13771
+ userRole: z24.nativeEnum(UserRole)
13733
13772
  });
13734
13773
  var preRequirementNotificationSchema = baseNotificationSchema.extend({
13735
- notificationType: z23.literal("preRequirement" /* PRE_REQUIREMENT */),
13736
- treatmentId: z23.string(),
13737
- requirements: z23.array(z23.string()),
13738
- deadline: z23.any()
13774
+ notificationType: z24.literal("preRequirement" /* PRE_REQUIREMENT */),
13775
+ treatmentId: z24.string(),
13776
+ requirements: z24.array(z24.string()),
13777
+ deadline: z24.any()
13739
13778
  // Timestamp
13740
13779
  });
13741
13780
  var postRequirementNotificationSchema = baseNotificationSchema.extend({
13742
- notificationType: z23.literal("postRequirement" /* POST_REQUIREMENT */),
13743
- treatmentId: z23.string(),
13744
- requirements: z23.array(z23.string()),
13745
- deadline: z23.any()
13781
+ notificationType: z24.literal("postRequirement" /* POST_REQUIREMENT */),
13782
+ treatmentId: z24.string(),
13783
+ requirements: z24.array(z24.string()),
13784
+ deadline: z24.any()
13746
13785
  // Timestamp
13747
13786
  });
13748
13787
  var appointmentReminderNotificationSchema = baseNotificationSchema.extend({
13749
- notificationType: z23.literal("appointmentReminder" /* APPOINTMENT_REMINDER */),
13750
- appointmentId: z23.string(),
13751
- appointmentTime: z23.any(),
13788
+ notificationType: z24.literal("appointmentReminder" /* APPOINTMENT_REMINDER */),
13789
+ appointmentId: z24.string(),
13790
+ appointmentTime: z24.any(),
13752
13791
  // Timestamp
13753
- treatmentType: z23.string(),
13754
- doctorName: z23.string()
13792
+ treatmentType: z24.string(),
13793
+ doctorName: z24.string()
13755
13794
  });
13756
13795
  var appointmentNotificationSchema = baseNotificationSchema.extend({
13757
- notificationType: z23.literal("appointmentNotification" /* APPOINTMENT_NOTIFICATION */),
13758
- appointmentId: z23.string(),
13759
- appointmentStatus: z23.string(),
13760
- previousStatus: z23.string(),
13761
- reason: z23.string().optional()
13796
+ notificationType: z24.literal("appointmentNotification" /* APPOINTMENT_NOTIFICATION */),
13797
+ appointmentId: z24.string(),
13798
+ appointmentStatus: z24.string(),
13799
+ previousStatus: z24.string(),
13800
+ reason: z24.string().optional()
13762
13801
  });
13763
- var notificationSchema = z23.discriminatedUnion("notificationType", [
13802
+ var notificationSchema = z24.discriminatedUnion("notificationType", [
13764
13803
  preRequirementNotificationSchema,
13765
13804
  postRequirementNotificationSchema,
13766
13805
  appointmentReminderNotificationSchema,
@@ -13900,7 +13939,6 @@ export {
13900
13939
  clinicContactInfoSchema,
13901
13940
  clinicGroupSchema,
13902
13941
  clinicGroupSetupSchema,
13903
- clinicInfoSchema,
13904
13942
  clinicLocationSchema,
13905
13943
  clinicReviewInfoSchema,
13906
13944
  clinicReviewSchema,
@@ -13928,7 +13966,6 @@ export {
13928
13966
  createProcedureReviewSchema,
13929
13967
  createReviewSchema,
13930
13968
  createUserOptionsSchema,
13931
- doctorInfoSchema,
13932
13969
  documentElementSchema,
13933
13970
  documentElementWithoutIdSchema,
13934
13971
  documentTemplateSchema,
@@ -13967,7 +14004,6 @@ export {
13967
14004
  procedureInfoSchema,
13968
14005
  procedureReviewInfoSchema,
13969
14006
  procedureReviewSchema,
13970
- procedureSummaryInfoSchema,
13971
14007
  requesterInfoSchema,
13972
14008
  reviewSchema,
13973
14009
  searchAppointmentsSchema,