@blackcode_sa/metaestetics-api 1.12.65 → 1.12.67
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 +2 -0
- package/dist/admin/index.d.ts +2 -0
- package/dist/admin/index.js +45 -4
- package/dist/admin/index.mjs +45 -4
- package/dist/backoffice/index.d.mts +33 -0
- package/dist/backoffice/index.d.ts +33 -0
- package/dist/backoffice/index.js +63 -0
- package/dist/backoffice/index.mjs +63 -0
- package/dist/index.d.mts +35 -0
- package/dist/index.d.ts +35 -0
- package/dist/index.js +116 -11
- package/dist/index.mjs +116 -11
- 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 +689 -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 +341 -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 +10 -10
- 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 +417 -395
- package/src/backoffice/services/technology.service.ts +1104 -1083
- 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 +67 -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 +168 -163
- package/src/backoffice/validations/index.ts +1 -1
- package/src/backoffice/validations/schemas.ts +164 -164
- 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 -2505
- 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 +1715 -1715
- package/src/services/reviews/index.ts +1 -1
- package/src/services/reviews/reviews.service.ts +683 -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 +480 -480
- 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 -275
- 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 +132 -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 -84
- package/src/validations/patient/token.schema.ts +29 -29
- package/src/validations/patient.schema.ts +217 -217
- 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 +195 -189
- package/src/validations/schemas.ts +104 -104
- package/src/validations/shared.schema.ts +78 -78
|
@@ -1,148 +1,148 @@
|
|
|
1
|
-
import * as admin from 'firebase-admin';
|
|
2
|
-
import { ProcedureFamily } from '../../backoffice/types/static/procedure-family.types';
|
|
3
|
-
import {
|
|
4
|
-
CertificationLevel,
|
|
5
|
-
CertificationSpecialty,
|
|
6
|
-
} from '../../backoffice/types/static/certification.types';
|
|
7
|
-
import { CATEGORIES_COLLECTION } from '../../backoffice/types/category.types';
|
|
8
|
-
import { SUBCATEGORIES_COLLECTION } from '../../backoffice/types/subcategory.types';
|
|
9
|
-
import { TECHNOLOGIES_COLLECTION } from '../../backoffice/types/technology.types';
|
|
10
|
-
|
|
11
|
-
/**
|
|
12
|
-
* Ensures that the free consultation infrastructure exists in the database
|
|
13
|
-
* Creates category, subcategory, and technology if they don't exist
|
|
14
|
-
* Note: Consultations are product-free procedures, so no product is created
|
|
15
|
-
* @param db - Firestore database instance (optional, defaults to admin.firestore())
|
|
16
|
-
* @returns Promise<boolean> - Always returns true after ensuring infrastructure exists
|
|
17
|
-
*/
|
|
18
|
-
export async function freeConsultationInfrastructure(
|
|
19
|
-
db?: admin.firestore.Firestore,
|
|
20
|
-
): Promise<boolean> {
|
|
21
|
-
const firestore = db || admin.firestore();
|
|
22
|
-
|
|
23
|
-
try {
|
|
24
|
-
console.log('[freeConsultationInfrastructure] Checking free consultation infrastructure...');
|
|
25
|
-
|
|
26
|
-
// Check if the technology already exists
|
|
27
|
-
const technologyRef = firestore
|
|
28
|
-
.collection(TECHNOLOGIES_COLLECTION)
|
|
29
|
-
.doc('free-consultation-tech');
|
|
30
|
-
|
|
31
|
-
const technologyDoc = await technologyRef.get();
|
|
32
|
-
|
|
33
|
-
if (technologyDoc.exists) {
|
|
34
|
-
console.log(
|
|
35
|
-
'[freeConsultationInfrastructure] Free consultation infrastructure already exists',
|
|
36
|
-
);
|
|
37
|
-
return true;
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
console.log('[freeConsultationInfrastructure] Creating free consultation infrastructure...');
|
|
41
|
-
|
|
42
|
-
// Create the infrastructure in the correct order: Category → Subcategory → Technology → Product
|
|
43
|
-
await createFreeConsultationInfrastructure(firestore);
|
|
44
|
-
|
|
45
|
-
console.log(
|
|
46
|
-
'[freeConsultationInfrastructure] Successfully created free consultation infrastructure',
|
|
47
|
-
);
|
|
48
|
-
return true;
|
|
49
|
-
} catch (error) {
|
|
50
|
-
console.error('[freeConsultationInfrastructure] Error ensuring infrastructure:', error);
|
|
51
|
-
throw error;
|
|
52
|
-
}
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Creates the complete free consultation infrastructure
|
|
57
|
-
* Creates category, subcategory, and technology (no product needed)
|
|
58
|
-
* @param db - Firestore database instance
|
|
59
|
-
*/
|
|
60
|
-
async function createFreeConsultationInfrastructure(db: admin.firestore.Firestore): Promise<void> {
|
|
61
|
-
const batch = db.batch();
|
|
62
|
-
const now = new Date();
|
|
63
|
-
|
|
64
|
-
// 1. Create Category: "consultation"
|
|
65
|
-
const categoryRef = db.collection(CATEGORIES_COLLECTION).doc('consultation');
|
|
66
|
-
const categoryData = {
|
|
67
|
-
id: 'consultation',
|
|
68
|
-
name: 'Consultation',
|
|
69
|
-
description: 'Professional consultation services for treatment planning and assessment',
|
|
70
|
-
family: ProcedureFamily.AESTHETICS,
|
|
71
|
-
isActive: true,
|
|
72
|
-
createdAt: now,
|
|
73
|
-
updatedAt: now,
|
|
74
|
-
};
|
|
75
|
-
batch.set(categoryRef, categoryData);
|
|
76
|
-
|
|
77
|
-
// 2. Create Subcategory: "free-consultation"
|
|
78
|
-
const subcategoryRef = db
|
|
79
|
-
.collection(CATEGORIES_COLLECTION)
|
|
80
|
-
.doc('consultation')
|
|
81
|
-
.collection(SUBCATEGORIES_COLLECTION)
|
|
82
|
-
.doc('free-consultation');
|
|
83
|
-
|
|
84
|
-
const subcategoryData = {
|
|
85
|
-
id: 'free-consultation',
|
|
86
|
-
name: 'Free Consultation',
|
|
87
|
-
description:
|
|
88
|
-
'Complimentary initial consultation to discuss treatment options and assess patient needs',
|
|
89
|
-
categoryId: 'consultation',
|
|
90
|
-
isActive: true,
|
|
91
|
-
createdAt: now,
|
|
92
|
-
updatedAt: now,
|
|
93
|
-
};
|
|
94
|
-
batch.set(subcategoryRef, subcategoryData);
|
|
95
|
-
|
|
96
|
-
// 3. Create Technology: "free-consultation-tech"
|
|
97
|
-
const technologyRef = db.collection(TECHNOLOGIES_COLLECTION).doc('free-consultation-tech');
|
|
98
|
-
const technologyData = {
|
|
99
|
-
id: 'free-consultation-tech',
|
|
100
|
-
name: 'Free Consultation Technology',
|
|
101
|
-
description: 'Technology framework for providing free initial consultations to patients',
|
|
102
|
-
family: ProcedureFamily.AESTHETICS,
|
|
103
|
-
categoryId: 'consultation',
|
|
104
|
-
subcategoryId: 'free-consultation',
|
|
105
|
-
technicalDetails: 'Standard consultation protocol for initial patient assessment',
|
|
106
|
-
requirements: {
|
|
107
|
-
pre: [], // No pre-requirements for consultation
|
|
108
|
-
post: [], // No post-requirements for consultation
|
|
109
|
-
},
|
|
110
|
-
blockingConditions: [], // No blocking conditions for consultation
|
|
111
|
-
contraindications: [], // No contraindications for consultation
|
|
112
|
-
benefits: [
|
|
113
|
-
{
|
|
114
|
-
id: 'IMPROVED_PATIENT_UNDERSTANDING',
|
|
115
|
-
name: 'Improved Patient Understanding',
|
|
116
|
-
description: 'Helps patients better understand their treatment options and expected outcomes',
|
|
117
|
-
},
|
|
118
|
-
{
|
|
119
|
-
id: 'BETTER_TREATMENT_PLANNING',
|
|
120
|
-
name: 'Better Treatment Planning',
|
|
121
|
-
description: 'Enables more effective treatment planning based on patient needs and goals',
|
|
122
|
-
},
|
|
123
|
-
{
|
|
124
|
-
id: 'ENHANCED_PATIENT_CONFIDENCE',
|
|
125
|
-
name: 'Enhanced Patient Confidence',
|
|
126
|
-
description: 'Builds patient confidence through clear communication and professional guidance',
|
|
127
|
-
},
|
|
128
|
-
],
|
|
129
|
-
certificationRequirement: {
|
|
130
|
-
minimumLevel: CertificationLevel.AESTHETICIAN,
|
|
131
|
-
requiredSpecialties: [], // No required specialties for consultation
|
|
132
|
-
},
|
|
133
|
-
documentationTemplates: [],
|
|
134
|
-
isActive: true,
|
|
135
|
-
createdAt: now,
|
|
136
|
-
updatedAt: now,
|
|
137
|
-
};
|
|
138
|
-
batch.set(technologyRef, technologyData);
|
|
139
|
-
|
|
140
|
-
// Commit all changes atomically
|
|
141
|
-
await batch.commit();
|
|
142
|
-
|
|
143
|
-
console.log('[freeConsultationInfrastructure] Successfully created:');
|
|
144
|
-
console.log(' ✓ Category: consultation');
|
|
145
|
-
console.log(' ✓ Subcategory: free-consultation');
|
|
146
|
-
console.log(' ✓ Technology: free-consultation-tech');
|
|
147
|
-
console.log(' ℹ No product needed - consultations are product-free procedures');
|
|
148
|
-
}
|
|
1
|
+
import * as admin from 'firebase-admin';
|
|
2
|
+
import { ProcedureFamily } from '../../backoffice/types/static/procedure-family.types';
|
|
3
|
+
import {
|
|
4
|
+
CertificationLevel,
|
|
5
|
+
CertificationSpecialty,
|
|
6
|
+
} from '../../backoffice/types/static/certification.types';
|
|
7
|
+
import { CATEGORIES_COLLECTION } from '../../backoffice/types/category.types';
|
|
8
|
+
import { SUBCATEGORIES_COLLECTION } from '../../backoffice/types/subcategory.types';
|
|
9
|
+
import { TECHNOLOGIES_COLLECTION } from '../../backoffice/types/technology.types';
|
|
10
|
+
|
|
11
|
+
/**
|
|
12
|
+
* Ensures that the free consultation infrastructure exists in the database
|
|
13
|
+
* Creates category, subcategory, and technology if they don't exist
|
|
14
|
+
* Note: Consultations are product-free procedures, so no product is created
|
|
15
|
+
* @param db - Firestore database instance (optional, defaults to admin.firestore())
|
|
16
|
+
* @returns Promise<boolean> - Always returns true after ensuring infrastructure exists
|
|
17
|
+
*/
|
|
18
|
+
export async function freeConsultationInfrastructure(
|
|
19
|
+
db?: admin.firestore.Firestore,
|
|
20
|
+
): Promise<boolean> {
|
|
21
|
+
const firestore = db || admin.firestore();
|
|
22
|
+
|
|
23
|
+
try {
|
|
24
|
+
console.log('[freeConsultationInfrastructure] Checking free consultation infrastructure...');
|
|
25
|
+
|
|
26
|
+
// Check if the technology already exists
|
|
27
|
+
const technologyRef = firestore
|
|
28
|
+
.collection(TECHNOLOGIES_COLLECTION)
|
|
29
|
+
.doc('free-consultation-tech');
|
|
30
|
+
|
|
31
|
+
const technologyDoc = await technologyRef.get();
|
|
32
|
+
|
|
33
|
+
if (technologyDoc.exists) {
|
|
34
|
+
console.log(
|
|
35
|
+
'[freeConsultationInfrastructure] Free consultation infrastructure already exists',
|
|
36
|
+
);
|
|
37
|
+
return true;
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
console.log('[freeConsultationInfrastructure] Creating free consultation infrastructure...');
|
|
41
|
+
|
|
42
|
+
// Create the infrastructure in the correct order: Category → Subcategory → Technology → Product
|
|
43
|
+
await createFreeConsultationInfrastructure(firestore);
|
|
44
|
+
|
|
45
|
+
console.log(
|
|
46
|
+
'[freeConsultationInfrastructure] Successfully created free consultation infrastructure',
|
|
47
|
+
);
|
|
48
|
+
return true;
|
|
49
|
+
} catch (error) {
|
|
50
|
+
console.error('[freeConsultationInfrastructure] Error ensuring infrastructure:', error);
|
|
51
|
+
throw error;
|
|
52
|
+
}
|
|
53
|
+
}
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Creates the complete free consultation infrastructure
|
|
57
|
+
* Creates category, subcategory, and technology (no product needed)
|
|
58
|
+
* @param db - Firestore database instance
|
|
59
|
+
*/
|
|
60
|
+
async function createFreeConsultationInfrastructure(db: admin.firestore.Firestore): Promise<void> {
|
|
61
|
+
const batch = db.batch();
|
|
62
|
+
const now = new Date();
|
|
63
|
+
|
|
64
|
+
// 1. Create Category: "consultation"
|
|
65
|
+
const categoryRef = db.collection(CATEGORIES_COLLECTION).doc('consultation');
|
|
66
|
+
const categoryData = {
|
|
67
|
+
id: 'consultation',
|
|
68
|
+
name: 'Consultation',
|
|
69
|
+
description: 'Professional consultation services for treatment planning and assessment',
|
|
70
|
+
family: ProcedureFamily.AESTHETICS,
|
|
71
|
+
isActive: true,
|
|
72
|
+
createdAt: now,
|
|
73
|
+
updatedAt: now,
|
|
74
|
+
};
|
|
75
|
+
batch.set(categoryRef, categoryData);
|
|
76
|
+
|
|
77
|
+
// 2. Create Subcategory: "free-consultation"
|
|
78
|
+
const subcategoryRef = db
|
|
79
|
+
.collection(CATEGORIES_COLLECTION)
|
|
80
|
+
.doc('consultation')
|
|
81
|
+
.collection(SUBCATEGORIES_COLLECTION)
|
|
82
|
+
.doc('free-consultation');
|
|
83
|
+
|
|
84
|
+
const subcategoryData = {
|
|
85
|
+
id: 'free-consultation',
|
|
86
|
+
name: 'Free Consultation',
|
|
87
|
+
description:
|
|
88
|
+
'Complimentary initial consultation to discuss treatment options and assess patient needs',
|
|
89
|
+
categoryId: 'consultation',
|
|
90
|
+
isActive: true,
|
|
91
|
+
createdAt: now,
|
|
92
|
+
updatedAt: now,
|
|
93
|
+
};
|
|
94
|
+
batch.set(subcategoryRef, subcategoryData);
|
|
95
|
+
|
|
96
|
+
// 3. Create Technology: "free-consultation-tech"
|
|
97
|
+
const technologyRef = db.collection(TECHNOLOGIES_COLLECTION).doc('free-consultation-tech');
|
|
98
|
+
const technologyData = {
|
|
99
|
+
id: 'free-consultation-tech',
|
|
100
|
+
name: 'Free Consultation Technology',
|
|
101
|
+
description: 'Technology framework for providing free initial consultations to patients',
|
|
102
|
+
family: ProcedureFamily.AESTHETICS,
|
|
103
|
+
categoryId: 'consultation',
|
|
104
|
+
subcategoryId: 'free-consultation',
|
|
105
|
+
technicalDetails: 'Standard consultation protocol for initial patient assessment',
|
|
106
|
+
requirements: {
|
|
107
|
+
pre: [], // No pre-requirements for consultation
|
|
108
|
+
post: [], // No post-requirements for consultation
|
|
109
|
+
},
|
|
110
|
+
blockingConditions: [], // No blocking conditions for consultation
|
|
111
|
+
contraindications: [], // No contraindications for consultation
|
|
112
|
+
benefits: [
|
|
113
|
+
{
|
|
114
|
+
id: 'IMPROVED_PATIENT_UNDERSTANDING',
|
|
115
|
+
name: 'Improved Patient Understanding',
|
|
116
|
+
description: 'Helps patients better understand their treatment options and expected outcomes',
|
|
117
|
+
},
|
|
118
|
+
{
|
|
119
|
+
id: 'BETTER_TREATMENT_PLANNING',
|
|
120
|
+
name: 'Better Treatment Planning',
|
|
121
|
+
description: 'Enables more effective treatment planning based on patient needs and goals',
|
|
122
|
+
},
|
|
123
|
+
{
|
|
124
|
+
id: 'ENHANCED_PATIENT_CONFIDENCE',
|
|
125
|
+
name: 'Enhanced Patient Confidence',
|
|
126
|
+
description: 'Builds patient confidence through clear communication and professional guidance',
|
|
127
|
+
},
|
|
128
|
+
],
|
|
129
|
+
certificationRequirement: {
|
|
130
|
+
minimumLevel: CertificationLevel.AESTHETICIAN,
|
|
131
|
+
requiredSpecialties: [], // No required specialties for consultation
|
|
132
|
+
},
|
|
133
|
+
documentationTemplates: [],
|
|
134
|
+
isActive: true,
|
|
135
|
+
createdAt: now,
|
|
136
|
+
updatedAt: now,
|
|
137
|
+
};
|
|
138
|
+
batch.set(technologyRef, technologyData);
|
|
139
|
+
|
|
140
|
+
// Commit all changes atomically
|
|
141
|
+
await batch.commit();
|
|
142
|
+
|
|
143
|
+
console.log('[freeConsultationInfrastructure] Successfully created:');
|
|
144
|
+
console.log(' ✓ Category: consultation');
|
|
145
|
+
console.log(' ✓ Subcategory: free-consultation');
|
|
146
|
+
console.log(' ✓ Technology: free-consultation-tech');
|
|
147
|
+
console.log(' ℹ No product needed - consultations are product-free procedures');
|
|
148
|
+
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
export * from "./free-consultation-utils.admin";
|
|
1
|
+
export * from "./free-consultation-utils.admin";
|
package/src/admin/index.ts
CHANGED
|
@@ -1,75 +1,75 @@
|
|
|
1
|
-
import { TimestampUtils } from '../utils/';
|
|
2
|
-
|
|
3
|
-
// Re-export types needed by Cloud Functions consuming this module
|
|
4
|
-
export type {
|
|
5
|
-
Notification,
|
|
6
|
-
BaseNotification,
|
|
7
|
-
PreRequirementNotification,
|
|
8
|
-
PostRequirementNotification,
|
|
9
|
-
AppointmentReminderNotification,
|
|
10
|
-
} from '../types/notifications';
|
|
11
|
-
export type { PatientProfile, PatientSensitiveInfo } from '../types/patient';
|
|
12
|
-
export { PATIENTS_COLLECTION, PATIENT_SENSITIVE_INFO_COLLECTION } from '../types/patient';
|
|
13
|
-
export type { Clinic, ClinicLocation } from '../types/clinic';
|
|
14
|
-
export type { ClinicInfo } from '../types/profile';
|
|
15
|
-
export type { Practitioner, PractitionerToken } from '../types/practitioner';
|
|
16
|
-
export type { PractitionerInvite } from '../types/clinic/practitioner-invite.types';
|
|
17
|
-
export type { DoctorInfo } from '../types/clinic';
|
|
18
|
-
export type { Procedure, ProcedureSummaryInfo } from '../types/procedure';
|
|
19
|
-
export type { PatientProfile as Patient } from '../types/patient';
|
|
20
|
-
export type { Appointment } from '../types/appointment';
|
|
21
|
-
export type { FilledDocument } from '../types/documentation-templates';
|
|
22
|
-
export type { Review } from '../types/reviews';
|
|
23
|
-
|
|
24
|
-
// Re-export billing types for Stripe integration
|
|
25
|
-
export type {
|
|
26
|
-
BillingInfo,
|
|
27
|
-
BillingTransaction,
|
|
28
|
-
CreateBillingTransactionData,
|
|
29
|
-
StripeTransactionData,
|
|
30
|
-
PlanDetails,
|
|
31
|
-
} from '../types/clinic';
|
|
32
|
-
export { BillingTransactionType, SubscriptionStatus } from '../types/clinic';
|
|
33
|
-
|
|
34
|
-
// Re-export enums/consts
|
|
35
|
-
export {
|
|
36
|
-
NotificationType,
|
|
37
|
-
NotificationStatus,
|
|
38
|
-
NOTIFICATIONS_COLLECTION,
|
|
39
|
-
} from '../types/notifications';
|
|
40
|
-
export { UserRole } from '../types/user';
|
|
41
|
-
export { PractitionerTokenStatus } from '../types/practitioner';
|
|
42
|
-
export { PractitionerInviteStatus } from '../types/clinic/practitioner-invite.types';
|
|
43
|
-
export { AppointmentStatus } from '../types/appointment';
|
|
44
|
-
|
|
45
|
-
// Export mailing service interfaces
|
|
46
|
-
export type {
|
|
47
|
-
ExistingPractitionerInviteEmailData,
|
|
48
|
-
ClinicAdminNotificationData,
|
|
49
|
-
} from './mailing/practitionerInvite/';
|
|
50
|
-
|
|
51
|
-
// Re-export types needed by admin services
|
|
52
|
-
export type * from '../types/patient/patient-requirements';
|
|
53
|
-
export * from '../types/patient/patient-requirements';
|
|
54
|
-
|
|
55
|
-
/**
|
|
56
|
-
* Main entry point for the Admin module.
|
|
57
|
-
* This module contains services and utilities intended for administrative tasks,
|
|
58
|
-
* background processing, and direct use by Cloud Functions.
|
|
59
|
-
*/
|
|
60
|
-
console.log('[Admin Module] Initialized and services exported.');
|
|
61
|
-
|
|
62
|
-
// Initialize TimestampUtils for server-side use
|
|
63
|
-
TimestampUtils.enableServerMode();
|
|
64
|
-
|
|
65
|
-
// Export all services and utilities from the admin sub-modules.
|
|
66
|
-
export * from './aggregation';
|
|
67
|
-
export * from './booking';
|
|
68
|
-
export * from './calendar';
|
|
69
|
-
export * from './documentation-templates';
|
|
70
|
-
export * from './free-consultation';
|
|
71
|
-
export * from './logger';
|
|
72
|
-
export * from './mailing';
|
|
73
|
-
export * from './notifications';
|
|
74
|
-
export * from './requirements';
|
|
75
|
-
export * from './users';
|
|
1
|
+
import { TimestampUtils } from '../utils/';
|
|
2
|
+
|
|
3
|
+
// Re-export types needed by Cloud Functions consuming this module
|
|
4
|
+
export type {
|
|
5
|
+
Notification,
|
|
6
|
+
BaseNotification,
|
|
7
|
+
PreRequirementNotification,
|
|
8
|
+
PostRequirementNotification,
|
|
9
|
+
AppointmentReminderNotification,
|
|
10
|
+
} from '../types/notifications';
|
|
11
|
+
export type { PatientProfile, PatientSensitiveInfo } from '../types/patient';
|
|
12
|
+
export { PATIENTS_COLLECTION, PATIENT_SENSITIVE_INFO_COLLECTION } from '../types/patient';
|
|
13
|
+
export type { Clinic, ClinicLocation } from '../types/clinic';
|
|
14
|
+
export type { ClinicInfo } from '../types/profile';
|
|
15
|
+
export type { Practitioner, PractitionerToken } from '../types/practitioner';
|
|
16
|
+
export type { PractitionerInvite } from '../types/clinic/practitioner-invite.types';
|
|
17
|
+
export type { DoctorInfo } from '../types/clinic';
|
|
18
|
+
export type { Procedure, ProcedureSummaryInfo } from '../types/procedure';
|
|
19
|
+
export type { PatientProfile as Patient } from '../types/patient';
|
|
20
|
+
export type { Appointment } from '../types/appointment';
|
|
21
|
+
export type { FilledDocument } from '../types/documentation-templates';
|
|
22
|
+
export type { Review } from '../types/reviews';
|
|
23
|
+
|
|
24
|
+
// Re-export billing types for Stripe integration
|
|
25
|
+
export type {
|
|
26
|
+
BillingInfo,
|
|
27
|
+
BillingTransaction,
|
|
28
|
+
CreateBillingTransactionData,
|
|
29
|
+
StripeTransactionData,
|
|
30
|
+
PlanDetails,
|
|
31
|
+
} from '../types/clinic';
|
|
32
|
+
export { BillingTransactionType, SubscriptionStatus } from '../types/clinic';
|
|
33
|
+
|
|
34
|
+
// Re-export enums/consts
|
|
35
|
+
export {
|
|
36
|
+
NotificationType,
|
|
37
|
+
NotificationStatus,
|
|
38
|
+
NOTIFICATIONS_COLLECTION,
|
|
39
|
+
} from '../types/notifications';
|
|
40
|
+
export { UserRole } from '../types/user';
|
|
41
|
+
export { PractitionerTokenStatus } from '../types/practitioner';
|
|
42
|
+
export { PractitionerInviteStatus } from '../types/clinic/practitioner-invite.types';
|
|
43
|
+
export { AppointmentStatus } from '../types/appointment';
|
|
44
|
+
|
|
45
|
+
// Export mailing service interfaces
|
|
46
|
+
export type {
|
|
47
|
+
ExistingPractitionerInviteEmailData,
|
|
48
|
+
ClinicAdminNotificationData,
|
|
49
|
+
} from './mailing/practitionerInvite/';
|
|
50
|
+
|
|
51
|
+
// Re-export types needed by admin services
|
|
52
|
+
export type * from '../types/patient/patient-requirements';
|
|
53
|
+
export * from '../types/patient/patient-requirements';
|
|
54
|
+
|
|
55
|
+
/**
|
|
56
|
+
* Main entry point for the Admin module.
|
|
57
|
+
* This module contains services and utilities intended for administrative tasks,
|
|
58
|
+
* background processing, and direct use by Cloud Functions.
|
|
59
|
+
*/
|
|
60
|
+
console.log('[Admin Module] Initialized and services exported.');
|
|
61
|
+
|
|
62
|
+
// Initialize TimestampUtils for server-side use
|
|
63
|
+
TimestampUtils.enableServerMode();
|
|
64
|
+
|
|
65
|
+
// Export all services and utilities from the admin sub-modules.
|
|
66
|
+
export * from './aggregation';
|
|
67
|
+
export * from './booking';
|
|
68
|
+
export * from './calendar';
|
|
69
|
+
export * from './documentation-templates';
|
|
70
|
+
export * from './free-consultation';
|
|
71
|
+
export * from './logger';
|
|
72
|
+
export * from './mailing';
|
|
73
|
+
export * from './notifications';
|
|
74
|
+
export * from './requirements';
|
|
75
|
+
export * from './users';
|
|
@@ -1,78 +1,78 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Cloud Functions-compatible logger with fallback for other environments
|
|
3
|
-
*
|
|
4
|
-
* This logger automatically detects if it's running in a Cloud Functions environment
|
|
5
|
-
* and uses the appropriate logging method. It falls back to console methods in other environments.
|
|
6
|
-
*/
|
|
7
|
-
|
|
8
|
-
// Try to import Firebase Functions logger, but don't cause errors if it's not available
|
|
9
|
-
let firebaseFunctionsLogger: any;
|
|
10
|
-
try {
|
|
11
|
-
// Use dynamic import to avoid requiring firebase-functions in non-Functions environments
|
|
12
|
-
firebaseFunctionsLogger = require("firebase-functions/logger");
|
|
13
|
-
// Import the compatibility module for console.log support if available
|
|
14
|
-
require("firebase-functions/logger/compat");
|
|
15
|
-
} catch (e) {
|
|
16
|
-
// Firebase Functions logger not available, will use fallback
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
/**
|
|
20
|
-
* Logger class that uses Firebase Functions logger when available
|
|
21
|
-
* with fallback to console methods when not in a Cloud Functions environment
|
|
22
|
-
*/
|
|
23
|
-
export class Logger {
|
|
24
|
-
/**
|
|
25
|
-
* Log an error message
|
|
26
|
-
* @param message Message to log
|
|
27
|
-
* @param data Optional data to include
|
|
28
|
-
*/
|
|
29
|
-
static error(message: string, data?: any): void {
|
|
30
|
-
if (firebaseFunctionsLogger) {
|
|
31
|
-
firebaseFunctionsLogger.error(message, data);
|
|
32
|
-
} else {
|
|
33
|
-
console.error(message, data !== undefined ? data : "");
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
/**
|
|
38
|
-
* Log a warning message
|
|
39
|
-
* @param message Message to log
|
|
40
|
-
* @param data Optional data to include
|
|
41
|
-
*/
|
|
42
|
-
static warn(message: string, data?: any): void {
|
|
43
|
-
if (firebaseFunctionsLogger) {
|
|
44
|
-
firebaseFunctionsLogger.warn(message, data);
|
|
45
|
-
} else {
|
|
46
|
-
console.warn(message, data !== undefined ? data : "");
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
/**
|
|
51
|
-
* Log an info message
|
|
52
|
-
* @param message Message to log
|
|
53
|
-
* @param data Optional data to include
|
|
54
|
-
*/
|
|
55
|
-
static info(message: string, data?: any): void {
|
|
56
|
-
if (firebaseFunctionsLogger) {
|
|
57
|
-
firebaseFunctionsLogger.info(message, data);
|
|
58
|
-
} else {
|
|
59
|
-
console.info(message, data !== undefined ? data : "");
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Log a debug message
|
|
65
|
-
* @param message Message to log
|
|
66
|
-
* @param data Optional data to include
|
|
67
|
-
*/
|
|
68
|
-
static debug(message: string, data?: any): void {
|
|
69
|
-
if (firebaseFunctionsLogger) {
|
|
70
|
-
firebaseFunctionsLogger.debug(message, data);
|
|
71
|
-
} else {
|
|
72
|
-
console.debug(message, data !== undefined ? data : "");
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
// Default export for easier importing
|
|
78
|
-
export default Logger;
|
|
1
|
+
/**
|
|
2
|
+
* Cloud Functions-compatible logger with fallback for other environments
|
|
3
|
+
*
|
|
4
|
+
* This logger automatically detects if it's running in a Cloud Functions environment
|
|
5
|
+
* and uses the appropriate logging method. It falls back to console methods in other environments.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// Try to import Firebase Functions logger, but don't cause errors if it's not available
|
|
9
|
+
let firebaseFunctionsLogger: any;
|
|
10
|
+
try {
|
|
11
|
+
// Use dynamic import to avoid requiring firebase-functions in non-Functions environments
|
|
12
|
+
firebaseFunctionsLogger = require("firebase-functions/logger");
|
|
13
|
+
// Import the compatibility module for console.log support if available
|
|
14
|
+
require("firebase-functions/logger/compat");
|
|
15
|
+
} catch (e) {
|
|
16
|
+
// Firebase Functions logger not available, will use fallback
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Logger class that uses Firebase Functions logger when available
|
|
21
|
+
* with fallback to console methods when not in a Cloud Functions environment
|
|
22
|
+
*/
|
|
23
|
+
export class Logger {
|
|
24
|
+
/**
|
|
25
|
+
* Log an error message
|
|
26
|
+
* @param message Message to log
|
|
27
|
+
* @param data Optional data to include
|
|
28
|
+
*/
|
|
29
|
+
static error(message: string, data?: any): void {
|
|
30
|
+
if (firebaseFunctionsLogger) {
|
|
31
|
+
firebaseFunctionsLogger.error(message, data);
|
|
32
|
+
} else {
|
|
33
|
+
console.error(message, data !== undefined ? data : "");
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
|
|
37
|
+
/**
|
|
38
|
+
* Log a warning message
|
|
39
|
+
* @param message Message to log
|
|
40
|
+
* @param data Optional data to include
|
|
41
|
+
*/
|
|
42
|
+
static warn(message: string, data?: any): void {
|
|
43
|
+
if (firebaseFunctionsLogger) {
|
|
44
|
+
firebaseFunctionsLogger.warn(message, data);
|
|
45
|
+
} else {
|
|
46
|
+
console.warn(message, data !== undefined ? data : "");
|
|
47
|
+
}
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
/**
|
|
51
|
+
* Log an info message
|
|
52
|
+
* @param message Message to log
|
|
53
|
+
* @param data Optional data to include
|
|
54
|
+
*/
|
|
55
|
+
static info(message: string, data?: any): void {
|
|
56
|
+
if (firebaseFunctionsLogger) {
|
|
57
|
+
firebaseFunctionsLogger.info(message, data);
|
|
58
|
+
} else {
|
|
59
|
+
console.info(message, data !== undefined ? data : "");
|
|
60
|
+
}
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Log a debug message
|
|
65
|
+
* @param message Message to log
|
|
66
|
+
* @param data Optional data to include
|
|
67
|
+
*/
|
|
68
|
+
static debug(message: string, data?: any): void {
|
|
69
|
+
if (firebaseFunctionsLogger) {
|
|
70
|
+
firebaseFunctionsLogger.debug(message, data);
|
|
71
|
+
} else {
|
|
72
|
+
console.debug(message, data !== undefined ? data : "");
|
|
73
|
+
}
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
// Default export for easier importing
|
|
78
|
+
export default Logger;
|