@blackcode_sa/metaestetics-api 1.6.1 → 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.d.mts +17 -184
- package/dist/index.d.ts +17 -184
- package/dist/index.js +429 -412
- package/dist/index.mjs +412 -392
- package/package.json +1 -1
- package/src/services/practitioner/practitioner.service.ts +6 -1
- package/src/validations/clinic.schema.ts +5 -25
- package/src/validations/practitioner.schema.ts +3 -3
- package/src/validations/procedure.schema.ts +1 -1
- package/src/validations/shared.schema.ts +78 -0
package/dist/index.js
CHANGED
|
@@ -131,7 +131,6 @@ __export(index_exports, {
|
|
|
131
131
|
clinicContactInfoSchema: () => clinicContactInfoSchema,
|
|
132
132
|
clinicGroupSchema: () => clinicGroupSchema,
|
|
133
133
|
clinicGroupSetupSchema: () => clinicGroupSetupSchema,
|
|
134
|
-
clinicInfoSchema: () => clinicInfoSchema,
|
|
135
134
|
clinicLocationSchema: () => clinicLocationSchema,
|
|
136
135
|
clinicReviewInfoSchema: () => clinicReviewInfoSchema,
|
|
137
136
|
clinicReviewSchema: () => clinicReviewSchema,
|
|
@@ -159,7 +158,6 @@ __export(index_exports, {
|
|
|
159
158
|
createProcedureReviewSchema: () => createProcedureReviewSchema,
|
|
160
159
|
createReviewSchema: () => createReviewSchema,
|
|
161
160
|
createUserOptionsSchema: () => createUserOptionsSchema,
|
|
162
|
-
doctorInfoSchema: () => doctorInfoSchema,
|
|
163
161
|
documentElementSchema: () => documentElementSchema,
|
|
164
162
|
documentElementWithoutIdSchema: () => documentElementWithoutIdSchema,
|
|
165
163
|
documentTemplateSchema: () => documentTemplateSchema,
|
|
@@ -198,7 +196,6 @@ __export(index_exports, {
|
|
|
198
196
|
procedureInfoSchema: () => procedureInfoSchema,
|
|
199
197
|
procedureReviewInfoSchema: () => procedureReviewInfoSchema,
|
|
200
198
|
procedureReviewSchema: () => procedureReviewSchema,
|
|
201
|
-
procedureSummaryInfoSchema: () => procedureSummaryInfoSchema,
|
|
202
199
|
requesterInfoSchema: () => requesterInfoSchema,
|
|
203
200
|
reviewSchema: () => reviewSchema,
|
|
204
201
|
searchAppointmentsSchema: () => searchAppointmentsSchema,
|
|
@@ -464,7 +461,7 @@ var UserRole = /* @__PURE__ */ ((UserRole2) => {
|
|
|
464
461
|
var USERS_COLLECTION = "users";
|
|
465
462
|
|
|
466
463
|
// src/services/auth.service.ts
|
|
467
|
-
var
|
|
464
|
+
var import_zod19 = require("zod");
|
|
468
465
|
|
|
469
466
|
// src/validations/schemas.ts
|
|
470
467
|
var import_zod3 = require("zod");
|
|
@@ -989,7 +986,7 @@ var USER_ERRORS = {
|
|
|
989
986
|
};
|
|
990
987
|
|
|
991
988
|
// src/services/user.service.ts
|
|
992
|
-
var
|
|
989
|
+
var import_zod15 = require("zod");
|
|
993
990
|
|
|
994
991
|
// src/services/patient/patient.service.ts
|
|
995
992
|
var import_firestore11 = require("firebase/firestore");
|
|
@@ -2643,7 +2640,7 @@ var PatientService = class extends BaseService {
|
|
|
2643
2640
|
};
|
|
2644
2641
|
|
|
2645
2642
|
// src/services/clinic/utils/admin.utils.ts
|
|
2646
|
-
var
|
|
2643
|
+
var import_firestore13 = require("firebase/firestore");
|
|
2647
2644
|
|
|
2648
2645
|
// src/types/clinic/preferences.types.ts
|
|
2649
2646
|
var PracticeType = /* @__PURE__ */ ((PracticeType2) => {
|
|
@@ -2770,52 +2767,8 @@ var SubscriptionModel = /* @__PURE__ */ ((SubscriptionModel2) => {
|
|
|
2770
2767
|
|
|
2771
2768
|
// src/validations/clinic.schema.ts
|
|
2772
2769
|
var import_zod12 = require("zod");
|
|
2773
|
-
var import_firestore13 = require("firebase/firestore");
|
|
2774
|
-
|
|
2775
|
-
// src/validations/practitioner.schema.ts
|
|
2776
|
-
var import_zod11 = require("zod");
|
|
2777
2770
|
var import_firestore12 = require("firebase/firestore");
|
|
2778
2771
|
|
|
2779
|
-
// src/backoffice/types/static/certification.types.ts
|
|
2780
|
-
var CertificationLevel = /* @__PURE__ */ ((CertificationLevel2) => {
|
|
2781
|
-
CertificationLevel2["AESTHETICIAN"] = "aesthetician";
|
|
2782
|
-
CertificationLevel2["NURSE_ASSISTANT"] = "nurse_assistant";
|
|
2783
|
-
CertificationLevel2["NURSE"] = "nurse";
|
|
2784
|
-
CertificationLevel2["NURSE_PRACTITIONER"] = "nurse_practitioner";
|
|
2785
|
-
CertificationLevel2["PHYSICIAN_ASSISTANT"] = "physician_assistant";
|
|
2786
|
-
CertificationLevel2["DOCTOR"] = "doctor";
|
|
2787
|
-
CertificationLevel2["SPECIALIST"] = "specialist";
|
|
2788
|
-
CertificationLevel2["PLASTIC_SURGEON"] = "plastic_surgeon";
|
|
2789
|
-
return CertificationLevel2;
|
|
2790
|
-
})(CertificationLevel || {});
|
|
2791
|
-
var CertificationSpecialty = /* @__PURE__ */ ((CertificationSpecialty3) => {
|
|
2792
|
-
CertificationSpecialty3["LASER"] = "laser";
|
|
2793
|
-
CertificationSpecialty3["INJECTABLES"] = "injectables";
|
|
2794
|
-
CertificationSpecialty3["CHEMICAL_PEELS"] = "chemical_peels";
|
|
2795
|
-
CertificationSpecialty3["MICRODERMABRASION"] = "microdermabrasion";
|
|
2796
|
-
CertificationSpecialty3["BODY_CONTOURING"] = "body_contouring";
|
|
2797
|
-
CertificationSpecialty3["SKIN_CARE"] = "skin_care";
|
|
2798
|
-
CertificationSpecialty3["WOUND_CARE"] = "wound_care";
|
|
2799
|
-
CertificationSpecialty3["ANESTHESIA"] = "anesthesia";
|
|
2800
|
-
return CertificationSpecialty3;
|
|
2801
|
-
})(CertificationSpecialty || {});
|
|
2802
|
-
|
|
2803
|
-
// src/types/practitioner/index.ts
|
|
2804
|
-
var PRACTITIONERS_COLLECTION = "practitioners";
|
|
2805
|
-
var REGISTER_TOKENS_COLLECTION = "register_tokens";
|
|
2806
|
-
var PractitionerStatus = /* @__PURE__ */ ((PractitionerStatus2) => {
|
|
2807
|
-
PractitionerStatus2["DRAFT"] = "draft";
|
|
2808
|
-
PractitionerStatus2["ACTIVE"] = "active";
|
|
2809
|
-
return PractitionerStatus2;
|
|
2810
|
-
})(PractitionerStatus || {});
|
|
2811
|
-
var PractitionerTokenStatus = /* @__PURE__ */ ((PractitionerTokenStatus2) => {
|
|
2812
|
-
PractitionerTokenStatus2["ACTIVE"] = "active";
|
|
2813
|
-
PractitionerTokenStatus2["USED"] = "used";
|
|
2814
|
-
PractitionerTokenStatus2["EXPIRED"] = "expired";
|
|
2815
|
-
PractitionerTokenStatus2["REVOKED"] = "revoked";
|
|
2816
|
-
return PractitionerTokenStatus2;
|
|
2817
|
-
})(PractitionerTokenStatus || {});
|
|
2818
|
-
|
|
2819
2772
|
// src/validations/reviews.schema.ts
|
|
2820
2773
|
var import_zod10 = require("zod");
|
|
2821
2774
|
var baseReviewSchema = import_zod10.z.object({
|
|
@@ -2949,6 +2902,9 @@ var createReviewSchema = import_zod10.z.object({
|
|
|
2949
2902
|
}
|
|
2950
2903
|
);
|
|
2951
2904
|
|
|
2905
|
+
// src/validations/shared.schema.ts
|
|
2906
|
+
var import_zod11 = require("zod");
|
|
2907
|
+
|
|
2952
2908
|
// src/backoffice/types/static/procedure-family.types.ts
|
|
2953
2909
|
var ProcedureFamily = /* @__PURE__ */ ((ProcedureFamily2) => {
|
|
2954
2910
|
ProcedureFamily2["AESTHETICS"] = "aesthetics";
|
|
@@ -2975,59 +2931,21 @@ var Currency = /* @__PURE__ */ ((Currency2) => {
|
|
|
2975
2931
|
return Currency2;
|
|
2976
2932
|
})(Currency || {});
|
|
2977
2933
|
|
|
2978
|
-
// src/validations/
|
|
2979
|
-
var
|
|
2980
|
-
firstName: import_zod11.z.string().min(2).max(50),
|
|
2981
|
-
lastName: import_zod11.z.string().min(2).max(50),
|
|
2982
|
-
title: import_zod11.z.string().min(2).max(100),
|
|
2934
|
+
// src/validations/shared.schema.ts
|
|
2935
|
+
var sharedClinicContactInfoSchema = import_zod11.z.object({
|
|
2983
2936
|
email: import_zod11.z.string().email(),
|
|
2984
|
-
phoneNumber: import_zod11.z.string()
|
|
2985
|
-
|
|
2986
|
-
|
|
2987
|
-
profileImageUrl: import_zod11.z.string().url().optional(),
|
|
2988
|
-
bio: import_zod11.z.string().max(1e3).optional(),
|
|
2989
|
-
languages: import_zod11.z.array(import_zod11.z.string()).min(1)
|
|
2990
|
-
});
|
|
2991
|
-
var practitionerCertificationSchema = import_zod11.z.object({
|
|
2992
|
-
level: import_zod11.z.nativeEnum(CertificationLevel),
|
|
2993
|
-
specialties: import_zod11.z.array(import_zod11.z.nativeEnum(CertificationSpecialty)),
|
|
2994
|
-
licenseNumber: import_zod11.z.string().min(3).max(50),
|
|
2995
|
-
issuingAuthority: import_zod11.z.string().min(2).max(100),
|
|
2996
|
-
issueDate: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
|
|
2997
|
-
expiryDate: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()).optional(),
|
|
2998
|
-
verificationStatus: import_zod11.z.enum(["pending", "verified", "rejected"])
|
|
2999
|
-
});
|
|
3000
|
-
var timeSlotSchema = import_zod11.z.object({
|
|
3001
|
-
start: import_zod11.z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format"),
|
|
3002
|
-
end: import_zod11.z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format")
|
|
3003
|
-
}).nullable();
|
|
3004
|
-
var practitionerWorkingHoursSchema = import_zod11.z.object({
|
|
3005
|
-
practitionerId: import_zod11.z.string().min(1),
|
|
3006
|
-
clinicId: import_zod11.z.string().min(1),
|
|
3007
|
-
monday: timeSlotSchema,
|
|
3008
|
-
tuesday: timeSlotSchema,
|
|
3009
|
-
wednesday: timeSlotSchema,
|
|
3010
|
-
thursday: timeSlotSchema,
|
|
3011
|
-
friday: timeSlotSchema,
|
|
3012
|
-
saturday: timeSlotSchema,
|
|
3013
|
-
sunday: timeSlotSchema,
|
|
3014
|
-
createdAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
|
|
3015
|
-
updatedAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date())
|
|
2937
|
+
phoneNumber: import_zod11.z.string(),
|
|
2938
|
+
alternativePhoneNumber: import_zod11.z.string().nullable().optional(),
|
|
2939
|
+
website: import_zod11.z.string().nullable().optional()
|
|
3016
2940
|
});
|
|
3017
|
-
var
|
|
3018
|
-
|
|
3019
|
-
|
|
3020
|
-
|
|
3021
|
-
|
|
3022
|
-
|
|
3023
|
-
|
|
3024
|
-
|
|
3025
|
-
saturday: timeSlotSchema,
|
|
3026
|
-
sunday: timeSlotSchema
|
|
3027
|
-
}),
|
|
3028
|
-
isActive: import_zod11.z.boolean(),
|
|
3029
|
-
createdAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
|
|
3030
|
-
updatedAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date())
|
|
2941
|
+
var sharedClinicLocationSchema = import_zod11.z.object({
|
|
2942
|
+
address: import_zod11.z.string(),
|
|
2943
|
+
city: import_zod11.z.string(),
|
|
2944
|
+
country: import_zod11.z.string(),
|
|
2945
|
+
postalCode: import_zod11.z.string(),
|
|
2946
|
+
latitude: import_zod11.z.number().min(-90).max(90),
|
|
2947
|
+
longitude: import_zod11.z.number().min(-180).max(180),
|
|
2948
|
+
geohash: import_zod11.z.string().nullable().optional()
|
|
3031
2949
|
});
|
|
3032
2950
|
var procedureSummaryInfoSchema = import_zod11.z.object({
|
|
3033
2951
|
id: import_zod11.z.string().min(1),
|
|
@@ -3047,79 +2965,22 @@ var procedureSummaryInfoSchema = import_zod11.z.object({
|
|
|
3047
2965
|
practitionerId: import_zod11.z.string().min(1),
|
|
3048
2966
|
practitionerName: import_zod11.z.string().min(1)
|
|
3049
2967
|
});
|
|
3050
|
-
var
|
|
3051
|
-
id: import_zod11.z.string()
|
|
3052
|
-
|
|
3053
|
-
|
|
3054
|
-
|
|
3055
|
-
|
|
3056
|
-
|
|
3057
|
-
clinicsInfo: import_zod11.z.array(clinicInfoSchema),
|
|
3058
|
-
procedures: import_zod11.z.array(import_zod11.z.string()),
|
|
3059
|
-
proceduresInfo: import_zod11.z.array(procedureSummaryInfoSchema),
|
|
3060
|
-
reviewInfo: practitionerReviewInfoSchema,
|
|
3061
|
-
isActive: import_zod11.z.boolean(),
|
|
3062
|
-
isVerified: import_zod11.z.boolean(),
|
|
3063
|
-
status: import_zod11.z.nativeEnum(PractitionerStatus),
|
|
3064
|
-
createdAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
|
|
3065
|
-
updatedAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date())
|
|
3066
|
-
});
|
|
3067
|
-
var createPractitionerSchema = import_zod11.z.object({
|
|
3068
|
-
userRef: import_zod11.z.string().min(1),
|
|
3069
|
-
basicInfo: practitionerBasicInfoSchema,
|
|
3070
|
-
certification: practitionerCertificationSchema,
|
|
3071
|
-
clinics: import_zod11.z.array(import_zod11.z.string()).optional(),
|
|
3072
|
-
clinicWorkingHours: import_zod11.z.array(practitionerClinicWorkingHoursSchema).optional(),
|
|
3073
|
-
clinicsInfo: import_zod11.z.array(clinicInfoSchema).optional(),
|
|
3074
|
-
proceduresInfo: import_zod11.z.array(procedureSummaryInfoSchema).optional(),
|
|
3075
|
-
isActive: import_zod11.z.boolean(),
|
|
3076
|
-
isVerified: import_zod11.z.boolean(),
|
|
3077
|
-
status: import_zod11.z.nativeEnum(PractitionerStatus).optional()
|
|
2968
|
+
var clinicInfoSchema = import_zod11.z.object({
|
|
2969
|
+
id: import_zod11.z.string(),
|
|
2970
|
+
featuredPhoto: import_zod11.z.string(),
|
|
2971
|
+
name: import_zod11.z.string(),
|
|
2972
|
+
description: import_zod11.z.string().nullable().optional(),
|
|
2973
|
+
location: sharedClinicLocationSchema,
|
|
2974
|
+
contactInfo: sharedClinicContactInfoSchema
|
|
3078
2975
|
});
|
|
3079
|
-
var
|
|
3080
|
-
|
|
3081
|
-
|
|
3082
|
-
|
|
3083
|
-
|
|
3084
|
-
|
|
3085
|
-
|
|
3086
|
-
|
|
3087
|
-
isVerified: import_zod11.z.boolean().optional().default(false)
|
|
3088
|
-
});
|
|
3089
|
-
var practitionerTokenSchema = import_zod11.z.object({
|
|
3090
|
-
id: import_zod11.z.string().min(1),
|
|
3091
|
-
token: import_zod11.z.string().min(6),
|
|
3092
|
-
practitionerId: import_zod11.z.string().min(1),
|
|
3093
|
-
email: import_zod11.z.string().email(),
|
|
3094
|
-
clinicId: import_zod11.z.string().min(1),
|
|
3095
|
-
status: import_zod11.z.nativeEnum(PractitionerTokenStatus),
|
|
3096
|
-
createdBy: import_zod11.z.string().min(1),
|
|
3097
|
-
createdAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
|
|
3098
|
-
expiresAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()),
|
|
3099
|
-
usedBy: import_zod11.z.string().optional(),
|
|
3100
|
-
usedAt: import_zod11.z.instanceof(import_firestore12.Timestamp).or(import_zod11.z.date()).optional()
|
|
3101
|
-
});
|
|
3102
|
-
var createPractitionerTokenSchema = import_zod11.z.object({
|
|
3103
|
-
practitionerId: import_zod11.z.string().min(1),
|
|
3104
|
-
email: import_zod11.z.string().email(),
|
|
3105
|
-
clinicId: import_zod11.z.string().min(1),
|
|
3106
|
-
expiresAt: import_zod11.z.date().optional()
|
|
3107
|
-
});
|
|
3108
|
-
var practitionerSignupSchema = import_zod11.z.object({
|
|
3109
|
-
email: import_zod11.z.string().email(),
|
|
3110
|
-
password: import_zod11.z.string().min(8),
|
|
3111
|
-
firstName: import_zod11.z.string().min(2).max(50),
|
|
3112
|
-
lastName: import_zod11.z.string().min(2).max(50),
|
|
3113
|
-
token: import_zod11.z.string().optional(),
|
|
3114
|
-
profileData: import_zod11.z.object({
|
|
3115
|
-
basicInfo: import_zod11.z.object({
|
|
3116
|
-
phoneNumber: import_zod11.z.string().optional(),
|
|
3117
|
-
profileImageUrl: import_zod11.z.string().optional(),
|
|
3118
|
-
gender: import_zod11.z.enum(["male", "female", "other"]).optional(),
|
|
3119
|
-
bio: import_zod11.z.string().optional()
|
|
3120
|
-
}).optional(),
|
|
3121
|
-
certification: import_zod11.z.any().optional()
|
|
3122
|
-
}).optional()
|
|
2976
|
+
var doctorInfoSchema = import_zod11.z.object({
|
|
2977
|
+
id: import_zod11.z.string(),
|
|
2978
|
+
name: import_zod11.z.string(),
|
|
2979
|
+
description: import_zod11.z.string().nullable().optional(),
|
|
2980
|
+
photo: import_zod11.z.string(),
|
|
2981
|
+
rating: import_zod11.z.number().min(0).max(5),
|
|
2982
|
+
services: import_zod11.z.array(import_zod11.z.string())
|
|
2983
|
+
// List of procedure IDs practitioner offers
|
|
3123
2984
|
});
|
|
3124
2985
|
|
|
3125
2986
|
// src/validations/clinic.schema.ts
|
|
@@ -3172,23 +3033,6 @@ var adminInfoSchema = import_zod12.z.object({
|
|
|
3172
3033
|
name: import_zod12.z.string(),
|
|
3173
3034
|
email: import_zod12.z.string().email()
|
|
3174
3035
|
});
|
|
3175
|
-
var clinicInfoSchema = import_zod12.z.object({
|
|
3176
|
-
id: import_zod12.z.string(),
|
|
3177
|
-
featuredPhoto: import_zod12.z.string(),
|
|
3178
|
-
name: import_zod12.z.string(),
|
|
3179
|
-
description: import_zod12.z.string().nullable().optional(),
|
|
3180
|
-
location: clinicLocationSchema,
|
|
3181
|
-
contactInfo: clinicContactInfoSchema
|
|
3182
|
-
});
|
|
3183
|
-
var doctorInfoSchema = import_zod12.z.object({
|
|
3184
|
-
id: import_zod12.z.string(),
|
|
3185
|
-
name: import_zod12.z.string(),
|
|
3186
|
-
description: import_zod12.z.string().nullable().optional(),
|
|
3187
|
-
photo: import_zod12.z.string(),
|
|
3188
|
-
rating: import_zod12.z.number().min(0).max(5),
|
|
3189
|
-
services: import_zod12.z.array(import_zod12.z.string())
|
|
3190
|
-
// List of procedure IDs practitioner offers
|
|
3191
|
-
});
|
|
3192
3036
|
var clinicAdminSchema = import_zod12.z.object({
|
|
3193
3037
|
id: import_zod12.z.string(),
|
|
3194
3038
|
userRef: import_zod12.z.string(),
|
|
@@ -3198,8 +3042,8 @@ var clinicAdminSchema = import_zod12.z.object({
|
|
|
3198
3042
|
clinicsManagedInfo: import_zod12.z.array(clinicInfoSchema),
|
|
3199
3043
|
contactInfo: contactPersonSchema,
|
|
3200
3044
|
roleTitle: import_zod12.z.string(),
|
|
3201
|
-
createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(
|
|
3202
|
-
updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(
|
|
3045
|
+
createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
|
|
3046
|
+
updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
|
|
3203
3047
|
isActive: import_zod12.z.boolean()
|
|
3204
3048
|
});
|
|
3205
3049
|
var adminTokenSchema = import_zod12.z.object({
|
|
@@ -3208,9 +3052,9 @@ var adminTokenSchema = import_zod12.z.object({
|
|
|
3208
3052
|
email: import_zod12.z.string().email().optional().nullable(),
|
|
3209
3053
|
status: import_zod12.z.nativeEnum(AdminTokenStatus),
|
|
3210
3054
|
usedByUserRef: import_zod12.z.string().optional(),
|
|
3211
|
-
createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(
|
|
3055
|
+
createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
|
|
3212
3056
|
// Timestamp
|
|
3213
|
-
expiresAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(
|
|
3057
|
+
expiresAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp))
|
|
3214
3058
|
// Timestamp
|
|
3215
3059
|
});
|
|
3216
3060
|
var createAdminTokenSchema = import_zod12.z.object({
|
|
@@ -3230,9 +3074,9 @@ var clinicGroupSchema = import_zod12.z.object({
|
|
|
3230
3074
|
adminsInfo: import_zod12.z.array(adminInfoSchema),
|
|
3231
3075
|
adminTokens: import_zod12.z.array(adminTokenSchema),
|
|
3232
3076
|
ownerId: import_zod12.z.string().nullable(),
|
|
3233
|
-
createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(
|
|
3077
|
+
createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
|
|
3234
3078
|
// Timestamp
|
|
3235
|
-
updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(
|
|
3079
|
+
updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
|
|
3236
3080
|
// Timestamp
|
|
3237
3081
|
isActive: import_zod12.z.boolean(),
|
|
3238
3082
|
logo: import_zod12.z.string().optional().nullable(),
|
|
@@ -3272,9 +3116,9 @@ var clinicSchema = import_zod12.z.object({
|
|
|
3272
3116
|
// servicesInfo: z.array(serviceInfoSchema), // Deprecated, use proceduresInfo
|
|
3273
3117
|
reviewInfo: clinicReviewInfoSchema,
|
|
3274
3118
|
admins: import_zod12.z.array(import_zod12.z.string()),
|
|
3275
|
-
createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(
|
|
3119
|
+
createdAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
|
|
3276
3120
|
// Timestamp
|
|
3277
|
-
updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(
|
|
3121
|
+
updatedAt: import_zod12.z.instanceof(Date).or(import_zod12.z.instanceof(import_firestore12.Timestamp)),
|
|
3278
3122
|
// Timestamp
|
|
3279
3123
|
isActive: import_zod12.z.boolean(),
|
|
3280
3124
|
isVerified: import_zod12.z.boolean(),
|
|
@@ -3464,7 +3308,7 @@ async function createClinicAdmin(db, data, clinicGroupService) {
|
|
|
3464
3308
|
}
|
|
3465
3309
|
console.log("[CLINIC_ADMIN] Preparing admin data object");
|
|
3466
3310
|
const adminData = {
|
|
3467
|
-
id: (0,
|
|
3311
|
+
id: (0, import_firestore13.doc)((0, import_firestore13.collection)(db, CLINIC_ADMINS_COLLECTION)).id,
|
|
3468
3312
|
// Generate a new ID for the admin document
|
|
3469
3313
|
userRef: validatedData.userRef,
|
|
3470
3314
|
clinicGroupId: clinicGroupId || "",
|
|
@@ -3477,15 +3321,15 @@ async function createClinicAdmin(db, data, clinicGroupService) {
|
|
|
3477
3321
|
contactInfo: validatedData.contactInfo,
|
|
3478
3322
|
roleTitle: validatedData.roleTitle,
|
|
3479
3323
|
isActive: validatedData.isActive,
|
|
3480
|
-
createdAt: (0,
|
|
3481
|
-
updatedAt: (0,
|
|
3324
|
+
createdAt: (0, import_firestore13.serverTimestamp)(),
|
|
3325
|
+
updatedAt: (0, import_firestore13.serverTimestamp)()
|
|
3482
3326
|
};
|
|
3483
3327
|
console.log("[CLINIC_ADMIN] Validating complete admin object");
|
|
3484
3328
|
try {
|
|
3485
3329
|
clinicAdminSchema.parse({
|
|
3486
3330
|
...adminData,
|
|
3487
|
-
createdAt:
|
|
3488
|
-
updatedAt:
|
|
3331
|
+
createdAt: import_firestore13.Timestamp.now(),
|
|
3332
|
+
updatedAt: import_firestore13.Timestamp.now()
|
|
3489
3333
|
});
|
|
3490
3334
|
console.log("[CLINIC_ADMIN] Admin object validation passed");
|
|
3491
3335
|
} catch (schemaError) {
|
|
@@ -3499,7 +3343,7 @@ async function createClinicAdmin(db, data, clinicGroupService) {
|
|
|
3499
3343
|
adminId: adminData.id
|
|
3500
3344
|
});
|
|
3501
3345
|
try {
|
|
3502
|
-
await (0,
|
|
3346
|
+
await (0, import_firestore13.setDoc)((0, import_firestore13.doc)(db, CLINIC_ADMINS_COLLECTION, adminData.id), adminData);
|
|
3503
3347
|
console.log("[CLINIC_ADMIN] Admin saved successfully");
|
|
3504
3348
|
} catch (firestoreError) {
|
|
3505
3349
|
console.error(
|
|
@@ -3548,30 +3392,30 @@ async function checkClinicGroupExists(db, groupId, clinicGroupService) {
|
|
|
3548
3392
|
return !!group;
|
|
3549
3393
|
}
|
|
3550
3394
|
async function getClinicAdmin(db, adminId) {
|
|
3551
|
-
const docRef = (0,
|
|
3552
|
-
const docSnap = await (0,
|
|
3395
|
+
const docRef = (0, import_firestore13.doc)(db, CLINIC_ADMINS_COLLECTION, adminId);
|
|
3396
|
+
const docSnap = await (0, import_firestore13.getDoc)(docRef);
|
|
3553
3397
|
if (docSnap.exists()) {
|
|
3554
3398
|
return docSnap.data();
|
|
3555
3399
|
}
|
|
3556
3400
|
return null;
|
|
3557
3401
|
}
|
|
3558
3402
|
async function getClinicAdminByUserRef(db, userRef) {
|
|
3559
|
-
const q = (0,
|
|
3560
|
-
(0,
|
|
3561
|
-
(0,
|
|
3403
|
+
const q = (0, import_firestore13.query)(
|
|
3404
|
+
(0, import_firestore13.collection)(db, CLINIC_ADMINS_COLLECTION),
|
|
3405
|
+
(0, import_firestore13.where)("userRef", "==", userRef)
|
|
3562
3406
|
);
|
|
3563
|
-
const querySnapshot = await (0,
|
|
3407
|
+
const querySnapshot = await (0, import_firestore13.getDocs)(q);
|
|
3564
3408
|
if (querySnapshot.empty) {
|
|
3565
3409
|
return null;
|
|
3566
3410
|
}
|
|
3567
3411
|
return querySnapshot.docs[0].data();
|
|
3568
3412
|
}
|
|
3569
3413
|
async function getClinicAdminsByGroup(db, clinicGroupId) {
|
|
3570
|
-
const q = (0,
|
|
3571
|
-
(0,
|
|
3572
|
-
(0,
|
|
3414
|
+
const q = (0, import_firestore13.query)(
|
|
3415
|
+
(0, import_firestore13.collection)(db, CLINIC_ADMINS_COLLECTION),
|
|
3416
|
+
(0, import_firestore13.where)("clinicGroupId", "==", clinicGroupId)
|
|
3573
3417
|
);
|
|
3574
|
-
const querySnapshot = await (0,
|
|
3418
|
+
const querySnapshot = await (0, import_firestore13.getDocs)(q);
|
|
3575
3419
|
return querySnapshot.docs.map((doc32) => doc32.data());
|
|
3576
3420
|
}
|
|
3577
3421
|
async function updateClinicAdmin(db, adminId, data) {
|
|
@@ -3581,9 +3425,9 @@ async function updateClinicAdmin(db, adminId, data) {
|
|
|
3581
3425
|
}
|
|
3582
3426
|
const updatedData = {
|
|
3583
3427
|
...data,
|
|
3584
|
-
updatedAt: (0,
|
|
3428
|
+
updatedAt: (0, import_firestore13.serverTimestamp)()
|
|
3585
3429
|
};
|
|
3586
|
-
await (0,
|
|
3430
|
+
await (0, import_firestore13.updateDoc)((0, import_firestore13.doc)(db, CLINIC_ADMINS_COLLECTION, adminId), updatedData);
|
|
3587
3431
|
const updatedAdmin = await getClinicAdmin(db, adminId);
|
|
3588
3432
|
if (!updatedAdmin) {
|
|
3589
3433
|
throw new Error("Failed to retrieve updated admin");
|
|
@@ -3595,7 +3439,7 @@ async function deleteClinicAdmin(db, adminId) {
|
|
|
3595
3439
|
if (!admin) {
|
|
3596
3440
|
throw new Error("Clinic admin not found");
|
|
3597
3441
|
}
|
|
3598
|
-
await (0,
|
|
3442
|
+
await (0, import_firestore13.deleteDoc)((0, import_firestore13.doc)(db, CLINIC_ADMINS_COLLECTION, adminId));
|
|
3599
3443
|
}
|
|
3600
3444
|
async function addClinicToManaged(db, adminId, clinicId, requesterId, clinicService) {
|
|
3601
3445
|
const admin = await getClinicAdmin(db, adminId);
|
|
@@ -3837,7 +3681,182 @@ var ClinicAdminService = class extends BaseService {
|
|
|
3837
3681
|
|
|
3838
3682
|
// src/services/practitioner/practitioner.service.ts
|
|
3839
3683
|
var import_firestore15 = require("firebase/firestore");
|
|
3684
|
+
|
|
3685
|
+
// src/types/practitioner/index.ts
|
|
3686
|
+
var PRACTITIONERS_COLLECTION = "practitioners";
|
|
3687
|
+
var REGISTER_TOKENS_COLLECTION = "register_tokens";
|
|
3688
|
+
var PractitionerStatus = /* @__PURE__ */ ((PractitionerStatus2) => {
|
|
3689
|
+
PractitionerStatus2["DRAFT"] = "draft";
|
|
3690
|
+
PractitionerStatus2["ACTIVE"] = "active";
|
|
3691
|
+
return PractitionerStatus2;
|
|
3692
|
+
})(PractitionerStatus || {});
|
|
3693
|
+
var PractitionerTokenStatus = /* @__PURE__ */ ((PractitionerTokenStatus2) => {
|
|
3694
|
+
PractitionerTokenStatus2["ACTIVE"] = "active";
|
|
3695
|
+
PractitionerTokenStatus2["USED"] = "used";
|
|
3696
|
+
PractitionerTokenStatus2["EXPIRED"] = "expired";
|
|
3697
|
+
PractitionerTokenStatus2["REVOKED"] = "revoked";
|
|
3698
|
+
return PractitionerTokenStatus2;
|
|
3699
|
+
})(PractitionerTokenStatus || {});
|
|
3700
|
+
|
|
3701
|
+
// src/validations/practitioner.schema.ts
|
|
3840
3702
|
var import_zod13 = require("zod");
|
|
3703
|
+
var import_firestore14 = require("firebase/firestore");
|
|
3704
|
+
|
|
3705
|
+
// src/backoffice/types/static/certification.types.ts
|
|
3706
|
+
var CertificationLevel = /* @__PURE__ */ ((CertificationLevel2) => {
|
|
3707
|
+
CertificationLevel2["AESTHETICIAN"] = "aesthetician";
|
|
3708
|
+
CertificationLevel2["NURSE_ASSISTANT"] = "nurse_assistant";
|
|
3709
|
+
CertificationLevel2["NURSE"] = "nurse";
|
|
3710
|
+
CertificationLevel2["NURSE_PRACTITIONER"] = "nurse_practitioner";
|
|
3711
|
+
CertificationLevel2["PHYSICIAN_ASSISTANT"] = "physician_assistant";
|
|
3712
|
+
CertificationLevel2["DOCTOR"] = "doctor";
|
|
3713
|
+
CertificationLevel2["SPECIALIST"] = "specialist";
|
|
3714
|
+
CertificationLevel2["PLASTIC_SURGEON"] = "plastic_surgeon";
|
|
3715
|
+
return CertificationLevel2;
|
|
3716
|
+
})(CertificationLevel || {});
|
|
3717
|
+
var CertificationSpecialty = /* @__PURE__ */ ((CertificationSpecialty3) => {
|
|
3718
|
+
CertificationSpecialty3["LASER"] = "laser";
|
|
3719
|
+
CertificationSpecialty3["INJECTABLES"] = "injectables";
|
|
3720
|
+
CertificationSpecialty3["CHEMICAL_PEELS"] = "chemical_peels";
|
|
3721
|
+
CertificationSpecialty3["MICRODERMABRASION"] = "microdermabrasion";
|
|
3722
|
+
CertificationSpecialty3["BODY_CONTOURING"] = "body_contouring";
|
|
3723
|
+
CertificationSpecialty3["SKIN_CARE"] = "skin_care";
|
|
3724
|
+
CertificationSpecialty3["WOUND_CARE"] = "wound_care";
|
|
3725
|
+
CertificationSpecialty3["ANESTHESIA"] = "anesthesia";
|
|
3726
|
+
return CertificationSpecialty3;
|
|
3727
|
+
})(CertificationSpecialty || {});
|
|
3728
|
+
|
|
3729
|
+
// src/validations/practitioner.schema.ts
|
|
3730
|
+
var practitionerBasicInfoSchema = import_zod13.z.object({
|
|
3731
|
+
firstName: import_zod13.z.string().min(2).max(50),
|
|
3732
|
+
lastName: import_zod13.z.string().min(2).max(50),
|
|
3733
|
+
title: import_zod13.z.string().min(2).max(100),
|
|
3734
|
+
email: import_zod13.z.string().email(),
|
|
3735
|
+
phoneNumber: import_zod13.z.string().regex(/^\+?[1-9]\d{1,14}$/, "Invalid phone number"),
|
|
3736
|
+
dateOfBirth: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
|
|
3737
|
+
gender: import_zod13.z.enum(["male", "female", "other"]),
|
|
3738
|
+
profileImageUrl: import_zod13.z.string().url().optional(),
|
|
3739
|
+
bio: import_zod13.z.string().max(1e3).optional(),
|
|
3740
|
+
languages: import_zod13.z.array(import_zod13.z.string()).min(1)
|
|
3741
|
+
});
|
|
3742
|
+
var practitionerCertificationSchema = import_zod13.z.object({
|
|
3743
|
+
level: import_zod13.z.nativeEnum(CertificationLevel),
|
|
3744
|
+
specialties: import_zod13.z.array(import_zod13.z.nativeEnum(CertificationSpecialty)),
|
|
3745
|
+
licenseNumber: import_zod13.z.string().min(3).max(50),
|
|
3746
|
+
issuingAuthority: import_zod13.z.string().min(2).max(100),
|
|
3747
|
+
issueDate: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
|
|
3748
|
+
expiryDate: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()).optional(),
|
|
3749
|
+
verificationStatus: import_zod13.z.enum(["pending", "verified", "rejected"])
|
|
3750
|
+
});
|
|
3751
|
+
var timeSlotSchema = import_zod13.z.object({
|
|
3752
|
+
start: import_zod13.z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format"),
|
|
3753
|
+
end: import_zod13.z.string().regex(/^([01]\d|2[0-3]):([0-5]\d)$/, "Invalid time format")
|
|
3754
|
+
}).nullable();
|
|
3755
|
+
var practitionerWorkingHoursSchema = import_zod13.z.object({
|
|
3756
|
+
practitionerId: import_zod13.z.string().min(1),
|
|
3757
|
+
clinicId: import_zod13.z.string().min(1),
|
|
3758
|
+
monday: timeSlotSchema,
|
|
3759
|
+
tuesday: timeSlotSchema,
|
|
3760
|
+
wednesday: timeSlotSchema,
|
|
3761
|
+
thursday: timeSlotSchema,
|
|
3762
|
+
friday: timeSlotSchema,
|
|
3763
|
+
saturday: timeSlotSchema,
|
|
3764
|
+
sunday: timeSlotSchema,
|
|
3765
|
+
createdAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
|
|
3766
|
+
updatedAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date())
|
|
3767
|
+
});
|
|
3768
|
+
var practitionerClinicWorkingHoursSchema = import_zod13.z.object({
|
|
3769
|
+
clinicId: import_zod13.z.string().min(1),
|
|
3770
|
+
workingHours: import_zod13.z.object({
|
|
3771
|
+
monday: timeSlotSchema,
|
|
3772
|
+
tuesday: timeSlotSchema,
|
|
3773
|
+
wednesday: timeSlotSchema,
|
|
3774
|
+
thursday: timeSlotSchema,
|
|
3775
|
+
friday: timeSlotSchema,
|
|
3776
|
+
saturday: timeSlotSchema,
|
|
3777
|
+
sunday: timeSlotSchema
|
|
3778
|
+
}),
|
|
3779
|
+
isActive: import_zod13.z.boolean(),
|
|
3780
|
+
createdAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
|
|
3781
|
+
updatedAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date())
|
|
3782
|
+
});
|
|
3783
|
+
var practitionerSchema = import_zod13.z.object({
|
|
3784
|
+
id: import_zod13.z.string().min(1),
|
|
3785
|
+
userRef: import_zod13.z.string().min(1),
|
|
3786
|
+
basicInfo: practitionerBasicInfoSchema,
|
|
3787
|
+
certification: practitionerCertificationSchema,
|
|
3788
|
+
clinics: import_zod13.z.array(import_zod13.z.string()),
|
|
3789
|
+
clinicWorkingHours: import_zod13.z.array(practitionerClinicWorkingHoursSchema),
|
|
3790
|
+
clinicsInfo: import_zod13.z.array(clinicInfoSchema),
|
|
3791
|
+
procedures: import_zod13.z.array(import_zod13.z.string()),
|
|
3792
|
+
proceduresInfo: import_zod13.z.array(procedureSummaryInfoSchema),
|
|
3793
|
+
reviewInfo: practitionerReviewInfoSchema,
|
|
3794
|
+
isActive: import_zod13.z.boolean(),
|
|
3795
|
+
isVerified: import_zod13.z.boolean(),
|
|
3796
|
+
status: import_zod13.z.nativeEnum(PractitionerStatus),
|
|
3797
|
+
createdAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
|
|
3798
|
+
updatedAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date())
|
|
3799
|
+
});
|
|
3800
|
+
var createPractitionerSchema = import_zod13.z.object({
|
|
3801
|
+
userRef: import_zod13.z.string().min(1),
|
|
3802
|
+
basicInfo: practitionerBasicInfoSchema,
|
|
3803
|
+
certification: practitionerCertificationSchema,
|
|
3804
|
+
clinics: import_zod13.z.array(import_zod13.z.string()).optional(),
|
|
3805
|
+
clinicWorkingHours: import_zod13.z.array(practitionerClinicWorkingHoursSchema).optional(),
|
|
3806
|
+
clinicsInfo: import_zod13.z.array(clinicInfoSchema).optional(),
|
|
3807
|
+
proceduresInfo: import_zod13.z.array(procedureSummaryInfoSchema).optional(),
|
|
3808
|
+
isActive: import_zod13.z.boolean(),
|
|
3809
|
+
isVerified: import_zod13.z.boolean(),
|
|
3810
|
+
status: import_zod13.z.nativeEnum(PractitionerStatus).optional()
|
|
3811
|
+
});
|
|
3812
|
+
var createDraftPractitionerSchema = import_zod13.z.object({
|
|
3813
|
+
basicInfo: practitionerBasicInfoSchema,
|
|
3814
|
+
certification: practitionerCertificationSchema,
|
|
3815
|
+
clinics: import_zod13.z.array(import_zod13.z.string()).optional(),
|
|
3816
|
+
clinicWorkingHours: import_zod13.z.array(practitionerClinicWorkingHoursSchema).optional(),
|
|
3817
|
+
clinicsInfo: import_zod13.z.array(clinicInfoSchema).optional(),
|
|
3818
|
+
proceduresInfo: import_zod13.z.array(procedureSummaryInfoSchema).optional(),
|
|
3819
|
+
isActive: import_zod13.z.boolean().optional().default(false),
|
|
3820
|
+
isVerified: import_zod13.z.boolean().optional().default(false)
|
|
3821
|
+
});
|
|
3822
|
+
var practitionerTokenSchema = import_zod13.z.object({
|
|
3823
|
+
id: import_zod13.z.string().min(1),
|
|
3824
|
+
token: import_zod13.z.string().min(6),
|
|
3825
|
+
practitionerId: import_zod13.z.string().min(1),
|
|
3826
|
+
email: import_zod13.z.string().email(),
|
|
3827
|
+
clinicId: import_zod13.z.string().min(1),
|
|
3828
|
+
status: import_zod13.z.nativeEnum(PractitionerTokenStatus),
|
|
3829
|
+
createdBy: import_zod13.z.string().min(1),
|
|
3830
|
+
createdAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
|
|
3831
|
+
expiresAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()),
|
|
3832
|
+
usedBy: import_zod13.z.string().optional(),
|
|
3833
|
+
usedAt: import_zod13.z.instanceof(import_firestore14.Timestamp).or(import_zod13.z.date()).optional()
|
|
3834
|
+
});
|
|
3835
|
+
var createPractitionerTokenSchema = import_zod13.z.object({
|
|
3836
|
+
practitionerId: import_zod13.z.string().min(1),
|
|
3837
|
+
email: import_zod13.z.string().email(),
|
|
3838
|
+
clinicId: import_zod13.z.string().min(1),
|
|
3839
|
+
expiresAt: import_zod13.z.date().optional()
|
|
3840
|
+
});
|
|
3841
|
+
var practitionerSignupSchema = import_zod13.z.object({
|
|
3842
|
+
email: import_zod13.z.string().email(),
|
|
3843
|
+
password: import_zod13.z.string().min(8),
|
|
3844
|
+
firstName: import_zod13.z.string().min(2).max(50),
|
|
3845
|
+
lastName: import_zod13.z.string().min(2).max(50),
|
|
3846
|
+
token: import_zod13.z.string().optional(),
|
|
3847
|
+
profileData: import_zod13.z.object({
|
|
3848
|
+
basicInfo: import_zod13.z.object({
|
|
3849
|
+
phoneNumber: import_zod13.z.string().optional(),
|
|
3850
|
+
profileImageUrl: import_zod13.z.string().optional(),
|
|
3851
|
+
gender: import_zod13.z.enum(["male", "female", "other"]).optional(),
|
|
3852
|
+
bio: import_zod13.z.string().optional()
|
|
3853
|
+
}).optional(),
|
|
3854
|
+
certification: import_zod13.z.any().optional()
|
|
3855
|
+
}).optional()
|
|
3856
|
+
});
|
|
3857
|
+
|
|
3858
|
+
// src/services/practitioner/practitioner.service.ts
|
|
3859
|
+
var import_zod14 = require("zod");
|
|
3841
3860
|
var import_geofire_common2 = require("geofire-common");
|
|
3842
3861
|
var PractitionerService = class extends BaseService {
|
|
3843
3862
|
constructor(db, auth, app, clinicService) {
|
|
@@ -3906,7 +3925,7 @@ var PractitionerService = class extends BaseService {
|
|
|
3906
3925
|
}
|
|
3907
3926
|
return createdPractitioner;
|
|
3908
3927
|
} catch (error) {
|
|
3909
|
-
if (error instanceof
|
|
3928
|
+
if (error instanceof import_zod14.z.ZodError) {
|
|
3910
3929
|
throw new Error(`Invalid practitioner data: ${error.message}`);
|
|
3911
3930
|
}
|
|
3912
3931
|
console.error("Error creating practitioner:", error);
|
|
@@ -3961,7 +3980,8 @@ var PractitionerService = class extends BaseService {
|
|
|
3961
3980
|
name: clinicData.name,
|
|
3962
3981
|
location: clinicData.location,
|
|
3963
3982
|
contactInfo: clinicData.contactInfo,
|
|
3964
|
-
|
|
3983
|
+
// Make sure we're using the right property for featuredPhoto
|
|
3984
|
+
featuredPhoto: clinicData.featuredPhotos && clinicData.featuredPhotos.length > 0 ? clinicData.featuredPhotos[0] : clinicData.coverPhoto || "",
|
|
3965
3985
|
description: clinicData.description || null
|
|
3966
3986
|
});
|
|
3967
3987
|
}
|
|
@@ -4018,7 +4038,7 @@ var PractitionerService = class extends BaseService {
|
|
|
4018
4038
|
await (0, import_firestore15.setDoc)((0, import_firestore15.doc)(this.db, tokenPath), token);
|
|
4019
4039
|
return { practitioner: savedPractitioner, token };
|
|
4020
4040
|
} catch (error) {
|
|
4021
|
-
if (error instanceof
|
|
4041
|
+
if (error instanceof import_zod14.z.ZodError) {
|
|
4022
4042
|
throw new Error("Invalid practitioner data: " + error.message);
|
|
4023
4043
|
}
|
|
4024
4044
|
throw error;
|
|
@@ -4071,7 +4091,7 @@ var PractitionerService = class extends BaseService {
|
|
|
4071
4091
|
await (0, import_firestore15.setDoc)((0, import_firestore15.doc)(this.db, tokenPath), token);
|
|
4072
4092
|
return token;
|
|
4073
4093
|
} catch (error) {
|
|
4074
|
-
if (error instanceof
|
|
4094
|
+
if (error instanceof import_zod14.z.ZodError) {
|
|
4075
4095
|
throw new Error("Invalid token data: " + error.message);
|
|
4076
4096
|
}
|
|
4077
4097
|
throw error;
|
|
@@ -4231,7 +4251,7 @@ var PractitionerService = class extends BaseService {
|
|
|
4231
4251
|
}
|
|
4232
4252
|
return updatedPractitioner;
|
|
4233
4253
|
} catch (error) {
|
|
4234
|
-
if (error instanceof
|
|
4254
|
+
if (error instanceof import_zod14.z.ZodError) {
|
|
4235
4255
|
throw new Error(`Invalid practitioner update data: ${error.message}`);
|
|
4236
4256
|
}
|
|
4237
4257
|
console.error(`Error updating practitioner ${practitionerId}:`, error);
|
|
@@ -4759,7 +4779,7 @@ var UserService = class extends BaseService {
|
|
|
4759
4779
|
});
|
|
4760
4780
|
return this.getUserById(uid);
|
|
4761
4781
|
} catch (error) {
|
|
4762
|
-
if (error instanceof
|
|
4782
|
+
if (error instanceof import_zod15.z.ZodError) {
|
|
4763
4783
|
throw USER_ERRORS.VALIDATION_ERROR;
|
|
4764
4784
|
}
|
|
4765
4785
|
throw error;
|
|
@@ -4846,7 +4866,7 @@ var UserService = class extends BaseService {
|
|
|
4846
4866
|
// src/services/clinic/utils/clinic-group.utils.ts
|
|
4847
4867
|
var import_firestore17 = require("firebase/firestore");
|
|
4848
4868
|
var import_geofire_common3 = require("geofire-common");
|
|
4849
|
-
var
|
|
4869
|
+
var import_zod16 = require("zod");
|
|
4850
4870
|
|
|
4851
4871
|
// src/services/clinic/utils/photos.utils.ts
|
|
4852
4872
|
var import_storage3 = require("firebase/storage");
|
|
@@ -5044,7 +5064,7 @@ async function createClinicGroup(db, data, ownerId, isDefault = false, clinicAdm
|
|
|
5044
5064
|
});
|
|
5045
5065
|
return groupData;
|
|
5046
5066
|
} catch (error) {
|
|
5047
|
-
if (error instanceof
|
|
5067
|
+
if (error instanceof import_zod16.z.ZodError) {
|
|
5048
5068
|
console.error(
|
|
5049
5069
|
"[CLINIC_GROUP] Zod validation error:",
|
|
5050
5070
|
JSON.stringify(error.errors, null, 2)
|
|
@@ -5449,12 +5469,12 @@ var ClinicGroupService = class extends BaseService {
|
|
|
5449
5469
|
// src/services/clinic/clinic.service.ts
|
|
5450
5470
|
var import_firestore21 = require("firebase/firestore");
|
|
5451
5471
|
var import_geofire_common7 = require("geofire-common");
|
|
5452
|
-
var
|
|
5472
|
+
var import_zod18 = require("zod");
|
|
5453
5473
|
|
|
5454
5474
|
// src/services/clinic/utils/clinic.utils.ts
|
|
5455
5475
|
var import_firestore18 = require("firebase/firestore");
|
|
5456
5476
|
var import_geofire_common4 = require("geofire-common");
|
|
5457
|
-
var
|
|
5477
|
+
var import_zod17 = require("zod");
|
|
5458
5478
|
async function getClinic(db, clinicId) {
|
|
5459
5479
|
const docRef = (0, import_firestore18.doc)(db, CLINICS_COLLECTION, clinicId);
|
|
5460
5480
|
const docSnap = await (0, import_firestore18.getDoc)(docRef);
|
|
@@ -6126,7 +6146,7 @@ var ClinicService = class extends BaseService {
|
|
|
6126
6146
|
if (!savedClinic) throw new Error("Failed to retrieve created clinic");
|
|
6127
6147
|
return savedClinic;
|
|
6128
6148
|
} catch (error) {
|
|
6129
|
-
if (error instanceof
|
|
6149
|
+
if (error instanceof import_zod18.z.ZodError) {
|
|
6130
6150
|
throw new Error("Invalid clinic data: " + error.message);
|
|
6131
6151
|
}
|
|
6132
6152
|
console.error("Error creating clinic:", error);
|
|
@@ -6174,7 +6194,7 @@ var ClinicService = class extends BaseService {
|
|
|
6174
6194
|
if (!updatedClinic) throw new Error("Failed to retrieve updated clinic");
|
|
6175
6195
|
return updatedClinic;
|
|
6176
6196
|
} catch (error) {
|
|
6177
|
-
if (error instanceof
|
|
6197
|
+
if (error instanceof import_zod18.z.ZodError) {
|
|
6178
6198
|
throw new Error(
|
|
6179
6199
|
"Invalid clinic update data: " + error.errors.map((e) => `${e.path.join(".")} - ${e.message}`).join(", ")
|
|
6180
6200
|
);
|
|
@@ -6633,7 +6653,7 @@ var AuthService = class extends BaseService {
|
|
|
6633
6653
|
clinicAdmin: adminProfile
|
|
6634
6654
|
};
|
|
6635
6655
|
} catch (error) {
|
|
6636
|
-
if (error instanceof
|
|
6656
|
+
if (error instanceof import_zod19.z.ZodError) {
|
|
6637
6657
|
console.error(
|
|
6638
6658
|
"[AUTH] Zod validation error in signUpClinicAdmin:",
|
|
6639
6659
|
JSON.stringify(error.errors, null, 2)
|
|
@@ -6806,7 +6826,7 @@ var AuthService = class extends BaseService {
|
|
|
6806
6826
|
email
|
|
6807
6827
|
);
|
|
6808
6828
|
} catch (error) {
|
|
6809
|
-
if (error instanceof
|
|
6829
|
+
if (error instanceof import_zod19.z.ZodError) {
|
|
6810
6830
|
throw AUTH_ERRORS.VALIDATION_ERROR;
|
|
6811
6831
|
}
|
|
6812
6832
|
const firebaseError = error;
|
|
@@ -6929,7 +6949,7 @@ var AuthService = class extends BaseService {
|
|
|
6929
6949
|
await emailSchema.parseAsync(email);
|
|
6930
6950
|
await (0, import_auth5.sendPasswordResetEmail)(this.auth, email);
|
|
6931
6951
|
} catch (error) {
|
|
6932
|
-
if (error instanceof
|
|
6952
|
+
if (error instanceof import_zod19.z.ZodError) {
|
|
6933
6953
|
throw AUTH_ERRORS.VALIDATION_ERROR;
|
|
6934
6954
|
}
|
|
6935
6955
|
const firebaseError = error;
|
|
@@ -6968,7 +6988,7 @@ var AuthService = class extends BaseService {
|
|
|
6968
6988
|
await passwordSchema.parseAsync(newPassword);
|
|
6969
6989
|
await (0, import_auth5.confirmPasswordReset)(this.auth, oobCode, newPassword);
|
|
6970
6990
|
} catch (error) {
|
|
6971
|
-
if (error instanceof
|
|
6991
|
+
if (error instanceof import_zod19.z.ZodError) {
|
|
6972
6992
|
throw AUTH_ERRORS.VALIDATION_ERROR;
|
|
6973
6993
|
}
|
|
6974
6994
|
const firebaseError = error;
|
|
@@ -7137,7 +7157,7 @@ var AuthService = class extends BaseService {
|
|
|
7137
7157
|
practitioner
|
|
7138
7158
|
};
|
|
7139
7159
|
} catch (error) {
|
|
7140
|
-
if (error instanceof
|
|
7160
|
+
if (error instanceof import_zod19.z.ZodError) {
|
|
7141
7161
|
console.error(
|
|
7142
7162
|
"[AUTH] Zod validation error in signUpPractitioner:",
|
|
7143
7163
|
JSON.stringify(error.errors, null, 2)
|
|
@@ -7402,59 +7422,59 @@ var import_firestore24 = require("firebase/firestore");
|
|
|
7402
7422
|
var PROCEDURES_COLLECTION = "procedures";
|
|
7403
7423
|
|
|
7404
7424
|
// src/validations/procedure.schema.ts
|
|
7405
|
-
var
|
|
7406
|
-
var createProcedureSchema =
|
|
7407
|
-
name:
|
|
7408
|
-
description:
|
|
7409
|
-
family:
|
|
7410
|
-
categoryId:
|
|
7411
|
-
subcategoryId:
|
|
7412
|
-
technologyId:
|
|
7413
|
-
productId:
|
|
7414
|
-
price:
|
|
7415
|
-
currency:
|
|
7416
|
-
pricingMeasure:
|
|
7417
|
-
duration:
|
|
7425
|
+
var import_zod20 = require("zod");
|
|
7426
|
+
var createProcedureSchema = import_zod20.z.object({
|
|
7427
|
+
name: import_zod20.z.string().min(1).max(200),
|
|
7428
|
+
description: import_zod20.z.string().min(1).max(2e3),
|
|
7429
|
+
family: import_zod20.z.nativeEnum(ProcedureFamily),
|
|
7430
|
+
categoryId: import_zod20.z.string().min(1),
|
|
7431
|
+
subcategoryId: import_zod20.z.string().min(1),
|
|
7432
|
+
technologyId: import_zod20.z.string().min(1),
|
|
7433
|
+
productId: import_zod20.z.string().min(1),
|
|
7434
|
+
price: import_zod20.z.number().min(0),
|
|
7435
|
+
currency: import_zod20.z.nativeEnum(Currency),
|
|
7436
|
+
pricingMeasure: import_zod20.z.nativeEnum(PricingMeasure),
|
|
7437
|
+
duration: import_zod20.z.number().min(1).max(480),
|
|
7418
7438
|
// Max 8 hours
|
|
7419
|
-
practitionerId:
|
|
7420
|
-
clinicBranchId:
|
|
7439
|
+
practitionerId: import_zod20.z.string().min(1),
|
|
7440
|
+
clinicBranchId: import_zod20.z.string().min(1)
|
|
7421
7441
|
});
|
|
7422
|
-
var updateProcedureSchema =
|
|
7423
|
-
name:
|
|
7424
|
-
description:
|
|
7425
|
-
price:
|
|
7426
|
-
currency:
|
|
7427
|
-
pricingMeasure:
|
|
7428
|
-
duration:
|
|
7429
|
-
isActive:
|
|
7430
|
-
practitionerId:
|
|
7431
|
-
categoryId:
|
|
7432
|
-
subcategoryId:
|
|
7433
|
-
technologyId:
|
|
7434
|
-
productId:
|
|
7435
|
-
clinicBranchId:
|
|
7442
|
+
var updateProcedureSchema = import_zod20.z.object({
|
|
7443
|
+
name: import_zod20.z.string().min(3).max(100).optional(),
|
|
7444
|
+
description: import_zod20.z.string().min(3).max(1e3).optional(),
|
|
7445
|
+
price: import_zod20.z.number().min(0).optional(),
|
|
7446
|
+
currency: import_zod20.z.nativeEnum(Currency).optional(),
|
|
7447
|
+
pricingMeasure: import_zod20.z.nativeEnum(PricingMeasure).optional(),
|
|
7448
|
+
duration: import_zod20.z.number().min(0).optional(),
|
|
7449
|
+
isActive: import_zod20.z.boolean().optional(),
|
|
7450
|
+
practitionerId: import_zod20.z.string().optional(),
|
|
7451
|
+
categoryId: import_zod20.z.string().optional(),
|
|
7452
|
+
subcategoryId: import_zod20.z.string().optional(),
|
|
7453
|
+
technologyId: import_zod20.z.string().optional(),
|
|
7454
|
+
productId: import_zod20.z.string().optional(),
|
|
7455
|
+
clinicBranchId: import_zod20.z.string().optional()
|
|
7436
7456
|
});
|
|
7437
7457
|
var procedureSchema = createProcedureSchema.extend({
|
|
7438
|
-
id:
|
|
7439
|
-
category:
|
|
7458
|
+
id: import_zod20.z.string().min(1),
|
|
7459
|
+
category: import_zod20.z.any(),
|
|
7440
7460
|
// We'll validate the full category object separately
|
|
7441
|
-
subcategory:
|
|
7461
|
+
subcategory: import_zod20.z.any(),
|
|
7442
7462
|
// We'll validate the full subcategory object separately
|
|
7443
|
-
technology:
|
|
7463
|
+
technology: import_zod20.z.any(),
|
|
7444
7464
|
// We'll validate the full technology object separately
|
|
7445
|
-
product:
|
|
7465
|
+
product: import_zod20.z.any(),
|
|
7446
7466
|
// We'll validate the full product object separately
|
|
7447
|
-
blockingConditions:
|
|
7467
|
+
blockingConditions: import_zod20.z.array(import_zod20.z.any()),
|
|
7448
7468
|
// We'll validate blocking conditions separately
|
|
7449
|
-
treatmentBenefits:
|
|
7469
|
+
treatmentBenefits: import_zod20.z.array(import_zod20.z.any()),
|
|
7450
7470
|
// We'll validate treatment benefits separately
|
|
7451
|
-
preRequirements:
|
|
7471
|
+
preRequirements: import_zod20.z.array(import_zod20.z.any()),
|
|
7452
7472
|
// We'll validate requirements separately
|
|
7453
|
-
postRequirements:
|
|
7473
|
+
postRequirements: import_zod20.z.array(import_zod20.z.any()),
|
|
7454
7474
|
// We'll validate requirements separately
|
|
7455
|
-
certificationRequirement:
|
|
7475
|
+
certificationRequirement: import_zod20.z.any(),
|
|
7456
7476
|
// We'll validate certification requirement separately
|
|
7457
|
-
documentationTemplates:
|
|
7477
|
+
documentationTemplates: import_zod20.z.array(import_zod20.z.any()),
|
|
7458
7478
|
// We'll validate documentation templates separately
|
|
7459
7479
|
clinicInfo: clinicInfoSchema,
|
|
7460
7480
|
// Clinic info validation
|
|
@@ -7462,9 +7482,9 @@ var procedureSchema = createProcedureSchema.extend({
|
|
|
7462
7482
|
// Doctor info validation
|
|
7463
7483
|
reviewInfo: procedureReviewInfoSchema,
|
|
7464
7484
|
// Procedure review info validation
|
|
7465
|
-
isActive:
|
|
7466
|
-
createdAt:
|
|
7467
|
-
updatedAt:
|
|
7485
|
+
isActive: import_zod20.z.boolean(),
|
|
7486
|
+
createdAt: import_zod20.z.date(),
|
|
7487
|
+
updatedAt: import_zod20.z.date()
|
|
7468
7488
|
});
|
|
7469
7489
|
|
|
7470
7490
|
// src/services/procedure/procedure.service.ts
|
|
@@ -8499,42 +8519,42 @@ var SYNCED_CALENDARS_COLLECTION = "syncedCalendars";
|
|
|
8499
8519
|
var import_firestore37 = require("firebase/firestore");
|
|
8500
8520
|
|
|
8501
8521
|
// src/validations/calendar.schema.ts
|
|
8502
|
-
var
|
|
8522
|
+
var import_zod22 = require("zod");
|
|
8503
8523
|
var import_firestore28 = require("firebase/firestore");
|
|
8504
8524
|
|
|
8505
8525
|
// src/validations/profile-info.schema.ts
|
|
8506
|
-
var
|
|
8526
|
+
var import_zod21 = require("zod");
|
|
8507
8527
|
var import_firestore27 = require("firebase/firestore");
|
|
8508
|
-
var clinicInfoSchema2 =
|
|
8509
|
-
id:
|
|
8510
|
-
featuredPhoto:
|
|
8511
|
-
name:
|
|
8512
|
-
description:
|
|
8528
|
+
var clinicInfoSchema2 = import_zod21.z.object({
|
|
8529
|
+
id: import_zod21.z.string(),
|
|
8530
|
+
featuredPhoto: import_zod21.z.string(),
|
|
8531
|
+
name: import_zod21.z.string(),
|
|
8532
|
+
description: import_zod21.z.string(),
|
|
8513
8533
|
location: clinicLocationSchema,
|
|
8514
8534
|
contactInfo: clinicContactInfoSchema
|
|
8515
8535
|
});
|
|
8516
|
-
var practitionerProfileInfoSchema =
|
|
8517
|
-
id:
|
|
8518
|
-
practitionerPhoto:
|
|
8519
|
-
name:
|
|
8520
|
-
email:
|
|
8521
|
-
phone:
|
|
8536
|
+
var practitionerProfileInfoSchema = import_zod21.z.object({
|
|
8537
|
+
id: import_zod21.z.string(),
|
|
8538
|
+
practitionerPhoto: import_zod21.z.string().nullable(),
|
|
8539
|
+
name: import_zod21.z.string(),
|
|
8540
|
+
email: import_zod21.z.string().email(),
|
|
8541
|
+
phone: import_zod21.z.string().nullable(),
|
|
8522
8542
|
certification: practitionerCertificationSchema
|
|
8523
8543
|
});
|
|
8524
|
-
var patientProfileInfoSchema =
|
|
8525
|
-
id:
|
|
8526
|
-
fullName:
|
|
8527
|
-
email:
|
|
8528
|
-
phone:
|
|
8529
|
-
dateOfBirth:
|
|
8530
|
-
gender:
|
|
8544
|
+
var patientProfileInfoSchema = import_zod21.z.object({
|
|
8545
|
+
id: import_zod21.z.string(),
|
|
8546
|
+
fullName: import_zod21.z.string(),
|
|
8547
|
+
email: import_zod21.z.string().email(),
|
|
8548
|
+
phone: import_zod21.z.string().nullable(),
|
|
8549
|
+
dateOfBirth: import_zod21.z.instanceof(import_firestore27.Timestamp),
|
|
8550
|
+
gender: import_zod21.z.nativeEnum(Gender)
|
|
8531
8551
|
});
|
|
8532
8552
|
|
|
8533
8553
|
// src/validations/calendar.schema.ts
|
|
8534
8554
|
var MIN_APPOINTMENT_DURATION = 15;
|
|
8535
|
-
var calendarEventTimeSchema =
|
|
8536
|
-
start:
|
|
8537
|
-
end:
|
|
8555
|
+
var calendarEventTimeSchema = import_zod22.z.object({
|
|
8556
|
+
start: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp)),
|
|
8557
|
+
end: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp))
|
|
8538
8558
|
}).refine(
|
|
8539
8559
|
(data) => {
|
|
8540
8560
|
const startDate = data.start instanceof import_firestore28.Timestamp ? data.start.toDate() : data.start;
|
|
@@ -8555,46 +8575,46 @@ var calendarEventTimeSchema = import_zod21.z.object({
|
|
|
8555
8575
|
path: ["start"]
|
|
8556
8576
|
}
|
|
8557
8577
|
);
|
|
8558
|
-
var timeSlotSchema2 =
|
|
8559
|
-
start:
|
|
8560
|
-
end:
|
|
8561
|
-
isAvailable:
|
|
8578
|
+
var timeSlotSchema2 = import_zod22.z.object({
|
|
8579
|
+
start: import_zod22.z.date(),
|
|
8580
|
+
end: import_zod22.z.date(),
|
|
8581
|
+
isAvailable: import_zod22.z.boolean()
|
|
8562
8582
|
}).refine((data) => data.start < data.end, {
|
|
8563
8583
|
message: "End time must be after start time",
|
|
8564
8584
|
path: ["end"]
|
|
8565
8585
|
});
|
|
8566
|
-
var syncedCalendarEventSchema =
|
|
8567
|
-
eventId:
|
|
8568
|
-
syncedCalendarProvider:
|
|
8569
|
-
syncedAt:
|
|
8586
|
+
var syncedCalendarEventSchema = import_zod22.z.object({
|
|
8587
|
+
eventId: import_zod22.z.string(),
|
|
8588
|
+
syncedCalendarProvider: import_zod22.z.nativeEnum(SyncedCalendarProvider),
|
|
8589
|
+
syncedAt: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp))
|
|
8570
8590
|
});
|
|
8571
|
-
var procedureInfoSchema =
|
|
8572
|
-
name:
|
|
8573
|
-
description:
|
|
8574
|
-
duration:
|
|
8575
|
-
price:
|
|
8576
|
-
currency:
|
|
8591
|
+
var procedureInfoSchema = import_zod22.z.object({
|
|
8592
|
+
name: import_zod22.z.string(),
|
|
8593
|
+
description: import_zod22.z.string(),
|
|
8594
|
+
duration: import_zod22.z.number().min(MIN_APPOINTMENT_DURATION),
|
|
8595
|
+
price: import_zod22.z.number().min(0),
|
|
8596
|
+
currency: import_zod22.z.nativeEnum(Currency)
|
|
8577
8597
|
});
|
|
8578
|
-
var procedureCategorizationSchema =
|
|
8579
|
-
procedureFamily:
|
|
8598
|
+
var procedureCategorizationSchema = import_zod22.z.object({
|
|
8599
|
+
procedureFamily: import_zod22.z.string(),
|
|
8580
8600
|
// Replace with proper enum when available
|
|
8581
|
-
procedureCategory:
|
|
8601
|
+
procedureCategory: import_zod22.z.string(),
|
|
8582
8602
|
// Replace with proper enum when available
|
|
8583
|
-
procedureSubcategory:
|
|
8603
|
+
procedureSubcategory: import_zod22.z.string(),
|
|
8584
8604
|
// Replace with proper enum when available
|
|
8585
|
-
procedureTechnology:
|
|
8605
|
+
procedureTechnology: import_zod22.z.string(),
|
|
8586
8606
|
// Replace with proper enum when available
|
|
8587
|
-
procedureProduct:
|
|
8607
|
+
procedureProduct: import_zod22.z.string()
|
|
8588
8608
|
// Replace with proper enum when available
|
|
8589
8609
|
});
|
|
8590
|
-
var createAppointmentSchema2 =
|
|
8591
|
-
clinicId:
|
|
8592
|
-
doctorId:
|
|
8593
|
-
patientId:
|
|
8594
|
-
procedureId:
|
|
8610
|
+
var createAppointmentSchema2 = import_zod22.z.object({
|
|
8611
|
+
clinicId: import_zod22.z.string().min(1, "Clinic ID is required"),
|
|
8612
|
+
doctorId: import_zod22.z.string().min(1, "Doctor ID is required"),
|
|
8613
|
+
patientId: import_zod22.z.string().min(1, "Patient ID is required"),
|
|
8614
|
+
procedureId: import_zod22.z.string().min(1, "Procedure ID is required"),
|
|
8595
8615
|
eventLocation: clinicLocationSchema,
|
|
8596
8616
|
eventTime: calendarEventTimeSchema,
|
|
8597
|
-
description:
|
|
8617
|
+
description: import_zod22.z.string().optional()
|
|
8598
8618
|
}).refine(
|
|
8599
8619
|
(data) => {
|
|
8600
8620
|
return true;
|
|
@@ -8603,73 +8623,73 @@ var createAppointmentSchema2 = import_zod21.z.object({
|
|
|
8603
8623
|
message: "Invalid appointment parameters"
|
|
8604
8624
|
}
|
|
8605
8625
|
);
|
|
8606
|
-
var updateAppointmentSchema2 =
|
|
8607
|
-
appointmentId:
|
|
8608
|
-
clinicId:
|
|
8609
|
-
doctorId:
|
|
8610
|
-
patientId:
|
|
8626
|
+
var updateAppointmentSchema2 = import_zod22.z.object({
|
|
8627
|
+
appointmentId: import_zod22.z.string().min(1, "Appointment ID is required"),
|
|
8628
|
+
clinicId: import_zod22.z.string().min(1, "Clinic ID is required"),
|
|
8629
|
+
doctorId: import_zod22.z.string().min(1, "Doctor ID is required"),
|
|
8630
|
+
patientId: import_zod22.z.string().min(1, "Patient ID is required"),
|
|
8611
8631
|
eventTime: calendarEventTimeSchema.optional(),
|
|
8612
|
-
description:
|
|
8613
|
-
status:
|
|
8632
|
+
description: import_zod22.z.string().optional(),
|
|
8633
|
+
status: import_zod22.z.nativeEnum(CalendarEventStatus).optional()
|
|
8614
8634
|
});
|
|
8615
|
-
var createCalendarEventSchema =
|
|
8616
|
-
id:
|
|
8617
|
-
clinicBranchId:
|
|
8618
|
-
clinicBranchInfo:
|
|
8619
|
-
practitionerProfileId:
|
|
8635
|
+
var createCalendarEventSchema = import_zod22.z.object({
|
|
8636
|
+
id: import_zod22.z.string(),
|
|
8637
|
+
clinicBranchId: import_zod22.z.string().nullable().optional(),
|
|
8638
|
+
clinicBranchInfo: import_zod22.z.any().nullable().optional(),
|
|
8639
|
+
practitionerProfileId: import_zod22.z.string().nullable().optional(),
|
|
8620
8640
|
practitionerProfileInfo: practitionerProfileInfoSchema.nullable().optional(),
|
|
8621
|
-
patientProfileId:
|
|
8641
|
+
patientProfileId: import_zod22.z.string().nullable().optional(),
|
|
8622
8642
|
patientProfileInfo: patientProfileInfoSchema.nullable().optional(),
|
|
8623
|
-
procedureId:
|
|
8624
|
-
appointmentId:
|
|
8625
|
-
syncedCalendarEventId:
|
|
8626
|
-
eventName:
|
|
8643
|
+
procedureId: import_zod22.z.string().nullable().optional(),
|
|
8644
|
+
appointmentId: import_zod22.z.string().nullable().optional(),
|
|
8645
|
+
syncedCalendarEventId: import_zod22.z.array(syncedCalendarEventSchema).nullable().optional(),
|
|
8646
|
+
eventName: import_zod22.z.string().min(1, "Event name is required"),
|
|
8627
8647
|
eventLocation: clinicLocationSchema.optional(),
|
|
8628
8648
|
eventTime: calendarEventTimeSchema,
|
|
8629
|
-
description:
|
|
8630
|
-
status:
|
|
8631
|
-
syncStatus:
|
|
8632
|
-
eventType:
|
|
8633
|
-
createdAt:
|
|
8649
|
+
description: import_zod22.z.string().optional(),
|
|
8650
|
+
status: import_zod22.z.nativeEnum(CalendarEventStatus),
|
|
8651
|
+
syncStatus: import_zod22.z.nativeEnum(CalendarSyncStatus),
|
|
8652
|
+
eventType: import_zod22.z.nativeEnum(CalendarEventType),
|
|
8653
|
+
createdAt: import_zod22.z.any(),
|
|
8634
8654
|
// FieldValue for server timestamp
|
|
8635
|
-
updatedAt:
|
|
8655
|
+
updatedAt: import_zod22.z.any()
|
|
8636
8656
|
// FieldValue for server timestamp
|
|
8637
8657
|
});
|
|
8638
|
-
var updateCalendarEventSchema =
|
|
8639
|
-
syncedCalendarEventId:
|
|
8640
|
-
appointmentId:
|
|
8641
|
-
eventName:
|
|
8658
|
+
var updateCalendarEventSchema = import_zod22.z.object({
|
|
8659
|
+
syncedCalendarEventId: import_zod22.z.array(syncedCalendarEventSchema).nullable().optional(),
|
|
8660
|
+
appointmentId: import_zod22.z.string().nullable().optional(),
|
|
8661
|
+
eventName: import_zod22.z.string().optional(),
|
|
8642
8662
|
eventTime: calendarEventTimeSchema.optional(),
|
|
8643
|
-
description:
|
|
8644
|
-
status:
|
|
8645
|
-
syncStatus:
|
|
8646
|
-
eventType:
|
|
8647
|
-
updatedAt:
|
|
8663
|
+
description: import_zod22.z.string().optional(),
|
|
8664
|
+
status: import_zod22.z.nativeEnum(CalendarEventStatus).optional(),
|
|
8665
|
+
syncStatus: import_zod22.z.nativeEnum(CalendarSyncStatus).optional(),
|
|
8666
|
+
eventType: import_zod22.z.nativeEnum(CalendarEventType).optional(),
|
|
8667
|
+
updatedAt: import_zod22.z.any()
|
|
8648
8668
|
// FieldValue for server timestamp
|
|
8649
8669
|
});
|
|
8650
|
-
var calendarEventSchema =
|
|
8651
|
-
id:
|
|
8652
|
-
clinicBranchId:
|
|
8653
|
-
clinicBranchInfo:
|
|
8670
|
+
var calendarEventSchema = import_zod22.z.object({
|
|
8671
|
+
id: import_zod22.z.string(),
|
|
8672
|
+
clinicBranchId: import_zod22.z.string().nullable().optional(),
|
|
8673
|
+
clinicBranchInfo: import_zod22.z.any().nullable().optional(),
|
|
8654
8674
|
// Will be replaced with proper clinic info schema
|
|
8655
|
-
practitionerProfileId:
|
|
8675
|
+
practitionerProfileId: import_zod22.z.string().nullable().optional(),
|
|
8656
8676
|
practitionerProfileInfo: practitionerProfileInfoSchema.nullable().optional(),
|
|
8657
|
-
patientProfileId:
|
|
8677
|
+
patientProfileId: import_zod22.z.string().nullable().optional(),
|
|
8658
8678
|
patientProfileInfo: patientProfileInfoSchema.nullable().optional(),
|
|
8659
|
-
procedureId:
|
|
8679
|
+
procedureId: import_zod22.z.string().nullable().optional(),
|
|
8660
8680
|
procedureInfo: procedureInfoSchema.nullable().optional(),
|
|
8661
8681
|
procedureCategorization: procedureCategorizationSchema.nullable().optional(),
|
|
8662
|
-
appointmentId:
|
|
8663
|
-
syncedCalendarEventId:
|
|
8664
|
-
eventName:
|
|
8682
|
+
appointmentId: import_zod22.z.string().nullable().optional(),
|
|
8683
|
+
syncedCalendarEventId: import_zod22.z.array(syncedCalendarEventSchema).nullable().optional(),
|
|
8684
|
+
eventName: import_zod22.z.string(),
|
|
8665
8685
|
eventLocation: clinicLocationSchema.optional(),
|
|
8666
8686
|
eventTime: calendarEventTimeSchema,
|
|
8667
|
-
description:
|
|
8668
|
-
status:
|
|
8669
|
-
syncStatus:
|
|
8670
|
-
eventType:
|
|
8671
|
-
createdAt:
|
|
8672
|
-
updatedAt:
|
|
8687
|
+
description: import_zod22.z.string().optional(),
|
|
8688
|
+
status: import_zod22.z.nativeEnum(CalendarEventStatus),
|
|
8689
|
+
syncStatus: import_zod22.z.nativeEnum(CalendarSyncStatus),
|
|
8690
|
+
eventType: import_zod22.z.nativeEnum(CalendarEventType),
|
|
8691
|
+
createdAt: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp)),
|
|
8692
|
+
updatedAt: import_zod22.z.instanceof(Date).or(import_zod22.z.instanceof(import_firestore28.Timestamp))
|
|
8673
8693
|
});
|
|
8674
8694
|
|
|
8675
8695
|
// src/services/calendar/utils/clinic.utils.ts
|
|
@@ -11207,7 +11227,7 @@ var import_firestore38 = require("firebase/firestore");
|
|
|
11207
11227
|
var REVIEWS_COLLECTION = "reviews";
|
|
11208
11228
|
|
|
11209
11229
|
// src/services/reviews/reviews.service.ts
|
|
11210
|
-
var
|
|
11230
|
+
var import_zod23 = require("zod");
|
|
11211
11231
|
var ReviewService = class extends BaseService {
|
|
11212
11232
|
constructor(db, auth, app) {
|
|
11213
11233
|
super(db, auth, app);
|
|
@@ -11313,7 +11333,7 @@ var ReviewService = class extends BaseService {
|
|
|
11313
11333
|
await Promise.all(updatePromises);
|
|
11314
11334
|
return review;
|
|
11315
11335
|
} catch (error) {
|
|
11316
|
-
if (error instanceof
|
|
11336
|
+
if (error instanceof import_zod23.z.ZodError) {
|
|
11317
11337
|
throw new Error(`Invalid review data: ${error.message}`);
|
|
11318
11338
|
}
|
|
11319
11339
|
throw error;
|
|
@@ -13576,54 +13596,54 @@ var ProductService = class extends BaseService {
|
|
|
13576
13596
|
};
|
|
13577
13597
|
|
|
13578
13598
|
// src/validations/notification.schema.ts
|
|
13579
|
-
var
|
|
13580
|
-
var baseNotificationSchema =
|
|
13581
|
-
id:
|
|
13582
|
-
userId:
|
|
13583
|
-
notificationTime:
|
|
13599
|
+
var import_zod24 = require("zod");
|
|
13600
|
+
var baseNotificationSchema = import_zod24.z.object({
|
|
13601
|
+
id: import_zod24.z.string().optional(),
|
|
13602
|
+
userId: import_zod24.z.string(),
|
|
13603
|
+
notificationTime: import_zod24.z.any(),
|
|
13584
13604
|
// Timestamp
|
|
13585
|
-
notificationType:
|
|
13586
|
-
notificationTokens:
|
|
13587
|
-
status:
|
|
13588
|
-
createdAt:
|
|
13605
|
+
notificationType: import_zod24.z.nativeEnum(NotificationType),
|
|
13606
|
+
notificationTokens: import_zod24.z.array(import_zod24.z.string()),
|
|
13607
|
+
status: import_zod24.z.nativeEnum(NotificationStatus),
|
|
13608
|
+
createdAt: import_zod24.z.any().optional(),
|
|
13589
13609
|
// Timestamp
|
|
13590
|
-
updatedAt:
|
|
13610
|
+
updatedAt: import_zod24.z.any().optional(),
|
|
13591
13611
|
// Timestamp
|
|
13592
|
-
title:
|
|
13593
|
-
body:
|
|
13594
|
-
isRead:
|
|
13595
|
-
userRole:
|
|
13612
|
+
title: import_zod24.z.string(),
|
|
13613
|
+
body: import_zod24.z.string(),
|
|
13614
|
+
isRead: import_zod24.z.boolean(),
|
|
13615
|
+
userRole: import_zod24.z.nativeEnum(UserRole)
|
|
13596
13616
|
});
|
|
13597
13617
|
var preRequirementNotificationSchema = baseNotificationSchema.extend({
|
|
13598
|
-
notificationType:
|
|
13599
|
-
treatmentId:
|
|
13600
|
-
requirements:
|
|
13601
|
-
deadline:
|
|
13618
|
+
notificationType: import_zod24.z.literal("preRequirement" /* PRE_REQUIREMENT */),
|
|
13619
|
+
treatmentId: import_zod24.z.string(),
|
|
13620
|
+
requirements: import_zod24.z.array(import_zod24.z.string()),
|
|
13621
|
+
deadline: import_zod24.z.any()
|
|
13602
13622
|
// Timestamp
|
|
13603
13623
|
});
|
|
13604
13624
|
var postRequirementNotificationSchema = baseNotificationSchema.extend({
|
|
13605
|
-
notificationType:
|
|
13606
|
-
treatmentId:
|
|
13607
|
-
requirements:
|
|
13608
|
-
deadline:
|
|
13625
|
+
notificationType: import_zod24.z.literal("postRequirement" /* POST_REQUIREMENT */),
|
|
13626
|
+
treatmentId: import_zod24.z.string(),
|
|
13627
|
+
requirements: import_zod24.z.array(import_zod24.z.string()),
|
|
13628
|
+
deadline: import_zod24.z.any()
|
|
13609
13629
|
// Timestamp
|
|
13610
13630
|
});
|
|
13611
13631
|
var appointmentReminderNotificationSchema = baseNotificationSchema.extend({
|
|
13612
|
-
notificationType:
|
|
13613
|
-
appointmentId:
|
|
13614
|
-
appointmentTime:
|
|
13632
|
+
notificationType: import_zod24.z.literal("appointmentReminder" /* APPOINTMENT_REMINDER */),
|
|
13633
|
+
appointmentId: import_zod24.z.string(),
|
|
13634
|
+
appointmentTime: import_zod24.z.any(),
|
|
13615
13635
|
// Timestamp
|
|
13616
|
-
treatmentType:
|
|
13617
|
-
doctorName:
|
|
13636
|
+
treatmentType: import_zod24.z.string(),
|
|
13637
|
+
doctorName: import_zod24.z.string()
|
|
13618
13638
|
});
|
|
13619
13639
|
var appointmentNotificationSchema = baseNotificationSchema.extend({
|
|
13620
|
-
notificationType:
|
|
13621
|
-
appointmentId:
|
|
13622
|
-
appointmentStatus:
|
|
13623
|
-
previousStatus:
|
|
13624
|
-
reason:
|
|
13640
|
+
notificationType: import_zod24.z.literal("appointmentNotification" /* APPOINTMENT_NOTIFICATION */),
|
|
13641
|
+
appointmentId: import_zod24.z.string(),
|
|
13642
|
+
appointmentStatus: import_zod24.z.string(),
|
|
13643
|
+
previousStatus: import_zod24.z.string(),
|
|
13644
|
+
reason: import_zod24.z.string().optional()
|
|
13625
13645
|
});
|
|
13626
|
-
var notificationSchema =
|
|
13646
|
+
var notificationSchema = import_zod24.z.discriminatedUnion("notificationType", [
|
|
13627
13647
|
preRequirementNotificationSchema,
|
|
13628
13648
|
postRequirementNotificationSchema,
|
|
13629
13649
|
appointmentReminderNotificationSchema,
|
|
@@ -13764,7 +13784,6 @@ var RequirementType = /* @__PURE__ */ ((RequirementType2) => {
|
|
|
13764
13784
|
clinicContactInfoSchema,
|
|
13765
13785
|
clinicGroupSchema,
|
|
13766
13786
|
clinicGroupSetupSchema,
|
|
13767
|
-
clinicInfoSchema,
|
|
13768
13787
|
clinicLocationSchema,
|
|
13769
13788
|
clinicReviewInfoSchema,
|
|
13770
13789
|
clinicReviewSchema,
|
|
@@ -13792,7 +13811,6 @@ var RequirementType = /* @__PURE__ */ ((RequirementType2) => {
|
|
|
13792
13811
|
createProcedureReviewSchema,
|
|
13793
13812
|
createReviewSchema,
|
|
13794
13813
|
createUserOptionsSchema,
|
|
13795
|
-
doctorInfoSchema,
|
|
13796
13814
|
documentElementSchema,
|
|
13797
13815
|
documentElementWithoutIdSchema,
|
|
13798
13816
|
documentTemplateSchema,
|
|
@@ -13831,7 +13849,6 @@ var RequirementType = /* @__PURE__ */ ((RequirementType2) => {
|
|
|
13831
13849
|
procedureInfoSchema,
|
|
13832
13850
|
procedureReviewInfoSchema,
|
|
13833
13851
|
procedureReviewSchema,
|
|
13834
|
-
procedureSummaryInfoSchema,
|
|
13835
13852
|
requesterInfoSchema,
|
|
13836
13853
|
reviewSchema,
|
|
13837
13854
|
searchAppointmentsSchema,
|