@blackcode_sa/metaestetics-api 1.12.59 → 1.12.61
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/admin/index.d.mts +36 -4
- package/dist/admin/index.d.ts +36 -4
- package/dist/admin/index.js +147 -26
- package/dist/admin/index.mjs +147 -26
- package/dist/index.d.mts +9 -1
- package/dist/index.d.ts +9 -1
- package/package.json +119 -119
- package/src/__mocks__/firstore.ts +10 -10
- package/src/admin/aggregation/README.md +79 -79
- package/src/admin/aggregation/appointment/README.md +128 -128
- package/src/admin/aggregation/appointment/appointment.aggregation.service.ts +1844 -1689
- package/src/admin/aggregation/appointment/index.ts +1 -1
- package/src/admin/aggregation/clinic/README.md +52 -52
- package/src/admin/aggregation/clinic/clinic.aggregation.service.ts +703 -703
- package/src/admin/aggregation/clinic/index.ts +1 -1
- package/src/admin/aggregation/forms/README.md +13 -13
- package/src/admin/aggregation/forms/filled-forms.aggregation.service.ts +322 -322
- package/src/admin/aggregation/forms/index.ts +1 -1
- package/src/admin/aggregation/index.ts +8 -8
- package/src/admin/aggregation/patient/README.md +27 -27
- package/src/admin/aggregation/patient/index.ts +1 -1
- package/src/admin/aggregation/patient/patient.aggregation.service.ts +141 -141
- package/src/admin/aggregation/practitioner/README.md +42 -42
- package/src/admin/aggregation/practitioner/index.ts +1 -1
- package/src/admin/aggregation/practitioner/practitioner.aggregation.service.ts +433 -433
- package/src/admin/aggregation/practitioner-invite/index.ts +1 -1
- package/src/admin/aggregation/practitioner-invite/practitioner-invite.aggregation.service.ts +961 -961
- package/src/admin/aggregation/procedure/README.md +43 -43
- package/src/admin/aggregation/procedure/index.ts +1 -1
- package/src/admin/aggregation/procedure/procedure.aggregation.service.ts +702 -702
- package/src/admin/aggregation/reviews/index.ts +1 -1
- package/src/admin/aggregation/reviews/reviews.aggregation.service.ts +641 -641
- package/src/admin/booking/README.md +125 -125
- package/src/admin/booking/booking.admin.ts +1037 -1037
- package/src/admin/booking/booking.calculator.ts +712 -712
- package/src/admin/booking/booking.types.ts +59 -59
- package/src/admin/booking/index.ts +3 -3
- package/src/admin/booking/timezones-problem.md +185 -185
- package/src/admin/calendar/README.md +7 -7
- package/src/admin/calendar/calendar.admin.service.ts +345 -345
- package/src/admin/calendar/index.ts +1 -1
- package/src/admin/documentation-templates/document-manager.admin.ts +260 -260
- package/src/admin/documentation-templates/index.ts +1 -1
- package/src/admin/free-consultation/free-consultation-utils.admin.ts +148 -148
- package/src/admin/free-consultation/index.ts +1 -1
- package/src/admin/index.ts +75 -75
- package/src/admin/logger/index.ts +78 -78
- package/src/admin/mailing/README.md +95 -95
- package/src/admin/mailing/appointment/appointment.mailing.service.ts +732 -732
- package/src/admin/mailing/appointment/index.ts +1 -1
- package/src/admin/mailing/appointment/templates/patient/appointment-confirmed.html +40 -40
- package/src/admin/mailing/base.mailing.service.ts +208 -208
- package/src/admin/mailing/index.ts +3 -3
- package/src/admin/mailing/practitionerInvite/existing-practitioner-invite.mailing.ts +611 -611
- package/src/admin/mailing/practitionerInvite/index.ts +2 -2
- package/src/admin/mailing/practitionerInvite/practitionerInvite.mailing.ts +395 -395
- package/src/admin/mailing/practitionerInvite/templates/existing-practitioner-invitation.template.ts +155 -155
- package/src/admin/mailing/practitionerInvite/templates/invitation.template.ts +101 -101
- package/src/admin/mailing/practitionerInvite/templates/invite-accepted-notification.template.ts +228 -228
- package/src/admin/mailing/practitionerInvite/templates/invite-rejected-notification.template.ts +242 -242
- package/src/admin/notifications/index.ts +1 -1
- package/src/admin/notifications/notifications.admin.ts +710 -710
- package/src/admin/requirements/README.md +128 -128
- package/src/admin/requirements/index.ts +1 -1
- package/src/admin/requirements/patient-requirements.admin.service.ts +475 -475
- package/src/admin/users/index.ts +1 -1
- package/src/admin/users/user-profile.admin.ts +405 -405
- package/src/backoffice/constants/certification.constants.ts +13 -13
- package/src/backoffice/constants/index.ts +1 -1
- package/src/backoffice/errors/backoffice.errors.ts +181 -181
- package/src/backoffice/errors/index.ts +1 -1
- package/src/backoffice/expo-safe/README.md +26 -26
- package/src/backoffice/expo-safe/index.ts +41 -41
- package/src/backoffice/index.ts +5 -5
- package/src/backoffice/services/FIXES_README.md +102 -102
- package/src/backoffice/services/README.md +40 -40
- package/src/backoffice/services/brand.service.ts +256 -256
- package/src/backoffice/services/category.service.ts +318 -318
- package/src/backoffice/services/constants.service.ts +385 -385
- package/src/backoffice/services/documentation-template.service.ts +202 -202
- package/src/backoffice/services/index.ts +8 -8
- package/src/backoffice/services/migrate-products.ts +116 -116
- package/src/backoffice/services/product.service.ts +553 -553
- package/src/backoffice/services/requirement.service.ts +235 -235
- package/src/backoffice/services/subcategory.service.ts +395 -395
- package/src/backoffice/services/technology.service.ts +1070 -1070
- package/src/backoffice/types/README.md +12 -12
- package/src/backoffice/types/admin-constants.types.ts +69 -69
- package/src/backoffice/types/brand.types.ts +29 -29
- package/src/backoffice/types/category.types.ts +62 -62
- package/src/backoffice/types/documentation-templates.types.ts +28 -28
- package/src/backoffice/types/index.ts +10 -10
- package/src/backoffice/types/procedure-product.types.ts +38 -38
- package/src/backoffice/types/product.types.ts +240 -240
- package/src/backoffice/types/requirement.types.ts +63 -63
- package/src/backoffice/types/static/README.md +18 -18
- package/src/backoffice/types/static/blocking-condition.types.ts +21 -21
- package/src/backoffice/types/static/certification.types.ts +37 -37
- package/src/backoffice/types/static/contraindication.types.ts +19 -19
- package/src/backoffice/types/static/index.ts +6 -6
- package/src/backoffice/types/static/pricing.types.ts +16 -16
- package/src/backoffice/types/static/procedure-family.types.ts +14 -14
- package/src/backoffice/types/static/treatment-benefit.types.ts +22 -22
- package/src/backoffice/types/subcategory.types.ts +34 -34
- package/src/backoffice/types/technology.types.ts +161 -161
- package/src/backoffice/validations/index.ts +1 -1
- package/src/backoffice/validations/schemas.ts +163 -163
- package/src/config/__mocks__/firebase.ts +99 -99
- package/src/config/firebase.ts +78 -78
- package/src/config/index.ts +9 -9
- package/src/errors/auth.error.ts +6 -6
- package/src/errors/auth.errors.ts +200 -200
- package/src/errors/clinic.errors.ts +32 -32
- package/src/errors/firebase.errors.ts +47 -47
- package/src/errors/user.errors.ts +99 -99
- package/src/index.backup.ts +407 -407
- package/src/index.ts +6 -6
- package/src/locales/en.ts +31 -31
- package/src/recommender/admin/index.ts +1 -1
- package/src/recommender/admin/services/recommender.service.admin.ts +5 -5
- package/src/recommender/front/index.ts +1 -1
- package/src/recommender/front/services/onboarding.service.ts +5 -5
- package/src/recommender/front/services/recommender.service.ts +3 -3
- package/src/recommender/index.ts +1 -1
- package/src/services/PATIENTAUTH.MD +197 -197
- package/src/services/README.md +106 -106
- package/src/services/__tests__/auth/auth.mock.test.ts +17 -17
- package/src/services/__tests__/auth/auth.setup.ts +293 -293
- package/src/services/__tests__/auth.service.test.ts +346 -346
- package/src/services/__tests__/base.service.test.ts +77 -77
- package/src/services/__tests__/user.service.test.ts +528 -528
- package/src/services/appointment/README.md +17 -17
- package/src/services/appointment/appointment.service.ts +2082 -2082
- package/src/services/appointment/index.ts +1 -1
- package/src/services/appointment/utils/appointment.utils.ts +552 -552
- package/src/services/appointment/utils/extended-procedure.utils.ts +314 -314
- package/src/services/appointment/utils/form-initialization.utils.ts +225 -225
- package/src/services/appointment/utils/recommended-procedure.utils.ts +195 -195
- package/src/services/appointment/utils/zone-management.utils.ts +353 -353
- package/src/services/appointment/utils/zone-photo.utils.ts +152 -152
- package/src/services/auth/auth.service.ts +989 -989
- package/src/services/auth/auth.v2.service.ts +961 -961
- package/src/services/auth/index.ts +7 -7
- package/src/services/auth/utils/error.utils.ts +90 -90
- package/src/services/auth/utils/firebase.utils.ts +49 -49
- package/src/services/auth/utils/index.ts +21 -21
- package/src/services/auth/utils/practitioner.utils.ts +125 -125
- package/src/services/base.service.ts +41 -41
- package/src/services/calendar/calendar.service.ts +1077 -1077
- package/src/services/calendar/calendar.v2.service.ts +1683 -1683
- package/src/services/calendar/calendar.v3.service.ts +313 -313
- package/src/services/calendar/externalCalendar.service.ts +178 -178
- package/src/services/calendar/index.ts +5 -5
- package/src/services/calendar/synced-calendars.service.ts +743 -743
- package/src/services/calendar/utils/appointment.utils.ts +265 -265
- package/src/services/calendar/utils/calendar-event.utils.ts +646 -646
- package/src/services/calendar/utils/clinic.utils.ts +237 -237
- package/src/services/calendar/utils/docs.utils.ts +157 -157
- package/src/services/calendar/utils/google-calendar.utils.ts +697 -697
- package/src/services/calendar/utils/index.ts +8 -8
- package/src/services/calendar/utils/patient.utils.ts +198 -198
- package/src/services/calendar/utils/practitioner.utils.ts +221 -221
- package/src/services/calendar/utils/synced-calendar.utils.ts +472 -472
- package/src/services/clinic/README.md +204 -204
- package/src/services/clinic/__tests__/clinic-admin.service.test.ts +287 -287
- package/src/services/clinic/__tests__/clinic-group.service.test.ts +352 -352
- package/src/services/clinic/__tests__/clinic.service.test.ts +354 -354
- package/src/services/clinic/billing-transactions.service.ts +217 -217
- package/src/services/clinic/clinic-admin.service.ts +202 -202
- package/src/services/clinic/clinic-group.service.ts +310 -310
- package/src/services/clinic/clinic.service.ts +708 -708
- package/src/services/clinic/index.ts +5 -5
- package/src/services/clinic/practitioner-invite.service.ts +519 -519
- package/src/services/clinic/utils/admin.utils.ts +551 -551
- package/src/services/clinic/utils/clinic-group.utils.ts +646 -646
- package/src/services/clinic/utils/clinic.utils.ts +949 -949
- package/src/services/clinic/utils/filter.utils.d.ts +23 -23
- package/src/services/clinic/utils/filter.utils.ts +446 -446
- package/src/services/clinic/utils/index.ts +11 -11
- package/src/services/clinic/utils/photos.utils.ts +188 -188
- package/src/services/clinic/utils/search.utils.ts +84 -84
- package/src/services/clinic/utils/tag.utils.ts +124 -124
- package/src/services/documentation-templates/documentation-template.service.ts +537 -537
- package/src/services/documentation-templates/filled-document.service.ts +587 -587
- package/src/services/documentation-templates/index.ts +2 -2
- package/src/services/index.ts +13 -13
- package/src/services/media/index.ts +1 -1
- package/src/services/media/media.service.ts +418 -418
- package/src/services/notifications/__tests__/notification.service.test.ts +242 -242
- package/src/services/notifications/index.ts +1 -1
- package/src/services/notifications/notification.service.ts +215 -215
- package/src/services/patient/README.md +48 -48
- package/src/services/patient/To-Do.md +43 -43
- package/src/services/patient/__tests__/patient.service.test.ts +294 -294
- package/src/services/patient/index.ts +2 -2
- package/src/services/patient/patient.service.ts +883 -883
- package/src/services/patient/patientRequirements.service.ts +285 -285
- package/src/services/patient/utils/aesthetic-analysis.utils.ts +176 -176
- package/src/services/patient/utils/clinic.utils.ts +80 -80
- package/src/services/patient/utils/docs.utils.ts +142 -142
- package/src/services/patient/utils/index.ts +9 -9
- package/src/services/patient/utils/location.utils.ts +126 -126
- package/src/services/patient/utils/medical-stuff.utils.ts +143 -143
- package/src/services/patient/utils/medical.utils.ts +458 -458
- package/src/services/patient/utils/practitioner.utils.ts +260 -260
- package/src/services/patient/utils/profile.utils.ts +510 -510
- package/src/services/patient/utils/sensitive.utils.ts +260 -260
- package/src/services/patient/utils/token.utils.ts +211 -211
- package/src/services/practitioner/README.md +145 -145
- package/src/services/practitioner/index.ts +1 -1
- package/src/services/practitioner/practitioner.service.ts +1742 -1742
- package/src/services/procedure/README.md +163 -163
- package/src/services/procedure/index.ts +1 -1
- package/src/services/procedure/procedure.service.ts +1682 -1682
- package/src/services/reviews/index.ts +1 -1
- package/src/services/reviews/reviews.service.ts +636 -636
- package/src/services/user/index.ts +1 -1
- package/src/services/user/user.service.ts +489 -489
- package/src/services/user/user.v2.service.ts +466 -466
- package/src/types/appointment/index.ts +453 -453
- package/src/types/calendar/index.ts +258 -258
- package/src/types/calendar/synced-calendar.types.ts +66 -66
- package/src/types/clinic/index.ts +489 -489
- package/src/types/clinic/practitioner-invite.types.ts +91 -91
- package/src/types/clinic/preferences.types.ts +159 -159
- package/src/types/clinic/to-do +3 -3
- package/src/types/documentation-templates/index.ts +308 -308
- package/src/types/index.ts +44 -44
- package/src/types/notifications/README.md +77 -77
- package/src/types/notifications/index.ts +265 -265
- package/src/types/patient/aesthetic-analysis.types.ts +66 -66
- package/src/types/patient/allergies.ts +58 -58
- package/src/types/patient/index.ts +273 -273
- package/src/types/patient/medical-info.types.ts +152 -152
- package/src/types/patient/patient-requirements.ts +92 -81
- package/src/types/patient/token.types.ts +61 -61
- package/src/types/practitioner/index.ts +206 -206
- package/src/types/procedure/index.ts +181 -181
- package/src/types/profile/index.ts +39 -39
- package/src/types/reviews/index.ts +130 -130
- package/src/types/tz-lookup.d.ts +4 -4
- package/src/types/user/index.ts +38 -38
- package/src/utils/TIMESTAMPS.md +176 -176
- package/src/utils/TimestampUtils.ts +241 -241
- package/src/utils/index.ts +1 -1
- package/src/validations/appointment.schema.ts +574 -574
- package/src/validations/calendar.schema.ts +225 -225
- package/src/validations/clinic.schema.ts +493 -493
- package/src/validations/common.schema.ts +25 -25
- package/src/validations/documentation-templates/index.ts +1 -1
- package/src/validations/documentation-templates/template.schema.ts +220 -220
- package/src/validations/documentation-templates.schema.ts +10 -10
- package/src/validations/index.ts +20 -20
- package/src/validations/media.schema.ts +10 -10
- package/src/validations/notification.schema.ts +90 -90
- package/src/validations/patient/aesthetic-analysis.schema.ts +55 -55
- package/src/validations/patient/medical-info.schema.ts +125 -125
- package/src/validations/patient/patient-requirements.schema.ts +84 -75
- package/src/validations/patient/token.schema.ts +29 -29
- package/src/validations/patient.schema.ts +216 -216
- package/src/validations/practitioner.schema.ts +222 -222
- package/src/validations/procedure-product.schema.ts +41 -41
- package/src/validations/procedure.schema.ts +124 -124
- package/src/validations/profile-info.schema.ts +41 -41
- package/src/validations/reviews.schema.ts +189 -189
- package/src/validations/schemas.ts +104 -104
- package/src/validations/shared.schema.ts +78 -78
package/dist/index.d.ts
CHANGED
|
@@ -3809,6 +3809,13 @@ declare enum PatientRequirementOverallStatus {
|
|
|
3809
3809
|
SUPERSEDED_RESCHEDULE = "supersededReschedule",// This instance was replaced by a new one due to appointment reschedule.
|
|
3810
3810
|
FAILED_TO_PROCESS = "failedToProcess"
|
|
3811
3811
|
}
|
|
3812
|
+
/**
|
|
3813
|
+
* Represents source procedure information for a requirement instance
|
|
3814
|
+
*/
|
|
3815
|
+
interface RequirementSourceProcedure {
|
|
3816
|
+
procedureId: string;
|
|
3817
|
+
procedureName: string;
|
|
3818
|
+
}
|
|
3812
3819
|
/**
|
|
3813
3820
|
* Represents an instance of a backoffice Requirement, tailored to a specific patient and appointment.
|
|
3814
3821
|
* This document lives in the patient's subcollection: `patients/{patientId}/patientRequirements/{instanceId}`.
|
|
@@ -3824,6 +3831,7 @@ interface PatientRequirementInstance {
|
|
|
3824
3831
|
requirementImportance: RequirementImportance;
|
|
3825
3832
|
overallStatus: PatientRequirementOverallStatus;
|
|
3826
3833
|
instructions: PatientRequirementInstruction[];
|
|
3834
|
+
sourceProcedures?: RequirementSourceProcedure[];
|
|
3827
3835
|
createdAt: Timestamp;
|
|
3828
3836
|
updatedAt: Timestamp;
|
|
3829
3837
|
}
|
|
@@ -7514,4 +7522,4 @@ declare const getFirebaseApp: () => Promise<FirebaseApp>;
|
|
|
7514
7522
|
declare const getFirebaseStorage: () => Promise<FirebaseStorage>;
|
|
7515
7523
|
declare const getFirebaseFunctions: () => Promise<Functions>;
|
|
7516
7524
|
|
|
7517
|
-
export { AESTHETIC_ANALYSIS_COLLECTION, APPOINTMENTS_COLLECTION, type AddAllergyData, type AddBlockingConditionData, type AddContraindicationData, type AddMedicationData, type AddressData, type AdminInfo, type AdminToken, AdminTokenStatus, type AestheticAnalysis, type AestheticAnalysisStatus, type Allergy, type AllergySubtype, AllergyType, type AllergyTypeWithSubtype, type Appointment, type AppointmentCancelledNotification, type AppointmentMediaItem, type AppointmentMetadata, type AppointmentProductMetadata, type AppointmentReminderNotification, type AppointmentRescheduledProposalNotification, AppointmentService, AppointmentStatus, type AppointmentStatusChangeNotification, type AssessmentScales, AuthService, type BaseDocumentElement, type BaseNotification, BaseService, type BeforeAfterPerZone, type BillingInfo, type BillingPerZone, type BillingTransaction, BillingTransactionType, BillingTransactionsService, type BinaryChoiceElement, BlockingCondition, type Brand, BrandService, CALENDAR_COLLECTION, CLINICS_COLLECTION, CLINIC_ADMINS_COLLECTION, CLINIC_GROUPS_COLLECTION, type CalendarEvent, CalendarEventStatus, type CalendarEventTime, CalendarEventType, CalendarServiceV2, CalendarServiceV3, CalendarSyncStatus, type Category, CategoryService, CertificationLevel, CertificationSpecialty, type Clinic, type ClinicAdmin, ClinicAdminService, type ClinicAdminSignupData, type ClinicBranchSetupData, type ClinicContactInfo, type ClinicGroup, ClinicGroupService, type ClinicGroupSetupData, type ClinicInfo, type ClinicLocation, ClinicPhotoTag, type ClinicReview, type ClinicReviewInfo, ClinicService, ClinicTag, type ClinicTags, type ClinicalFindingDetail, type ClinicalFindings, ConstantsService, type ContactPerson, Contraindication, type ContraindicationDynamic, CosmeticAllergySubtype, type CreateAdminTokenData, type CreateAestheticAnalysisData, type CreateAppointmentData, type CreateAppointmentHttpData, type CreateAppointmentParams, type CreateBillingTransactionData, type CreateBlockingEventParams, type CreateCalendarEventData, type CreateClinicAdminData, type CreateClinicData, type CreateClinicGroupData, type CreateDefaultClinicGroupData, type CreateDocumentTemplateData, type CreateDraftPractitionerData, type CreateManualPatientData, type CreatePatientLocationInfoData, type CreatePatientMedicalInfoData, type CreatePatientProfileData, type CreatePatientSensitiveInfoData, type CreatePatientTokenData, type CreatePractitionerData, type CreatePractitionerInviteData, type CreatePractitionerTokenData, type CreateProcedureData, type CreateSyncedCalendarData, type CreateUserData, Currency, DEFAULT_MEDICAL_INFO, DOCTOR_FORMS_SUBCOLLECTION, DOCUMENTATION_TEMPLATES_COLLECTION, type DatePickerElement, type DateRange, type DigitalSignatureElement, type DoctorInfo, type DocumentElement, DocumentElementType, type DocumentTemplate, DocumentationTemplateService, type DynamicTextElement, DynamicVariable, type EmergencyContact, EnvironmentalAllergySubtype, type ExtendedProcedureInfo, ExternalCalendarService, FILLED_DOCUMENTS_COLLECTION, type FileUploadElement, type FilledDocument, type FilledDocumentFileValue, FilledDocumentService, FilledDocumentStatus, type FinalBilling, type FirebaseUser, FoodAllergySubtype, type FormReminderNotification, type FormSubmissionConfirmationNotification, type GamificationInfo, Gender, type GeneralMessageNotification, type HeadingElement, HeadingLevel, INVITE_TOKENS_COLLECTION, Language, type LinkedFormInfo, type ListElement, ListType, type LocationData, MEDIA_METADATA_COLLECTION, MediaAccessLevel, type MediaMetadata, type MediaResource, MediaService, MediaType, MedicationAllergySubtype, type MultipleChoiceElement, NOTIFICATIONS_COLLECTION, type Notification, NotificationService, NotificationStatus, NotificationType, PATIENTS_COLLECTION, PATIENT_APPOINTMENTS_COLLECTION, PATIENT_LOCATION_INFO_COLLECTION, PATIENT_MEDICAL_HISTORY_COLLECTION, PATIENT_MEDICAL_INFO_COLLECTION, PATIENT_REQUIREMENTS_SUBCOLLECTION_NAME, PATIENT_SENSITIVE_INFO_COLLECTION, PRACTITIONERS_COLLECTION, PRACTITIONER_INVITES_COLLECTION, PROCEDURES_COLLECTION, type ParagraphElement, type PatientClinic, type PatientDoctor, type PatientGoals, PatientInstructionStatus, type PatientLocationInfo, type PatientMedicalInfo, type PatientProfile, type PatientProfileComplete, type PatientProfileForDoctor, type PatientProfileInfo, type PatientRequirementInstance, type PatientRequirementInstruction, PatientRequirementOverallStatus, type PatientRequirementsFilters, PatientRequirementsService, type PatientReviewInfo, type PatientSensitiveInfo, PatientService, type PatientToken, PatientTokenStatus, type PaymentConfirmationNotification, PaymentStatus, type PlanDetails, type PostRequirementNotification, PracticeType, type Practitioner, type PractitionerBasicInfo, type PractitionerCertification, type PractitionerClinicProcedures, type PractitionerClinicWorkingHours, type PractitionerInvite, type PractitionerInviteFilters, PractitionerInviteService, PractitionerInviteStatus, type PractitionerProfileInfo, type PractitionerReview, type PractitionerReviewInfo, PractitionerService, PractitionerStatus, type PractitionerToken, PractitionerTokenStatus, type PractitionerWorkingHours, type PreRequirementNotification, PricingMeasure, type Procedure, type ProcedureCategorization, type ProcedureExtendedInfo, ProcedureFamily, type ProcedureInfo, type ProcedureProduct, type ProcedureReview, type ProcedureReviewInfo, ProcedureService, type ProcedureSummaryInfo, type Product, ProductService, type ProposedWorkingHours, REGISTER_TOKENS_COLLECTION, REVIEWS_COLLECTION, type RatingScaleElement, type RecommendedProcedure, type RequesterInfo, type Requirement, type RequirementInstructionDueNotification, RequirementType, type Review, type ReviewRequestNotification, ReviewService, SYNCED_CALENDARS_COLLECTION, type SearchAppointmentsParams, type SearchCalendarEventsParams, SearchLocationEnum, type SearchPatientsParams, type SignatureElement, type SingleChoiceElement, type StripeTransactionData, type Subcategory, SubcategoryService, SubscriptionModel, SubscriptionStatus, type SyncedCalendar, type SyncedCalendarEvent, SyncedCalendarProvider, SyncedCalendarsService, type Technology, type TechnologyDocumentationTemplate, TechnologyService, type TextInputElement, type TimeSlot, TimeUnit, TreatmentBenefit, type TreatmentBenefitDynamic, USERS_COLLECTION, USER_FORMS_SUBCOLLECTION, type UpdateAestheticAnalysisData, type UpdateAllergyData, type UpdateAppointmentData, type UpdateAppointmentParams, type UpdateBlockingConditionData, type UpdateBlockingEventParams, type UpdateCalendarEventData, type UpdateClinicAdminData, type UpdateClinicData, type UpdateClinicGroupData, type UpdateContraindicationData, type UpdateDocumentTemplateData, type UpdateMedicationData, type UpdatePatientLocationInfoData, type UpdatePatientMedicalInfoData, type UpdatePatientProfileData, type UpdatePatientSensitiveInfoData, type UpdatePractitionerData, type UpdatePractitionerInviteData, type UpdateProcedureData, type UpdateSyncedCalendarData, type UpdateVitalStatsData, type User, UserRole, UserService, type VitalStats, type WorkingHours, type ZoneItemData, type ZonePhotoUploadData, getFirebaseApp, getFirebaseAuth, getFirebaseDB, getFirebaseFunctions, getFirebaseInstance, getFirebaseStorage, initializeFirebase };
|
|
7525
|
+
export { AESTHETIC_ANALYSIS_COLLECTION, APPOINTMENTS_COLLECTION, type AddAllergyData, type AddBlockingConditionData, type AddContraindicationData, type AddMedicationData, type AddressData, type AdminInfo, type AdminToken, AdminTokenStatus, type AestheticAnalysis, type AestheticAnalysisStatus, type Allergy, type AllergySubtype, AllergyType, type AllergyTypeWithSubtype, type Appointment, type AppointmentCancelledNotification, type AppointmentMediaItem, type AppointmentMetadata, type AppointmentProductMetadata, type AppointmentReminderNotification, type AppointmentRescheduledProposalNotification, AppointmentService, AppointmentStatus, type AppointmentStatusChangeNotification, type AssessmentScales, AuthService, type BaseDocumentElement, type BaseNotification, BaseService, type BeforeAfterPerZone, type BillingInfo, type BillingPerZone, type BillingTransaction, BillingTransactionType, BillingTransactionsService, type BinaryChoiceElement, BlockingCondition, type Brand, BrandService, CALENDAR_COLLECTION, CLINICS_COLLECTION, CLINIC_ADMINS_COLLECTION, CLINIC_GROUPS_COLLECTION, type CalendarEvent, CalendarEventStatus, type CalendarEventTime, CalendarEventType, CalendarServiceV2, CalendarServiceV3, CalendarSyncStatus, type Category, CategoryService, CertificationLevel, CertificationSpecialty, type Clinic, type ClinicAdmin, ClinicAdminService, type ClinicAdminSignupData, type ClinicBranchSetupData, type ClinicContactInfo, type ClinicGroup, ClinicGroupService, type ClinicGroupSetupData, type ClinicInfo, type ClinicLocation, ClinicPhotoTag, type ClinicReview, type ClinicReviewInfo, ClinicService, ClinicTag, type ClinicTags, type ClinicalFindingDetail, type ClinicalFindings, ConstantsService, type ContactPerson, Contraindication, type ContraindicationDynamic, CosmeticAllergySubtype, type CreateAdminTokenData, type CreateAestheticAnalysisData, type CreateAppointmentData, type CreateAppointmentHttpData, type CreateAppointmentParams, type CreateBillingTransactionData, type CreateBlockingEventParams, type CreateCalendarEventData, type CreateClinicAdminData, type CreateClinicData, type CreateClinicGroupData, type CreateDefaultClinicGroupData, type CreateDocumentTemplateData, type CreateDraftPractitionerData, type CreateManualPatientData, type CreatePatientLocationInfoData, type CreatePatientMedicalInfoData, type CreatePatientProfileData, type CreatePatientSensitiveInfoData, type CreatePatientTokenData, type CreatePractitionerData, type CreatePractitionerInviteData, type CreatePractitionerTokenData, type CreateProcedureData, type CreateSyncedCalendarData, type CreateUserData, Currency, DEFAULT_MEDICAL_INFO, DOCTOR_FORMS_SUBCOLLECTION, DOCUMENTATION_TEMPLATES_COLLECTION, type DatePickerElement, type DateRange, type DigitalSignatureElement, type DoctorInfo, type DocumentElement, DocumentElementType, type DocumentTemplate, DocumentationTemplateService, type DynamicTextElement, DynamicVariable, type EmergencyContact, EnvironmentalAllergySubtype, type ExtendedProcedureInfo, ExternalCalendarService, FILLED_DOCUMENTS_COLLECTION, type FileUploadElement, type FilledDocument, type FilledDocumentFileValue, FilledDocumentService, FilledDocumentStatus, type FinalBilling, type FirebaseUser, FoodAllergySubtype, type FormReminderNotification, type FormSubmissionConfirmationNotification, type GamificationInfo, Gender, type GeneralMessageNotification, type HeadingElement, HeadingLevel, INVITE_TOKENS_COLLECTION, Language, type LinkedFormInfo, type ListElement, ListType, type LocationData, MEDIA_METADATA_COLLECTION, MediaAccessLevel, type MediaMetadata, type MediaResource, MediaService, MediaType, MedicationAllergySubtype, type MultipleChoiceElement, NOTIFICATIONS_COLLECTION, type Notification, NotificationService, NotificationStatus, NotificationType, PATIENTS_COLLECTION, PATIENT_APPOINTMENTS_COLLECTION, PATIENT_LOCATION_INFO_COLLECTION, PATIENT_MEDICAL_HISTORY_COLLECTION, PATIENT_MEDICAL_INFO_COLLECTION, PATIENT_REQUIREMENTS_SUBCOLLECTION_NAME, PATIENT_SENSITIVE_INFO_COLLECTION, PRACTITIONERS_COLLECTION, PRACTITIONER_INVITES_COLLECTION, PROCEDURES_COLLECTION, type ParagraphElement, type PatientClinic, type PatientDoctor, type PatientGoals, PatientInstructionStatus, type PatientLocationInfo, type PatientMedicalInfo, type PatientProfile, type PatientProfileComplete, type PatientProfileForDoctor, type PatientProfileInfo, type PatientRequirementInstance, type PatientRequirementInstruction, PatientRequirementOverallStatus, type PatientRequirementsFilters, PatientRequirementsService, type PatientReviewInfo, type PatientSensitiveInfo, PatientService, type PatientToken, PatientTokenStatus, type PaymentConfirmationNotification, PaymentStatus, type PlanDetails, type PostRequirementNotification, PracticeType, type Practitioner, type PractitionerBasicInfo, type PractitionerCertification, type PractitionerClinicProcedures, type PractitionerClinicWorkingHours, type PractitionerInvite, type PractitionerInviteFilters, PractitionerInviteService, PractitionerInviteStatus, type PractitionerProfileInfo, type PractitionerReview, type PractitionerReviewInfo, PractitionerService, PractitionerStatus, type PractitionerToken, PractitionerTokenStatus, type PractitionerWorkingHours, type PreRequirementNotification, PricingMeasure, type Procedure, type ProcedureCategorization, type ProcedureExtendedInfo, ProcedureFamily, type ProcedureInfo, type ProcedureProduct, type ProcedureReview, type ProcedureReviewInfo, ProcedureService, type ProcedureSummaryInfo, type Product, ProductService, type ProposedWorkingHours, REGISTER_TOKENS_COLLECTION, REVIEWS_COLLECTION, type RatingScaleElement, type RecommendedProcedure, type RequesterInfo, type Requirement, type RequirementInstructionDueNotification, type RequirementSourceProcedure, RequirementType, type Review, type ReviewRequestNotification, ReviewService, SYNCED_CALENDARS_COLLECTION, type SearchAppointmentsParams, type SearchCalendarEventsParams, SearchLocationEnum, type SearchPatientsParams, type SignatureElement, type SingleChoiceElement, type StripeTransactionData, type Subcategory, SubcategoryService, SubscriptionModel, SubscriptionStatus, type SyncedCalendar, type SyncedCalendarEvent, SyncedCalendarProvider, SyncedCalendarsService, type Technology, type TechnologyDocumentationTemplate, TechnologyService, type TextInputElement, type TimeSlot, TimeUnit, TreatmentBenefit, type TreatmentBenefitDynamic, USERS_COLLECTION, USER_FORMS_SUBCOLLECTION, type UpdateAestheticAnalysisData, type UpdateAllergyData, type UpdateAppointmentData, type UpdateAppointmentParams, type UpdateBlockingConditionData, type UpdateBlockingEventParams, type UpdateCalendarEventData, type UpdateClinicAdminData, type UpdateClinicData, type UpdateClinicGroupData, type UpdateContraindicationData, type UpdateDocumentTemplateData, type UpdateMedicationData, type UpdatePatientLocationInfoData, type UpdatePatientMedicalInfoData, type UpdatePatientProfileData, type UpdatePatientSensitiveInfoData, type UpdatePractitionerData, type UpdatePractitionerInviteData, type UpdateProcedureData, type UpdateSyncedCalendarData, type UpdateVitalStatsData, type User, UserRole, UserService, type VitalStats, type WorkingHours, type ZoneItemData, type ZonePhotoUploadData, getFirebaseApp, getFirebaseAuth, getFirebaseDB, getFirebaseFunctions, getFirebaseInstance, getFirebaseStorage, initializeFirebase };
|
package/package.json
CHANGED
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@blackcode_sa/metaestetics-api",
|
|
3
|
-
"private": false,
|
|
4
|
-
"version": "1.12.
|
|
5
|
-
"description": "Firebase authentication service with anonymous upgrade support",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"module": "dist/index.mjs",
|
|
8
|
-
"types": "dist/index.d.ts",
|
|
9
|
-
"typesVersions": {
|
|
10
|
-
"*": {
|
|
11
|
-
"*": [
|
|
12
|
-
"./dist/index.d.ts"
|
|
13
|
-
],
|
|
14
|
-
"admin": [
|
|
15
|
-
"./dist/admin/index.d.ts"
|
|
16
|
-
],
|
|
17
|
-
"backoffice": [
|
|
18
|
-
"./dist/backoffice/index.d.ts"
|
|
19
|
-
]
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
"exports": {
|
|
23
|
-
".": {
|
|
24
|
-
"types": "./dist/index.d.ts",
|
|
25
|
-
"import": "./dist/index.mjs",
|
|
26
|
-
"require": "./dist/index.js",
|
|
27
|
-
"default": "./dist/index.js"
|
|
28
|
-
},
|
|
29
|
-
"./admin": {
|
|
30
|
-
"types": "./dist/admin/index.d.ts",
|
|
31
|
-
"import": "./dist/admin/index.mjs",
|
|
32
|
-
"require": "./dist/admin/index.js",
|
|
33
|
-
"default": "./dist/admin/index.js"
|
|
34
|
-
},
|
|
35
|
-
"./backoffice": {
|
|
36
|
-
"types": "./dist/backoffice/index.d.ts",
|
|
37
|
-
"import": "./dist/backoffice/index.mjs",
|
|
38
|
-
"require": "./dist/backoffice/index.js",
|
|
39
|
-
"default": "./dist/backoffice/index.js"
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"files": [
|
|
43
|
-
"dist",
|
|
44
|
-
"src"
|
|
45
|
-
],
|
|
46
|
-
"publishConfig": {
|
|
47
|
-
"access": "public",
|
|
48
|
-
"registry": "https://registry.npmjs.org/"
|
|
49
|
-
},
|
|
50
|
-
"keywords": [
|
|
51
|
-
"firebase",
|
|
52
|
-
"auth",
|
|
53
|
-
"authentication",
|
|
54
|
-
"anonymous"
|
|
55
|
-
],
|
|
56
|
-
"author": "Blackcode SA",
|
|
57
|
-
"license": "MIT",
|
|
58
|
-
"scripts": {
|
|
59
|
-
"clean": "
|
|
60
|
-
"build:main": "tsup src/index.ts --format cjs,esm --dts --external react-native",
|
|
61
|
-
"build:admin": "tsup src/admin/index.ts --format cjs,esm --dts --out-dir dist/admin --external react-native",
|
|
62
|
-
"build:backoffice": "tsup src/backoffice/index.ts --format cjs,esm --dts --out-dir dist/backoffice",
|
|
63
|
-
"build": "npm run clean && npm run build:main && npm run build:admin && npm run build:backoffice",
|
|
64
|
-
"dev": "tsup src/index.ts --format cjs,esm --dts --watch --external react-native",
|
|
65
|
-
"prepublishOnly": "npm run build",
|
|
66
|
-
"publish:patch": "
|
|
67
|
-
"publish:minor": "
|
|
68
|
-
"publish:major": "
|
|
69
|
-
"test": "jest",
|
|
70
|
-
"test:watch": "jest --watch",
|
|
71
|
-
"test:coverage": "jest --coverage"
|
|
72
|
-
},
|
|
73
|
-
"peerDependencies": {
|
|
74
|
-
"firebase": "^11.1.0",
|
|
75
|
-
"react": ">=16.8.0",
|
|
76
|
-
"react-native": "*"
|
|
77
|
-
},
|
|
78
|
-
"peerDependenciesMeta": {
|
|
79
|
-
"react-native": {
|
|
80
|
-
"optional": true
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
"devDependencies": {
|
|
84
|
-
"@testing-library/jest-dom": "^6.6.3",
|
|
85
|
-
"@types/jest": "^29.5.14",
|
|
86
|
-
"@types/luxon": "^3.7.1",
|
|
87
|
-
"@types/mailgun-js": "^0.22.18",
|
|
88
|
-
"@types/node": "^20.17.13",
|
|
89
|
-
"@types/react": "^19.1.0",
|
|
90
|
-
"expo-crypto": "^14.0.0",
|
|
91
|
-
"firebase-mock": "^2.3.2",
|
|
92
|
-
"jest": "^29.7.0",
|
|
93
|
-
"ts-jest": "^29.2.5",
|
|
94
|
-
"tsup": "^8.3.5",
|
|
95
|
-
"typescript": "^5.7.3"
|
|
96
|
-
},
|
|
97
|
-
"dependencies": {
|
|
98
|
-
"axios": "^1.8.3",
|
|
99
|
-
"expo-server-sdk": "^3.13.0",
|
|
100
|
-
"firebase-admin": "^13.0.2",
|
|
101
|
-
"geofire-common": "^6.0.0",
|
|
102
|
-
"luxon": "^3.7.1",
|
|
103
|
-
"tz-lookup": "^6.1.25",
|
|
104
|
-
"zod": "^3.24.1"
|
|
105
|
-
},
|
|
106
|
-
"optionalDependencies": {
|
|
107
|
-
"firebase-functions": "^6.2.0"
|
|
108
|
-
},
|
|
109
|
-
"jest": {
|
|
110
|
-
"preset": "ts-jest",
|
|
111
|
-
"testEnvironment": "node",
|
|
112
|
-
"moduleNameMapper": {
|
|
113
|
-
"^@/(.*)$": "<rootDir>/src/$1"
|
|
114
|
-
},
|
|
115
|
-
"setupFilesAfterEnv": [
|
|
116
|
-
"<rootDir>/jest.setup.ts"
|
|
117
|
-
]
|
|
118
|
-
}
|
|
119
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@blackcode_sa/metaestetics-api",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "1.12.61",
|
|
5
|
+
"description": "Firebase authentication service with anonymous upgrade support",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"module": "dist/index.mjs",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"typesVersions": {
|
|
10
|
+
"*": {
|
|
11
|
+
"*": [
|
|
12
|
+
"./dist/index.d.ts"
|
|
13
|
+
],
|
|
14
|
+
"admin": [
|
|
15
|
+
"./dist/admin/index.d.ts"
|
|
16
|
+
],
|
|
17
|
+
"backoffice": [
|
|
18
|
+
"./dist/backoffice/index.d.ts"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"import": "./dist/index.mjs",
|
|
26
|
+
"require": "./dist/index.js",
|
|
27
|
+
"default": "./dist/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./admin": {
|
|
30
|
+
"types": "./dist/admin/index.d.ts",
|
|
31
|
+
"import": "./dist/admin/index.mjs",
|
|
32
|
+
"require": "./dist/admin/index.js",
|
|
33
|
+
"default": "./dist/admin/index.js"
|
|
34
|
+
},
|
|
35
|
+
"./backoffice": {
|
|
36
|
+
"types": "./dist/backoffice/index.d.ts",
|
|
37
|
+
"import": "./dist/backoffice/index.mjs",
|
|
38
|
+
"require": "./dist/backoffice/index.js",
|
|
39
|
+
"default": "./dist/backoffice/index.js"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"src"
|
|
45
|
+
],
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public",
|
|
48
|
+
"registry": "https://registry.npmjs.org/"
|
|
49
|
+
},
|
|
50
|
+
"keywords": [
|
|
51
|
+
"firebase",
|
|
52
|
+
"auth",
|
|
53
|
+
"authentication",
|
|
54
|
+
"anonymous"
|
|
55
|
+
],
|
|
56
|
+
"author": "Blackcode SA",
|
|
57
|
+
"license": "MIT",
|
|
58
|
+
"scripts": {
|
|
59
|
+
"clean": "node -e \"const fs=require('fs');const path=require('path');const dist='dist';if(fs.existsSync(dist))fs.rmSync(dist,{recursive:true,force:true})\"",
|
|
60
|
+
"build:main": "tsup src/index.ts --format cjs,esm --dts --external react-native",
|
|
61
|
+
"build:admin": "tsup src/admin/index.ts --format cjs,esm --dts --out-dir dist/admin --external react-native",
|
|
62
|
+
"build:backoffice": "tsup src/backoffice/index.ts --format cjs,esm --dts --out-dir dist/backoffice",
|
|
63
|
+
"build": "npm run clean && npm run build:main && npm run build:admin && npm run build:backoffice",
|
|
64
|
+
"dev": "tsup src/index.ts --format cjs,esm --dts --watch --external react-native",
|
|
65
|
+
"prepublishOnly": "npm run build",
|
|
66
|
+
"publish:patch": "node scripts/publish.js patch",
|
|
67
|
+
"publish:minor": "node scripts/publish.js minor",
|
|
68
|
+
"publish:major": "node scripts/publish.js major",
|
|
69
|
+
"test": "jest",
|
|
70
|
+
"test:watch": "jest --watch",
|
|
71
|
+
"test:coverage": "jest --coverage"
|
|
72
|
+
},
|
|
73
|
+
"peerDependencies": {
|
|
74
|
+
"firebase": "^11.1.0",
|
|
75
|
+
"react": ">=16.8.0",
|
|
76
|
+
"react-native": "*"
|
|
77
|
+
},
|
|
78
|
+
"peerDependenciesMeta": {
|
|
79
|
+
"react-native": {
|
|
80
|
+
"optional": true
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"devDependencies": {
|
|
84
|
+
"@testing-library/jest-dom": "^6.6.3",
|
|
85
|
+
"@types/jest": "^29.5.14",
|
|
86
|
+
"@types/luxon": "^3.7.1",
|
|
87
|
+
"@types/mailgun-js": "^0.22.18",
|
|
88
|
+
"@types/node": "^20.17.13",
|
|
89
|
+
"@types/react": "^19.1.0",
|
|
90
|
+
"expo-crypto": "^14.0.0",
|
|
91
|
+
"firebase-mock": "^2.3.2",
|
|
92
|
+
"jest": "^29.7.0",
|
|
93
|
+
"ts-jest": "^29.2.5",
|
|
94
|
+
"tsup": "^8.3.5",
|
|
95
|
+
"typescript": "^5.7.3"
|
|
96
|
+
},
|
|
97
|
+
"dependencies": {
|
|
98
|
+
"axios": "^1.8.3",
|
|
99
|
+
"expo-server-sdk": "^3.13.0",
|
|
100
|
+
"firebase-admin": "^13.0.2",
|
|
101
|
+
"geofire-common": "^6.0.0",
|
|
102
|
+
"luxon": "^3.7.1",
|
|
103
|
+
"tz-lookup": "^6.1.25",
|
|
104
|
+
"zod": "^3.24.1"
|
|
105
|
+
},
|
|
106
|
+
"optionalDependencies": {
|
|
107
|
+
"firebase-functions": "^6.2.0"
|
|
108
|
+
},
|
|
109
|
+
"jest": {
|
|
110
|
+
"preset": "ts-jest",
|
|
111
|
+
"testEnvironment": "node",
|
|
112
|
+
"moduleNameMapper": {
|
|
113
|
+
"^@/(.*)$": "<rootDir>/src/$1"
|
|
114
|
+
},
|
|
115
|
+
"setupFilesAfterEnv": [
|
|
116
|
+
"<rootDir>/jest.setup.ts"
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export const collection = jest.fn();
|
|
2
|
-
export const doc = jest.fn();
|
|
3
|
-
export const getDoc = jest.fn();
|
|
4
|
-
export const getDocs = jest.fn();
|
|
5
|
-
export const addDoc = jest.fn();
|
|
6
|
-
export const updateDoc = jest.fn();
|
|
7
|
-
export const query = jest.fn();
|
|
8
|
-
export const where = jest.fn();
|
|
9
|
-
export const arrayUnion = jest.fn();
|
|
10
|
-
export const arrayRemove = jest.fn();
|
|
1
|
+
export const collection = jest.fn();
|
|
2
|
+
export const doc = jest.fn();
|
|
3
|
+
export const getDoc = jest.fn();
|
|
4
|
+
export const getDocs = jest.fn();
|
|
5
|
+
export const addDoc = jest.fn();
|
|
6
|
+
export const updateDoc = jest.fn();
|
|
7
|
+
export const query = jest.fn();
|
|
8
|
+
export const where = jest.fn();
|
|
9
|
+
export const arrayUnion = jest.fn();
|
|
10
|
+
export const arrayRemove = jest.fn();
|
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
# Data Aggregation Services
|
|
2
|
-
|
|
3
|
-
This directory contains services responsible for maintaining data consistency across related Firestore collections. These aggregation services are typically used by Cloud Functions that react to document changes (create/update/delete operations).
|
|
4
|
-
|
|
5
|
-
## Purpose
|
|
6
|
-
|
|
7
|
-
When a document is created, updated, or deleted in one collection, related documents in other collections often need to be updated to maintain data consistency and support efficient querying. For example:
|
|
8
|
-
|
|
9
|
-
- When a practitioner is updated, their information needs to be updated in associated clinics
|
|
10
|
-
- When a procedure is added, summaries need to be added to both practitioner and clinic documents
|
|
11
|
-
- When a clinic is deleted, related calendar events need to be canceled
|
|
12
|
-
|
|
13
|
-
Rather than embedding this logic in the main service classes, these aggregation services keep the concerns separate and can be independently triggered by Cloud Functions.
|
|
14
|
-
|
|
15
|
-
## Design Pattern
|
|
16
|
-
|
|
17
|
-
Each aggregation service:
|
|
18
|
-
|
|
19
|
-
1. Handles a specific domain entity (clinic, practitioner, procedure, etc.)
|
|
20
|
-
2. Contains methods organized by event type (creation, update, deletion)
|
|
21
|
-
3. Focuses solely on updating related collections
|
|
22
|
-
4. Uses transactions where appropriate to ensure consistency
|
|
23
|
-
|
|
24
|
-
## Available Aggregation Services
|
|
25
|
-
|
|
26
|
-
- `ClinicAggregationService`: Handles clinic-related aggregations
|
|
27
|
-
- `PractitionerAggregationService`: Handles practitioner-related aggregations
|
|
28
|
-
- `ProcedureAggregationService`: Handles procedure-related aggregations
|
|
29
|
-
- `PatientAggregationService`: Handles patient-related aggregations
|
|
30
|
-
|
|
31
|
-
## Implementation Notes
|
|
32
|
-
|
|
33
|
-
- These services are for admin/internal use only
|
|
34
|
-
- They operate with admin Firestore privileges
|
|
35
|
-
- They are designed for use by Cloud Functions, not directly by client applications
|
|
36
|
-
- They include detailed logging for monitoring and debugging
|
|
37
|
-
|
|
38
|
-
## Example Usage
|
|
39
|
-
|
|
40
|
-
In a Cloud Function:
|
|
41
|
-
|
|
42
|
-
```typescript
|
|
43
|
-
exports.onPractitionerUpdate = functions.firestore
|
|
44
|
-
.document('practitioners/{practitionerId}')
|
|
45
|
-
.onUpdate(async (change, context) => {
|
|
46
|
-
const beforeData = change.before.data();
|
|
47
|
-
const afterData = change.after.data();
|
|
48
|
-
const practitionerId = context.params.practitionerId;
|
|
49
|
-
|
|
50
|
-
// Only run aggregation if specific fields changed
|
|
51
|
-
if (beforeData.basicInfo.firstName !== afterData.basicInfo.firstName ||
|
|
52
|
-
beforeData.basicInfo.lastName !== afterData.basicInfo.lastName ||
|
|
53
|
-
beforeData.basicInfo.profileImageUrl !== afterData.basicInfo.profileImageUrl) {
|
|
54
|
-
|
|
55
|
-
const aggregationService = new PractitionerAggregationService();
|
|
56
|
-
|
|
57
|
-
// Build doctorInfo object from updated data
|
|
58
|
-
const doctorInfo = {
|
|
59
|
-
id: practitionerId,
|
|
60
|
-
name: `${afterData.basicInfo.firstName} ${afterData.basicInfo.lastName}`,
|
|
61
|
-
photo: afterData.basicInfo.profileImageUrl || '',
|
|
62
|
-
// other fields...
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
// Update practitioner info in all related clinics
|
|
66
|
-
await aggregationService.updatePractitionerInfoInClinics(
|
|
67
|
-
afterData.clinics,
|
|
68
|
-
doctorInfo
|
|
69
|
-
);
|
|
70
|
-
|
|
71
|
-
// Update practitioner info in all related procedures
|
|
72
|
-
await aggregationService.updatePractitionerInfoInProcedures(
|
|
73
|
-
afterData.procedures,
|
|
74
|
-
doctorInfo
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
</rewritten_file>
|
|
79
|
-
```
|
|
1
|
+
# Data Aggregation Services
|
|
2
|
+
|
|
3
|
+
This directory contains services responsible for maintaining data consistency across related Firestore collections. These aggregation services are typically used by Cloud Functions that react to document changes (create/update/delete operations).
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
When a document is created, updated, or deleted in one collection, related documents in other collections often need to be updated to maintain data consistency and support efficient querying. For example:
|
|
8
|
+
|
|
9
|
+
- When a practitioner is updated, their information needs to be updated in associated clinics
|
|
10
|
+
- When a procedure is added, summaries need to be added to both practitioner and clinic documents
|
|
11
|
+
- When a clinic is deleted, related calendar events need to be canceled
|
|
12
|
+
|
|
13
|
+
Rather than embedding this logic in the main service classes, these aggregation services keep the concerns separate and can be independently triggered by Cloud Functions.
|
|
14
|
+
|
|
15
|
+
## Design Pattern
|
|
16
|
+
|
|
17
|
+
Each aggregation service:
|
|
18
|
+
|
|
19
|
+
1. Handles a specific domain entity (clinic, practitioner, procedure, etc.)
|
|
20
|
+
2. Contains methods organized by event type (creation, update, deletion)
|
|
21
|
+
3. Focuses solely on updating related collections
|
|
22
|
+
4. Uses transactions where appropriate to ensure consistency
|
|
23
|
+
|
|
24
|
+
## Available Aggregation Services
|
|
25
|
+
|
|
26
|
+
- `ClinicAggregationService`: Handles clinic-related aggregations
|
|
27
|
+
- `PractitionerAggregationService`: Handles practitioner-related aggregations
|
|
28
|
+
- `ProcedureAggregationService`: Handles procedure-related aggregations
|
|
29
|
+
- `PatientAggregationService`: Handles patient-related aggregations
|
|
30
|
+
|
|
31
|
+
## Implementation Notes
|
|
32
|
+
|
|
33
|
+
- These services are for admin/internal use only
|
|
34
|
+
- They operate with admin Firestore privileges
|
|
35
|
+
- They are designed for use by Cloud Functions, not directly by client applications
|
|
36
|
+
- They include detailed logging for monitoring and debugging
|
|
37
|
+
|
|
38
|
+
## Example Usage
|
|
39
|
+
|
|
40
|
+
In a Cloud Function:
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
exports.onPractitionerUpdate = functions.firestore
|
|
44
|
+
.document('practitioners/{practitionerId}')
|
|
45
|
+
.onUpdate(async (change, context) => {
|
|
46
|
+
const beforeData = change.before.data();
|
|
47
|
+
const afterData = change.after.data();
|
|
48
|
+
const practitionerId = context.params.practitionerId;
|
|
49
|
+
|
|
50
|
+
// Only run aggregation if specific fields changed
|
|
51
|
+
if (beforeData.basicInfo.firstName !== afterData.basicInfo.firstName ||
|
|
52
|
+
beforeData.basicInfo.lastName !== afterData.basicInfo.lastName ||
|
|
53
|
+
beforeData.basicInfo.profileImageUrl !== afterData.basicInfo.profileImageUrl) {
|
|
54
|
+
|
|
55
|
+
const aggregationService = new PractitionerAggregationService();
|
|
56
|
+
|
|
57
|
+
// Build doctorInfo object from updated data
|
|
58
|
+
const doctorInfo = {
|
|
59
|
+
id: practitionerId,
|
|
60
|
+
name: `${afterData.basicInfo.firstName} ${afterData.basicInfo.lastName}`,
|
|
61
|
+
photo: afterData.basicInfo.profileImageUrl || '',
|
|
62
|
+
// other fields...
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// Update practitioner info in all related clinics
|
|
66
|
+
await aggregationService.updatePractitionerInfoInClinics(
|
|
67
|
+
afterData.clinics,
|
|
68
|
+
doctorInfo
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
// Update practitioner info in all related procedures
|
|
72
|
+
await aggregationService.updatePractitionerInfoInProcedures(
|
|
73
|
+
afterData.procedures,
|
|
74
|
+
doctorInfo
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
</rewritten_file>
|
|
79
|
+
```
|