@blackcode_sa/metaestetics-api 1.12.62 → 1.12.64
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 +4 -2
- package/dist/admin/index.d.ts +4 -2
- package/dist/admin/index.js +4 -45
- package/dist/admin/index.mjs +4 -45
- package/dist/backoffice/index.d.mts +86 -1
- package/dist/backoffice/index.d.ts +86 -1
- package/dist/backoffice/index.js +308 -0
- package/dist/backoffice/index.mjs +306 -0
- package/dist/index.d.mts +99 -3
- package/dist/index.d.ts +99 -3
- package/dist/index.js +545 -281
- package/dist/index.mjs +867 -603
- 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 -1844
- 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 -689
- 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 +11 -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 +1083 -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 +163 -161
- package/src/backoffice/validations/index.ts +1 -1
- package/src/backoffice/validations/schemas.ts +164 -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 +2505 -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 -683
- 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 +481 -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 +275 -273
- package/src/types/patient/medical-info.types.ts +152 -152
- package/src/types/patient/patient-requirements.ts +92 -92
- 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 -132
- 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 -84
- package/src/validations/patient/token.schema.ts +29 -29
- package/src/validations/patient.schema.ts +217 -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 -195
- package/src/validations/schemas.ts +104 -104
- package/src/validations/shared.schema.ts +78 -78
package/dist/admin/index.d.mts
CHANGED
|
@@ -70,7 +70,6 @@ interface PractitionerReview extends BaseReview {
|
|
|
70
70
|
/**
|
|
71
71
|
* Procedure review interface
|
|
72
72
|
* @description Full review for a medical procedure
|
|
73
|
-
* Used for both main and extended procedures
|
|
74
73
|
*/
|
|
75
74
|
interface ProcedureReview extends BaseReview {
|
|
76
75
|
procedureId: string;
|
|
@@ -139,7 +138,6 @@ interface Review {
|
|
|
139
138
|
clinicReview?: ClinicReview;
|
|
140
139
|
practitionerReview?: PractitionerReview;
|
|
141
140
|
procedureReview?: ProcedureReview;
|
|
142
|
-
extendedProcedureReviews?: ProcedureReview[];
|
|
143
141
|
overallComment: string;
|
|
144
142
|
overallRating: number;
|
|
145
143
|
}
|
|
@@ -689,6 +687,8 @@ interface Technology {
|
|
|
689
687
|
benefits: TreatmentBenefitDynamic[];
|
|
690
688
|
certificationRequirement: CertificationRequirement;
|
|
691
689
|
documentationTemplates?: TechnologyDocumentationTemplate[];
|
|
690
|
+
/** Media ID of the default photo template image for this technology */
|
|
691
|
+
photoTemplate?: string;
|
|
692
692
|
isActive: boolean;
|
|
693
693
|
createdAt: Date;
|
|
694
694
|
updatedAt: Date;
|
|
@@ -1517,6 +1517,8 @@ interface PatientProfile {
|
|
|
1517
1517
|
clinics: PatientClinic[];
|
|
1518
1518
|
doctorIds: string[];
|
|
1519
1519
|
clinicIds: string[];
|
|
1520
|
+
/** IDs of dismissed next steps recommendations (format: appointmentId:recommendationIndex) */
|
|
1521
|
+
dismissedNextStepsRecommendations?: string[];
|
|
1520
1522
|
createdAt: Timestamp;
|
|
1521
1523
|
updatedAt: Timestamp;
|
|
1522
1524
|
}
|
package/dist/admin/index.d.ts
CHANGED
|
@@ -70,7 +70,6 @@ interface PractitionerReview extends BaseReview {
|
|
|
70
70
|
/**
|
|
71
71
|
* Procedure review interface
|
|
72
72
|
* @description Full review for a medical procedure
|
|
73
|
-
* Used for both main and extended procedures
|
|
74
73
|
*/
|
|
75
74
|
interface ProcedureReview extends BaseReview {
|
|
76
75
|
procedureId: string;
|
|
@@ -139,7 +138,6 @@ interface Review {
|
|
|
139
138
|
clinicReview?: ClinicReview;
|
|
140
139
|
practitionerReview?: PractitionerReview;
|
|
141
140
|
procedureReview?: ProcedureReview;
|
|
142
|
-
extendedProcedureReviews?: ProcedureReview[];
|
|
143
141
|
overallComment: string;
|
|
144
142
|
overallRating: number;
|
|
145
143
|
}
|
|
@@ -689,6 +687,8 @@ interface Technology {
|
|
|
689
687
|
benefits: TreatmentBenefitDynamic[];
|
|
690
688
|
certificationRequirement: CertificationRequirement;
|
|
691
689
|
documentationTemplates?: TechnologyDocumentationTemplate[];
|
|
690
|
+
/** Media ID of the default photo template image for this technology */
|
|
691
|
+
photoTemplate?: string;
|
|
692
692
|
isActive: boolean;
|
|
693
693
|
createdAt: Date;
|
|
694
694
|
updatedAt: Date;
|
|
@@ -1517,6 +1517,8 @@ interface PatientProfile {
|
|
|
1517
1517
|
clinics: PatientClinic[];
|
|
1518
1518
|
doctorIds: string[];
|
|
1519
1519
|
clinicIds: string[];
|
|
1520
|
+
/** IDs of dismissed next steps recommendations (format: appointmentId:recommendationIndex) */
|
|
1521
|
+
dismissedNextStepsRecommendations?: string[];
|
|
1520
1522
|
createdAt: Timestamp;
|
|
1521
1523
|
updatedAt: Timestamp;
|
|
1522
1524
|
}
|
package/dist/admin/index.js
CHANGED
|
@@ -6375,16 +6375,6 @@ var ReviewsAggregationService = class {
|
|
|
6375
6375
|
this.updateProcedureReviewInfo(review.procedureReview.procedureId)
|
|
6376
6376
|
);
|
|
6377
6377
|
}
|
|
6378
|
-
if (review.extendedProcedureReviews && review.extendedProcedureReviews.length > 0) {
|
|
6379
|
-
console.log(
|
|
6380
|
-
`[ReviewsAggregationService] Processing ${review.extendedProcedureReviews.length} extended procedure reviews`
|
|
6381
|
-
);
|
|
6382
|
-
review.extendedProcedureReviews.forEach((extendedReview) => {
|
|
6383
|
-
updatePromises.push(
|
|
6384
|
-
this.updateProcedureReviewInfo(extendedReview.procedureId)
|
|
6385
|
-
);
|
|
6386
|
-
});
|
|
6387
|
-
}
|
|
6388
6378
|
await Promise.all(updatePromises);
|
|
6389
6379
|
console.log(
|
|
6390
6380
|
`[ReviewsAggregationService] Successfully processed review: ${review.id}`
|
|
@@ -6427,20 +6417,6 @@ var ReviewsAggregationService = class {
|
|
|
6427
6417
|
)
|
|
6428
6418
|
);
|
|
6429
6419
|
}
|
|
6430
|
-
if (review.extendedProcedureReviews && review.extendedProcedureReviews.length > 0) {
|
|
6431
|
-
console.log(
|
|
6432
|
-
`[ReviewsAggregationService] Processing deletion of ${review.extendedProcedureReviews.length} extended procedure reviews`
|
|
6433
|
-
);
|
|
6434
|
-
review.extendedProcedureReviews.forEach((extendedReview) => {
|
|
6435
|
-
updatePromises.push(
|
|
6436
|
-
this.updateProcedureReviewInfo(
|
|
6437
|
-
extendedReview.procedureId,
|
|
6438
|
-
extendedReview,
|
|
6439
|
-
true
|
|
6440
|
-
)
|
|
6441
|
-
);
|
|
6442
|
-
});
|
|
6443
|
-
}
|
|
6444
6420
|
await Promise.all(updatePromises);
|
|
6445
6421
|
console.log(
|
|
6446
6422
|
`[ReviewsAggregationService] Successfully processed deleted review: ${review.id}`
|
|
@@ -6658,21 +6634,8 @@ var ReviewsAggregationService = class {
|
|
|
6658
6634
|
valueForMoney: 0,
|
|
6659
6635
|
recommendationPercentage: 0
|
|
6660
6636
|
};
|
|
6661
|
-
const
|
|
6662
|
-
|
|
6663
|
-
const procedureReviews = [];
|
|
6664
|
-
reviews.forEach((review) => {
|
|
6665
|
-
if (review.procedureReview && review.procedureReview.procedureId === procedureId) {
|
|
6666
|
-
procedureReviews.push(review.procedureReview);
|
|
6667
|
-
}
|
|
6668
|
-
if (review.extendedProcedureReviews && review.extendedProcedureReviews.length > 0) {
|
|
6669
|
-
const matchingExtended = review.extendedProcedureReviews.filter(
|
|
6670
|
-
(extReview) => extReview.procedureId === procedureId
|
|
6671
|
-
);
|
|
6672
|
-
procedureReviews.push(...matchingExtended);
|
|
6673
|
-
}
|
|
6674
|
-
});
|
|
6675
|
-
if (procedureReviews.length === 0) {
|
|
6637
|
+
const reviewsQuery = await this.db.collection(REVIEWS_COLLECTION).where("procedureReview.procedureId", "==", procedureId).get();
|
|
6638
|
+
if (isRemoval && reviewsQuery.size <= 1 || reviewsQuery.empty) {
|
|
6676
6639
|
const updatedReviewInfo2 = {
|
|
6677
6640
|
totalReviews: 0,
|
|
6678
6641
|
averageRating: 0,
|
|
@@ -6692,6 +6655,8 @@ var ReviewsAggregationService = class {
|
|
|
6692
6655
|
);
|
|
6693
6656
|
return updatedReviewInfo2;
|
|
6694
6657
|
}
|
|
6658
|
+
const reviews = reviewsQuery.docs.map((doc) => doc.data());
|
|
6659
|
+
const procedureReviews = reviews.map((review) => review.procedureReview).filter((review) => review !== void 0);
|
|
6695
6660
|
let totalRating = 0;
|
|
6696
6661
|
let totalEffectivenessOfTreatment = 0;
|
|
6697
6662
|
let totalOutcomeExplanation = 0;
|
|
@@ -6785,16 +6750,10 @@ var ReviewsAggregationService = class {
|
|
|
6785
6750
|
if (review.procedureReview) {
|
|
6786
6751
|
review.procedureReview.isVerified = true;
|
|
6787
6752
|
}
|
|
6788
|
-
if (review.extendedProcedureReviews && review.extendedProcedureReviews.length > 0) {
|
|
6789
|
-
review.extendedProcedureReviews.forEach((extReview) => {
|
|
6790
|
-
extReview.isVerified = true;
|
|
6791
|
-
});
|
|
6792
|
-
}
|
|
6793
6753
|
batch.update(reviewRef, {
|
|
6794
6754
|
clinicReview: review.clinicReview,
|
|
6795
6755
|
practitionerReview: review.practitionerReview,
|
|
6796
6756
|
procedureReview: review.procedureReview,
|
|
6797
|
-
extendedProcedureReviews: review.extendedProcedureReviews,
|
|
6798
6757
|
updatedAt: admin13.firestore.FieldValue.serverTimestamp()
|
|
6799
6758
|
});
|
|
6800
6759
|
await batch.commit();
|
package/dist/admin/index.mjs
CHANGED
|
@@ -6313,16 +6313,6 @@ var ReviewsAggregationService = class {
|
|
|
6313
6313
|
this.updateProcedureReviewInfo(review.procedureReview.procedureId)
|
|
6314
6314
|
);
|
|
6315
6315
|
}
|
|
6316
|
-
if (review.extendedProcedureReviews && review.extendedProcedureReviews.length > 0) {
|
|
6317
|
-
console.log(
|
|
6318
|
-
`[ReviewsAggregationService] Processing ${review.extendedProcedureReviews.length} extended procedure reviews`
|
|
6319
|
-
);
|
|
6320
|
-
review.extendedProcedureReviews.forEach((extendedReview) => {
|
|
6321
|
-
updatePromises.push(
|
|
6322
|
-
this.updateProcedureReviewInfo(extendedReview.procedureId)
|
|
6323
|
-
);
|
|
6324
|
-
});
|
|
6325
|
-
}
|
|
6326
6316
|
await Promise.all(updatePromises);
|
|
6327
6317
|
console.log(
|
|
6328
6318
|
`[ReviewsAggregationService] Successfully processed review: ${review.id}`
|
|
@@ -6365,20 +6355,6 @@ var ReviewsAggregationService = class {
|
|
|
6365
6355
|
)
|
|
6366
6356
|
);
|
|
6367
6357
|
}
|
|
6368
|
-
if (review.extendedProcedureReviews && review.extendedProcedureReviews.length > 0) {
|
|
6369
|
-
console.log(
|
|
6370
|
-
`[ReviewsAggregationService] Processing deletion of ${review.extendedProcedureReviews.length} extended procedure reviews`
|
|
6371
|
-
);
|
|
6372
|
-
review.extendedProcedureReviews.forEach((extendedReview) => {
|
|
6373
|
-
updatePromises.push(
|
|
6374
|
-
this.updateProcedureReviewInfo(
|
|
6375
|
-
extendedReview.procedureId,
|
|
6376
|
-
extendedReview,
|
|
6377
|
-
true
|
|
6378
|
-
)
|
|
6379
|
-
);
|
|
6380
|
-
});
|
|
6381
|
-
}
|
|
6382
6358
|
await Promise.all(updatePromises);
|
|
6383
6359
|
console.log(
|
|
6384
6360
|
`[ReviewsAggregationService] Successfully processed deleted review: ${review.id}`
|
|
@@ -6596,21 +6572,8 @@ var ReviewsAggregationService = class {
|
|
|
6596
6572
|
valueForMoney: 0,
|
|
6597
6573
|
recommendationPercentage: 0
|
|
6598
6574
|
};
|
|
6599
|
-
const
|
|
6600
|
-
|
|
6601
|
-
const procedureReviews = [];
|
|
6602
|
-
reviews.forEach((review) => {
|
|
6603
|
-
if (review.procedureReview && review.procedureReview.procedureId === procedureId) {
|
|
6604
|
-
procedureReviews.push(review.procedureReview);
|
|
6605
|
-
}
|
|
6606
|
-
if (review.extendedProcedureReviews && review.extendedProcedureReviews.length > 0) {
|
|
6607
|
-
const matchingExtended = review.extendedProcedureReviews.filter(
|
|
6608
|
-
(extReview) => extReview.procedureId === procedureId
|
|
6609
|
-
);
|
|
6610
|
-
procedureReviews.push(...matchingExtended);
|
|
6611
|
-
}
|
|
6612
|
-
});
|
|
6613
|
-
if (procedureReviews.length === 0) {
|
|
6575
|
+
const reviewsQuery = await this.db.collection(REVIEWS_COLLECTION).where("procedureReview.procedureId", "==", procedureId).get();
|
|
6576
|
+
if (isRemoval && reviewsQuery.size <= 1 || reviewsQuery.empty) {
|
|
6614
6577
|
const updatedReviewInfo2 = {
|
|
6615
6578
|
totalReviews: 0,
|
|
6616
6579
|
averageRating: 0,
|
|
@@ -6630,6 +6593,8 @@ var ReviewsAggregationService = class {
|
|
|
6630
6593
|
);
|
|
6631
6594
|
return updatedReviewInfo2;
|
|
6632
6595
|
}
|
|
6596
|
+
const reviews = reviewsQuery.docs.map((doc) => doc.data());
|
|
6597
|
+
const procedureReviews = reviews.map((review) => review.procedureReview).filter((review) => review !== void 0);
|
|
6633
6598
|
let totalRating = 0;
|
|
6634
6599
|
let totalEffectivenessOfTreatment = 0;
|
|
6635
6600
|
let totalOutcomeExplanation = 0;
|
|
@@ -6723,16 +6688,10 @@ var ReviewsAggregationService = class {
|
|
|
6723
6688
|
if (review.procedureReview) {
|
|
6724
6689
|
review.procedureReview.isVerified = true;
|
|
6725
6690
|
}
|
|
6726
|
-
if (review.extendedProcedureReviews && review.extendedProcedureReviews.length > 0) {
|
|
6727
|
-
review.extendedProcedureReviews.forEach((extReview) => {
|
|
6728
|
-
extReview.isVerified = true;
|
|
6729
|
-
});
|
|
6730
|
-
}
|
|
6731
6691
|
batch.update(reviewRef, {
|
|
6732
6692
|
clinicReview: review.clinicReview,
|
|
6733
6693
|
practitionerReview: review.practitionerReview,
|
|
6734
6694
|
procedureReview: review.procedureReview,
|
|
6735
|
-
extendedProcedureReviews: review.extendedProcedureReviews,
|
|
6736
6695
|
updatedAt: admin13.firestore.FieldValue.serverTimestamp()
|
|
6737
6696
|
});
|
|
6738
6697
|
await batch.commit();
|
|
@@ -1005,6 +1005,8 @@ interface Technology {
|
|
|
1005
1005
|
benefits: TreatmentBenefitDynamic[];
|
|
1006
1006
|
certificationRequirement: CertificationRequirement;
|
|
1007
1007
|
documentationTemplates?: TechnologyDocumentationTemplate[];
|
|
1008
|
+
/** Media ID of the default photo template image for this technology */
|
|
1009
|
+
photoTemplate?: string;
|
|
1008
1010
|
isActive: boolean;
|
|
1009
1011
|
createdAt: Date;
|
|
1010
1012
|
updatedAt: Date;
|
|
@@ -1168,10 +1170,86 @@ interface ProcedureProduct {
|
|
|
1168
1170
|
isDefault?: boolean;
|
|
1169
1171
|
}
|
|
1170
1172
|
|
|
1173
|
+
/**
|
|
1174
|
+
* Enum for media access levels
|
|
1175
|
+
*/
|
|
1176
|
+
declare enum MediaAccessLevel {
|
|
1177
|
+
PUBLIC = "public",
|
|
1178
|
+
PRIVATE = "private",
|
|
1179
|
+
CONFIDENTIAL = "confidential"
|
|
1180
|
+
}
|
|
1171
1181
|
/**
|
|
1172
1182
|
* Type that allows a field to be either a URL string or a File object
|
|
1173
1183
|
*/
|
|
1174
1184
|
type MediaResource = string | File | Blob;
|
|
1185
|
+
/**
|
|
1186
|
+
* Media file metadata interface
|
|
1187
|
+
*/
|
|
1188
|
+
interface MediaMetadata {
|
|
1189
|
+
id: string;
|
|
1190
|
+
name: string;
|
|
1191
|
+
url: string;
|
|
1192
|
+
contentType: string;
|
|
1193
|
+
size: number;
|
|
1194
|
+
createdAt: Timestamp;
|
|
1195
|
+
accessLevel: MediaAccessLevel;
|
|
1196
|
+
ownerId: string;
|
|
1197
|
+
collectionName: string;
|
|
1198
|
+
path: string;
|
|
1199
|
+
updatedAt?: Timestamp;
|
|
1200
|
+
}
|
|
1201
|
+
declare class MediaService extends BaseService {
|
|
1202
|
+
constructor(...args: ConstructorParameters<typeof BaseService>);
|
|
1203
|
+
/**
|
|
1204
|
+
* Upload a media file, store its metadata, and return the metadata including the URL.
|
|
1205
|
+
* @param file - The file to upload.
|
|
1206
|
+
* @param ownerId - ID of the owner (user, patient, clinic, etc.).
|
|
1207
|
+
* @param accessLevel - Access level (public, private, confidential).
|
|
1208
|
+
* @param collectionName - The logical collection name this media belongs to (e.g., 'patient_profile_pictures', 'clinic_logos').
|
|
1209
|
+
* @param originalFileName - Optional: the original name of the file, if not using file.name.
|
|
1210
|
+
* @returns Promise with the media metadata.
|
|
1211
|
+
*/
|
|
1212
|
+
uploadMedia(file: File | Blob, ownerId: string, accessLevel: MediaAccessLevel, collectionName: string, originalFileName?: string): Promise<MediaMetadata>;
|
|
1213
|
+
/**
|
|
1214
|
+
* Get media metadata from Firestore by its ID.
|
|
1215
|
+
* @param mediaId - ID of the media.
|
|
1216
|
+
* @returns Promise with the media metadata or null if not found.
|
|
1217
|
+
*/
|
|
1218
|
+
getMediaMetadata(mediaId: string): Promise<MediaMetadata | null>;
|
|
1219
|
+
/**
|
|
1220
|
+
* Get media metadata from Firestore by its public URL.
|
|
1221
|
+
* @param url - The public URL of the media file.
|
|
1222
|
+
* @returns Promise with the media metadata or null if not found.
|
|
1223
|
+
*/
|
|
1224
|
+
getMediaMetadataByUrl(url: string): Promise<MediaMetadata | null>;
|
|
1225
|
+
/**
|
|
1226
|
+
* Delete media from storage and remove metadata from Firestore.
|
|
1227
|
+
* @param mediaId - ID of the media to delete.
|
|
1228
|
+
*/
|
|
1229
|
+
deleteMedia(mediaId: string): Promise<void>;
|
|
1230
|
+
/**
|
|
1231
|
+
* Update media access level. This involves moving the file in Firebase Storage
|
|
1232
|
+
* to a new path reflecting the new access level, and updating its metadata.
|
|
1233
|
+
* @param mediaId - ID of the media to update.
|
|
1234
|
+
* @param newAccessLevel - New access level.
|
|
1235
|
+
* @returns Promise with the updated media metadata, or null if metadata not found.
|
|
1236
|
+
*/
|
|
1237
|
+
updateMediaAccessLevel(mediaId: string, newAccessLevel: MediaAccessLevel): Promise<MediaMetadata | null>;
|
|
1238
|
+
/**
|
|
1239
|
+
* List all media for an owner, optionally filtered by collection and access level.
|
|
1240
|
+
* @param ownerId - ID of the owner.
|
|
1241
|
+
* @param collectionName - Optional: Filter by collection name.
|
|
1242
|
+
* @param accessLevel - Optional: Filter by access level.
|
|
1243
|
+
* @param count - Optional: Number of items to fetch.
|
|
1244
|
+
* @param startAfterId - Optional: ID of the document to start after (for pagination).
|
|
1245
|
+
*/
|
|
1246
|
+
listMedia(ownerId: string, collectionName?: string, accessLevel?: MediaAccessLevel, count?: number, startAfterId?: string): Promise<MediaMetadata[]>;
|
|
1247
|
+
/**
|
|
1248
|
+
* Get download URL for media. (Convenience, as URL is in metadata)
|
|
1249
|
+
* @param mediaId - ID of the media.
|
|
1250
|
+
*/
|
|
1251
|
+
getMediaDownloadUrl(mediaId: string): Promise<string | null>;
|
|
1252
|
+
}
|
|
1175
1253
|
|
|
1176
1254
|
/**
|
|
1177
1255
|
* Aggregated summary information for a procedure.
|
|
@@ -1944,6 +2022,7 @@ declare class TechnologyService extends BaseService implements ITechnologyServic
|
|
|
1944
2022
|
benefits: TreatmentBenefitDynamic[];
|
|
1945
2023
|
certificationRequirement: CertificationRequirement;
|
|
1946
2024
|
documentationTemplates?: TechnologyDocumentationTemplate[] | undefined;
|
|
2025
|
+
photoTemplate?: string | undefined;
|
|
1947
2026
|
id: string;
|
|
1948
2027
|
}>;
|
|
1949
2028
|
/**
|
|
@@ -5077,6 +5156,7 @@ declare const technologySchema: z.ZodObject<{
|
|
|
5077
5156
|
minimumLevel: CertificationLevel;
|
|
5078
5157
|
requiredSpecialties?: CertificationSpecialty[] | undefined;
|
|
5079
5158
|
}>;
|
|
5159
|
+
photoTemplate: z.ZodOptional<z.ZodString>;
|
|
5080
5160
|
isActive: z.ZodDefault<z.ZodBoolean>;
|
|
5081
5161
|
}, "strip", z.ZodTypeAny, {
|
|
5082
5162
|
name: string;
|
|
@@ -5224,6 +5304,7 @@ declare const technologySchema: z.ZodObject<{
|
|
|
5224
5304
|
}[];
|
|
5225
5305
|
description?: string | undefined;
|
|
5226
5306
|
technicalDetails?: string | undefined;
|
|
5307
|
+
photoTemplate?: string | undefined;
|
|
5227
5308
|
}, {
|
|
5228
5309
|
name: string;
|
|
5229
5310
|
family: ProcedureFamily;
|
|
@@ -5370,6 +5451,7 @@ declare const technologySchema: z.ZodObject<{
|
|
|
5370
5451
|
isActive?: boolean | undefined;
|
|
5371
5452
|
}[];
|
|
5372
5453
|
} | undefined;
|
|
5454
|
+
photoTemplate?: string | undefined;
|
|
5373
5455
|
}>;
|
|
5374
5456
|
/**
|
|
5375
5457
|
* Category validation schema
|
|
@@ -6090,6 +6172,7 @@ declare const technologyUpdateSchema: z.ZodObject<{
|
|
|
6090
6172
|
minimumLevel: CertificationLevel;
|
|
6091
6173
|
requiredSpecialties?: CertificationSpecialty[] | undefined;
|
|
6092
6174
|
}>>;
|
|
6175
|
+
photoTemplate: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
6093
6176
|
isActive: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
6094
6177
|
}, "strip", z.ZodTypeAny, {
|
|
6095
6178
|
name?: string | undefined;
|
|
@@ -6237,6 +6320,7 @@ declare const technologyUpdateSchema: z.ZodObject<{
|
|
|
6237
6320
|
description?: string | undefined;
|
|
6238
6321
|
tags?: string[] | undefined;
|
|
6239
6322
|
}[] | undefined;
|
|
6323
|
+
photoTemplate?: string | undefined;
|
|
6240
6324
|
}, {
|
|
6241
6325
|
name?: string | undefined;
|
|
6242
6326
|
isActive?: boolean | undefined;
|
|
@@ -6383,6 +6467,7 @@ declare const technologyUpdateSchema: z.ZodObject<{
|
|
|
6383
6467
|
isRequired?: boolean | undefined;
|
|
6384
6468
|
sortingOrder?: number | undefined;
|
|
6385
6469
|
}[] | undefined;
|
|
6470
|
+
photoTemplate?: string | undefined;
|
|
6386
6471
|
}>;
|
|
6387
6472
|
declare const requirementUpdateSchema: z.ZodObject<{
|
|
6388
6473
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -6521,4 +6606,4 @@ declare class InvalidTreatmentBenefitError extends TreatmentBenefitError {
|
|
|
6521
6606
|
constructor(benefit: string);
|
|
6522
6607
|
}
|
|
6523
6608
|
|
|
6524
|
-
export { BRANDS_COLLECTION, BackofficeError, BlockingCondition, BlockingConditionError, type Brand, BrandService, CATEGORIES_COLLECTION, type Category, CategoryError, CategoryNotFoundError, CategoryService, CertificationLevel, type CertificationRequirement, CertificationSpecialty, CircularReferenceError, ConstantsService, Contraindication, type ContraindicationDynamic, ContraindicationError, type ContraindicationsDocument, type CreateDocumentTemplateData, Currency, DEFAULT_CERTIFICATION_REQUIREMENT, DOCUMENTATION_TEMPLATES_COLLECTION, type DocumentElement, DocumentElementType, type DocumentTemplate, DocumentationTemplateServiceBackoffice, DynamicVariable, FILLED_DOCUMENTS_COLLECTION, HeadingLevel, type ICategoryService, type IProductService, type ITechnologyService, InvalidBlockingConditionError, InvalidCategoryDataError, InvalidContraindicationError, InvalidHierarchyError, InvalidRequirementDataError, InvalidSubcategoryDataError, InvalidTechnologyDataError, InvalidTimeframeError, InvalidTreatmentBenefitError, ListType, PRODUCTS_COLLECTION, PricingMeasure, ProcedureFamily, type ProcedureProduct, type Product, ProductService, REQUIREMENTS_COLLECTION, RelationshipError, type Requirement, RequirementError, type RequirementImportance, RequirementNotFoundError, RequirementService, RequirementType, SUBCATEGORIES_COLLECTION, type Subcategory, SubcategoryError, SubcategoryNotFoundError, SubcategoryService, TECHNOLOGIES_COLLECTION, type Technology, type TechnologyDocumentationTemplate, TechnologyError, TechnologyNotFoundError, type TechnologyRequirements, TechnologyService, type TimeFrame, TimeUnit, TreatmentBenefit, type TreatmentBenefitDynamic, TreatmentBenefitError, type TreatmentBenefitsDocument, type UpdateDocumentTemplateData, blockingConditionSchemaBackoffice, categorySchema, categoryUpdateSchema, certificationLevelSchema, certificationRequirementSchema, certificationSpecialtySchema, contraindicationDynamicSchema, contraindicationSchemaBackoffice, createDocumentTemplateSchema, documentElementSchema, documentElementWithoutIdSchema, documentTemplateSchema, procedureFamilySchemaBackoffice, requirementSchema, requirementTypeSchema, requirementUpdateSchema, subcategorySchema, subcategoryUpdateSchema, technologyRequirementsSchema, technologySchema, technologyUpdateSchema, timeUnitSchemaBackoffice, timeframeSchema, treatmentBenefitDynamicSchema, treatmentBenefitSchemaBackoffice, updateDocumentTemplateSchema };
|
|
6609
|
+
export { BRANDS_COLLECTION, BackofficeError, BlockingCondition, BlockingConditionError, type Brand, BrandService, CATEGORIES_COLLECTION, type Category, CategoryError, CategoryNotFoundError, CategoryService, CertificationLevel, type CertificationRequirement, CertificationSpecialty, CircularReferenceError, ConstantsService, Contraindication, type ContraindicationDynamic, ContraindicationError, type ContraindicationsDocument, type CreateDocumentTemplateData, Currency, DEFAULT_CERTIFICATION_REQUIREMENT, DOCUMENTATION_TEMPLATES_COLLECTION, type DocumentElement, DocumentElementType, type DocumentTemplate, DocumentationTemplateServiceBackoffice, DynamicVariable, FILLED_DOCUMENTS_COLLECTION, HeadingLevel, type ICategoryService, type IProductService, type ITechnologyService, InvalidBlockingConditionError, InvalidCategoryDataError, InvalidContraindicationError, InvalidHierarchyError, InvalidRequirementDataError, InvalidSubcategoryDataError, InvalidTechnologyDataError, InvalidTimeframeError, InvalidTreatmentBenefitError, ListType, MediaAccessLevel, type MediaMetadata, type MediaResource, MediaService, PRODUCTS_COLLECTION, PricingMeasure, ProcedureFamily, type ProcedureProduct, type Product, ProductService, REQUIREMENTS_COLLECTION, RelationshipError, type Requirement, RequirementError, type RequirementImportance, RequirementNotFoundError, RequirementService, RequirementType, SUBCATEGORIES_COLLECTION, type Subcategory, SubcategoryError, SubcategoryNotFoundError, SubcategoryService, TECHNOLOGIES_COLLECTION, type Technology, type TechnologyDocumentationTemplate, TechnologyError, TechnologyNotFoundError, type TechnologyRequirements, TechnologyService, type TimeFrame, TimeUnit, TreatmentBenefit, type TreatmentBenefitDynamic, TreatmentBenefitError, type TreatmentBenefitsDocument, type UpdateDocumentTemplateData, blockingConditionSchemaBackoffice, categorySchema, categoryUpdateSchema, certificationLevelSchema, certificationRequirementSchema, certificationSpecialtySchema, contraindicationDynamicSchema, contraindicationSchemaBackoffice, createDocumentTemplateSchema, documentElementSchema, documentElementWithoutIdSchema, documentTemplateSchema, procedureFamilySchemaBackoffice, requirementSchema, requirementTypeSchema, requirementUpdateSchema, subcategorySchema, subcategoryUpdateSchema, technologyRequirementsSchema, technologySchema, technologyUpdateSchema, timeUnitSchemaBackoffice, timeframeSchema, treatmentBenefitDynamicSchema, treatmentBenefitSchemaBackoffice, updateDocumentTemplateSchema };
|
|
@@ -1005,6 +1005,8 @@ interface Technology {
|
|
|
1005
1005
|
benefits: TreatmentBenefitDynamic[];
|
|
1006
1006
|
certificationRequirement: CertificationRequirement;
|
|
1007
1007
|
documentationTemplates?: TechnologyDocumentationTemplate[];
|
|
1008
|
+
/** Media ID of the default photo template image for this technology */
|
|
1009
|
+
photoTemplate?: string;
|
|
1008
1010
|
isActive: boolean;
|
|
1009
1011
|
createdAt: Date;
|
|
1010
1012
|
updatedAt: Date;
|
|
@@ -1168,10 +1170,86 @@ interface ProcedureProduct {
|
|
|
1168
1170
|
isDefault?: boolean;
|
|
1169
1171
|
}
|
|
1170
1172
|
|
|
1173
|
+
/**
|
|
1174
|
+
* Enum for media access levels
|
|
1175
|
+
*/
|
|
1176
|
+
declare enum MediaAccessLevel {
|
|
1177
|
+
PUBLIC = "public",
|
|
1178
|
+
PRIVATE = "private",
|
|
1179
|
+
CONFIDENTIAL = "confidential"
|
|
1180
|
+
}
|
|
1171
1181
|
/**
|
|
1172
1182
|
* Type that allows a field to be either a URL string or a File object
|
|
1173
1183
|
*/
|
|
1174
1184
|
type MediaResource = string | File | Blob;
|
|
1185
|
+
/**
|
|
1186
|
+
* Media file metadata interface
|
|
1187
|
+
*/
|
|
1188
|
+
interface MediaMetadata {
|
|
1189
|
+
id: string;
|
|
1190
|
+
name: string;
|
|
1191
|
+
url: string;
|
|
1192
|
+
contentType: string;
|
|
1193
|
+
size: number;
|
|
1194
|
+
createdAt: Timestamp;
|
|
1195
|
+
accessLevel: MediaAccessLevel;
|
|
1196
|
+
ownerId: string;
|
|
1197
|
+
collectionName: string;
|
|
1198
|
+
path: string;
|
|
1199
|
+
updatedAt?: Timestamp;
|
|
1200
|
+
}
|
|
1201
|
+
declare class MediaService extends BaseService {
|
|
1202
|
+
constructor(...args: ConstructorParameters<typeof BaseService>);
|
|
1203
|
+
/**
|
|
1204
|
+
* Upload a media file, store its metadata, and return the metadata including the URL.
|
|
1205
|
+
* @param file - The file to upload.
|
|
1206
|
+
* @param ownerId - ID of the owner (user, patient, clinic, etc.).
|
|
1207
|
+
* @param accessLevel - Access level (public, private, confidential).
|
|
1208
|
+
* @param collectionName - The logical collection name this media belongs to (e.g., 'patient_profile_pictures', 'clinic_logos').
|
|
1209
|
+
* @param originalFileName - Optional: the original name of the file, if not using file.name.
|
|
1210
|
+
* @returns Promise with the media metadata.
|
|
1211
|
+
*/
|
|
1212
|
+
uploadMedia(file: File | Blob, ownerId: string, accessLevel: MediaAccessLevel, collectionName: string, originalFileName?: string): Promise<MediaMetadata>;
|
|
1213
|
+
/**
|
|
1214
|
+
* Get media metadata from Firestore by its ID.
|
|
1215
|
+
* @param mediaId - ID of the media.
|
|
1216
|
+
* @returns Promise with the media metadata or null if not found.
|
|
1217
|
+
*/
|
|
1218
|
+
getMediaMetadata(mediaId: string): Promise<MediaMetadata | null>;
|
|
1219
|
+
/**
|
|
1220
|
+
* Get media metadata from Firestore by its public URL.
|
|
1221
|
+
* @param url - The public URL of the media file.
|
|
1222
|
+
* @returns Promise with the media metadata or null if not found.
|
|
1223
|
+
*/
|
|
1224
|
+
getMediaMetadataByUrl(url: string): Promise<MediaMetadata | null>;
|
|
1225
|
+
/**
|
|
1226
|
+
* Delete media from storage and remove metadata from Firestore.
|
|
1227
|
+
* @param mediaId - ID of the media to delete.
|
|
1228
|
+
*/
|
|
1229
|
+
deleteMedia(mediaId: string): Promise<void>;
|
|
1230
|
+
/**
|
|
1231
|
+
* Update media access level. This involves moving the file in Firebase Storage
|
|
1232
|
+
* to a new path reflecting the new access level, and updating its metadata.
|
|
1233
|
+
* @param mediaId - ID of the media to update.
|
|
1234
|
+
* @param newAccessLevel - New access level.
|
|
1235
|
+
* @returns Promise with the updated media metadata, or null if metadata not found.
|
|
1236
|
+
*/
|
|
1237
|
+
updateMediaAccessLevel(mediaId: string, newAccessLevel: MediaAccessLevel): Promise<MediaMetadata | null>;
|
|
1238
|
+
/**
|
|
1239
|
+
* List all media for an owner, optionally filtered by collection and access level.
|
|
1240
|
+
* @param ownerId - ID of the owner.
|
|
1241
|
+
* @param collectionName - Optional: Filter by collection name.
|
|
1242
|
+
* @param accessLevel - Optional: Filter by access level.
|
|
1243
|
+
* @param count - Optional: Number of items to fetch.
|
|
1244
|
+
* @param startAfterId - Optional: ID of the document to start after (for pagination).
|
|
1245
|
+
*/
|
|
1246
|
+
listMedia(ownerId: string, collectionName?: string, accessLevel?: MediaAccessLevel, count?: number, startAfterId?: string): Promise<MediaMetadata[]>;
|
|
1247
|
+
/**
|
|
1248
|
+
* Get download URL for media. (Convenience, as URL is in metadata)
|
|
1249
|
+
* @param mediaId - ID of the media.
|
|
1250
|
+
*/
|
|
1251
|
+
getMediaDownloadUrl(mediaId: string): Promise<string | null>;
|
|
1252
|
+
}
|
|
1175
1253
|
|
|
1176
1254
|
/**
|
|
1177
1255
|
* Aggregated summary information for a procedure.
|
|
@@ -1944,6 +2022,7 @@ declare class TechnologyService extends BaseService implements ITechnologyServic
|
|
|
1944
2022
|
benefits: TreatmentBenefitDynamic[];
|
|
1945
2023
|
certificationRequirement: CertificationRequirement;
|
|
1946
2024
|
documentationTemplates?: TechnologyDocumentationTemplate[] | undefined;
|
|
2025
|
+
photoTemplate?: string | undefined;
|
|
1947
2026
|
id: string;
|
|
1948
2027
|
}>;
|
|
1949
2028
|
/**
|
|
@@ -5077,6 +5156,7 @@ declare const technologySchema: z.ZodObject<{
|
|
|
5077
5156
|
minimumLevel: CertificationLevel;
|
|
5078
5157
|
requiredSpecialties?: CertificationSpecialty[] | undefined;
|
|
5079
5158
|
}>;
|
|
5159
|
+
photoTemplate: z.ZodOptional<z.ZodString>;
|
|
5080
5160
|
isActive: z.ZodDefault<z.ZodBoolean>;
|
|
5081
5161
|
}, "strip", z.ZodTypeAny, {
|
|
5082
5162
|
name: string;
|
|
@@ -5224,6 +5304,7 @@ declare const technologySchema: z.ZodObject<{
|
|
|
5224
5304
|
}[];
|
|
5225
5305
|
description?: string | undefined;
|
|
5226
5306
|
technicalDetails?: string | undefined;
|
|
5307
|
+
photoTemplate?: string | undefined;
|
|
5227
5308
|
}, {
|
|
5228
5309
|
name: string;
|
|
5229
5310
|
family: ProcedureFamily;
|
|
@@ -5370,6 +5451,7 @@ declare const technologySchema: z.ZodObject<{
|
|
|
5370
5451
|
isActive?: boolean | undefined;
|
|
5371
5452
|
}[];
|
|
5372
5453
|
} | undefined;
|
|
5454
|
+
photoTemplate?: string | undefined;
|
|
5373
5455
|
}>;
|
|
5374
5456
|
/**
|
|
5375
5457
|
* Category validation schema
|
|
@@ -6090,6 +6172,7 @@ declare const technologyUpdateSchema: z.ZodObject<{
|
|
|
6090
6172
|
minimumLevel: CertificationLevel;
|
|
6091
6173
|
requiredSpecialties?: CertificationSpecialty[] | undefined;
|
|
6092
6174
|
}>>;
|
|
6175
|
+
photoTemplate: z.ZodOptional<z.ZodOptional<z.ZodString>>;
|
|
6093
6176
|
isActive: z.ZodOptional<z.ZodDefault<z.ZodBoolean>>;
|
|
6094
6177
|
}, "strip", z.ZodTypeAny, {
|
|
6095
6178
|
name?: string | undefined;
|
|
@@ -6237,6 +6320,7 @@ declare const technologyUpdateSchema: z.ZodObject<{
|
|
|
6237
6320
|
description?: string | undefined;
|
|
6238
6321
|
tags?: string[] | undefined;
|
|
6239
6322
|
}[] | undefined;
|
|
6323
|
+
photoTemplate?: string | undefined;
|
|
6240
6324
|
}, {
|
|
6241
6325
|
name?: string | undefined;
|
|
6242
6326
|
isActive?: boolean | undefined;
|
|
@@ -6383,6 +6467,7 @@ declare const technologyUpdateSchema: z.ZodObject<{
|
|
|
6383
6467
|
isRequired?: boolean | undefined;
|
|
6384
6468
|
sortingOrder?: number | undefined;
|
|
6385
6469
|
}[] | undefined;
|
|
6470
|
+
photoTemplate?: string | undefined;
|
|
6386
6471
|
}>;
|
|
6387
6472
|
declare const requirementUpdateSchema: z.ZodObject<{
|
|
6388
6473
|
name: z.ZodOptional<z.ZodString>;
|
|
@@ -6521,4 +6606,4 @@ declare class InvalidTreatmentBenefitError extends TreatmentBenefitError {
|
|
|
6521
6606
|
constructor(benefit: string);
|
|
6522
6607
|
}
|
|
6523
6608
|
|
|
6524
|
-
export { BRANDS_COLLECTION, BackofficeError, BlockingCondition, BlockingConditionError, type Brand, BrandService, CATEGORIES_COLLECTION, type Category, CategoryError, CategoryNotFoundError, CategoryService, CertificationLevel, type CertificationRequirement, CertificationSpecialty, CircularReferenceError, ConstantsService, Contraindication, type ContraindicationDynamic, ContraindicationError, type ContraindicationsDocument, type CreateDocumentTemplateData, Currency, DEFAULT_CERTIFICATION_REQUIREMENT, DOCUMENTATION_TEMPLATES_COLLECTION, type DocumentElement, DocumentElementType, type DocumentTemplate, DocumentationTemplateServiceBackoffice, DynamicVariable, FILLED_DOCUMENTS_COLLECTION, HeadingLevel, type ICategoryService, type IProductService, type ITechnologyService, InvalidBlockingConditionError, InvalidCategoryDataError, InvalidContraindicationError, InvalidHierarchyError, InvalidRequirementDataError, InvalidSubcategoryDataError, InvalidTechnologyDataError, InvalidTimeframeError, InvalidTreatmentBenefitError, ListType, PRODUCTS_COLLECTION, PricingMeasure, ProcedureFamily, type ProcedureProduct, type Product, ProductService, REQUIREMENTS_COLLECTION, RelationshipError, type Requirement, RequirementError, type RequirementImportance, RequirementNotFoundError, RequirementService, RequirementType, SUBCATEGORIES_COLLECTION, type Subcategory, SubcategoryError, SubcategoryNotFoundError, SubcategoryService, TECHNOLOGIES_COLLECTION, type Technology, type TechnologyDocumentationTemplate, TechnologyError, TechnologyNotFoundError, type TechnologyRequirements, TechnologyService, type TimeFrame, TimeUnit, TreatmentBenefit, type TreatmentBenefitDynamic, TreatmentBenefitError, type TreatmentBenefitsDocument, type UpdateDocumentTemplateData, blockingConditionSchemaBackoffice, categorySchema, categoryUpdateSchema, certificationLevelSchema, certificationRequirementSchema, certificationSpecialtySchema, contraindicationDynamicSchema, contraindicationSchemaBackoffice, createDocumentTemplateSchema, documentElementSchema, documentElementWithoutIdSchema, documentTemplateSchema, procedureFamilySchemaBackoffice, requirementSchema, requirementTypeSchema, requirementUpdateSchema, subcategorySchema, subcategoryUpdateSchema, technologyRequirementsSchema, technologySchema, technologyUpdateSchema, timeUnitSchemaBackoffice, timeframeSchema, treatmentBenefitDynamicSchema, treatmentBenefitSchemaBackoffice, updateDocumentTemplateSchema };
|
|
6609
|
+
export { BRANDS_COLLECTION, BackofficeError, BlockingCondition, BlockingConditionError, type Brand, BrandService, CATEGORIES_COLLECTION, type Category, CategoryError, CategoryNotFoundError, CategoryService, CertificationLevel, type CertificationRequirement, CertificationSpecialty, CircularReferenceError, ConstantsService, Contraindication, type ContraindicationDynamic, ContraindicationError, type ContraindicationsDocument, type CreateDocumentTemplateData, Currency, DEFAULT_CERTIFICATION_REQUIREMENT, DOCUMENTATION_TEMPLATES_COLLECTION, type DocumentElement, DocumentElementType, type DocumentTemplate, DocumentationTemplateServiceBackoffice, DynamicVariable, FILLED_DOCUMENTS_COLLECTION, HeadingLevel, type ICategoryService, type IProductService, type ITechnologyService, InvalidBlockingConditionError, InvalidCategoryDataError, InvalidContraindicationError, InvalidHierarchyError, InvalidRequirementDataError, InvalidSubcategoryDataError, InvalidTechnologyDataError, InvalidTimeframeError, InvalidTreatmentBenefitError, ListType, MediaAccessLevel, type MediaMetadata, type MediaResource, MediaService, PRODUCTS_COLLECTION, PricingMeasure, ProcedureFamily, type ProcedureProduct, type Product, ProductService, REQUIREMENTS_COLLECTION, RelationshipError, type Requirement, RequirementError, type RequirementImportance, RequirementNotFoundError, RequirementService, RequirementType, SUBCATEGORIES_COLLECTION, type Subcategory, SubcategoryError, SubcategoryNotFoundError, SubcategoryService, TECHNOLOGIES_COLLECTION, type Technology, type TechnologyDocumentationTemplate, TechnologyError, TechnologyNotFoundError, type TechnologyRequirements, TechnologyService, type TimeFrame, TimeUnit, TreatmentBenefit, type TreatmentBenefitDynamic, TreatmentBenefitError, type TreatmentBenefitsDocument, type UpdateDocumentTemplateData, blockingConditionSchemaBackoffice, categorySchema, categoryUpdateSchema, certificationLevelSchema, certificationRequirementSchema, certificationSpecialtySchema, contraindicationDynamicSchema, contraindicationSchemaBackoffice, createDocumentTemplateSchema, documentElementSchema, documentElementWithoutIdSchema, documentTemplateSchema, procedureFamilySchemaBackoffice, requirementSchema, requirementTypeSchema, requirementUpdateSchema, subcategorySchema, subcategoryUpdateSchema, technologyRequirementsSchema, technologySchema, technologyUpdateSchema, timeUnitSchemaBackoffice, timeframeSchema, treatmentBenefitDynamicSchema, treatmentBenefitSchemaBackoffice, updateDocumentTemplateSchema };
|