@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
package/package.json
CHANGED
|
@@ -1,119 +1,119 @@
|
|
|
1
|
-
{
|
|
2
|
-
"name": "@blackcode_sa/metaestetics-api",
|
|
3
|
-
"private": false,
|
|
4
|
-
"version": "1.12.
|
|
5
|
-
"description": "Firebase authentication service with anonymous upgrade support",
|
|
6
|
-
"main": "dist/index.js",
|
|
7
|
-
"module": "dist/index.mjs",
|
|
8
|
-
"types": "dist/index.d.ts",
|
|
9
|
-
"typesVersions": {
|
|
10
|
-
"*": {
|
|
11
|
-
"*": [
|
|
12
|
-
"./dist/index.d.ts"
|
|
13
|
-
],
|
|
14
|
-
"admin": [
|
|
15
|
-
"./dist/admin/index.d.ts"
|
|
16
|
-
],
|
|
17
|
-
"backoffice": [
|
|
18
|
-
"./dist/backoffice/index.d.ts"
|
|
19
|
-
]
|
|
20
|
-
}
|
|
21
|
-
},
|
|
22
|
-
"exports": {
|
|
23
|
-
".": {
|
|
24
|
-
"types": "./dist/index.d.ts",
|
|
25
|
-
"import": "./dist/index.mjs",
|
|
26
|
-
"require": "./dist/index.js",
|
|
27
|
-
"default": "./dist/index.js"
|
|
28
|
-
},
|
|
29
|
-
"./admin": {
|
|
30
|
-
"types": "./dist/admin/index.d.ts",
|
|
31
|
-
"import": "./dist/admin/index.mjs",
|
|
32
|
-
"require": "./dist/admin/index.js",
|
|
33
|
-
"default": "./dist/admin/index.js"
|
|
34
|
-
},
|
|
35
|
-
"./backoffice": {
|
|
36
|
-
"types": "./dist/backoffice/index.d.ts",
|
|
37
|
-
"import": "./dist/backoffice/index.mjs",
|
|
38
|
-
"require": "./dist/backoffice/index.js",
|
|
39
|
-
"default": "./dist/backoffice/index.js"
|
|
40
|
-
}
|
|
41
|
-
},
|
|
42
|
-
"files": [
|
|
43
|
-
"dist",
|
|
44
|
-
"src"
|
|
45
|
-
],
|
|
46
|
-
"publishConfig": {
|
|
47
|
-
"access": "public",
|
|
48
|
-
"registry": "https://registry.npmjs.org/"
|
|
49
|
-
},
|
|
50
|
-
"keywords": [
|
|
51
|
-
"firebase",
|
|
52
|
-
"auth",
|
|
53
|
-
"authentication",
|
|
54
|
-
"anonymous"
|
|
55
|
-
],
|
|
56
|
-
"author": "Blackcode SA",
|
|
57
|
-
"license": "MIT",
|
|
58
|
-
"scripts": {
|
|
59
|
-
"clean": "node -e \"const fs=require('fs');const path=require('path');const dist='dist';if(fs.existsSync(dist))fs.rmSync(dist,{recursive:true,force:true})\"",
|
|
60
|
-
"build:main": "tsup src/index.ts --format cjs,esm --dts --external react-native",
|
|
61
|
-
"build:admin": "tsup src/admin/index.ts --format cjs,esm --dts --out-dir dist/admin --external react-native",
|
|
62
|
-
"build:backoffice": "tsup src/backoffice/index.ts --format cjs,esm --dts --out-dir dist/backoffice",
|
|
63
|
-
"build": "npm run clean && npm run build:main && npm run build:admin && npm run build:backoffice",
|
|
64
|
-
"dev": "tsup src/index.ts --format cjs,esm --dts --watch --external react-native",
|
|
65
|
-
"prepublishOnly": "npm run build",
|
|
66
|
-
"publish:patch": "node scripts/publish.js patch",
|
|
67
|
-
"publish:minor": "node scripts/publish.js minor",
|
|
68
|
-
"publish:major": "node scripts/publish.js major",
|
|
69
|
-
"test": "jest",
|
|
70
|
-
"test:watch": "jest --watch",
|
|
71
|
-
"test:coverage": "jest --coverage"
|
|
72
|
-
},
|
|
73
|
-
"peerDependencies": {
|
|
74
|
-
"firebase": "^11.1.0",
|
|
75
|
-
"react": ">=16.8.0",
|
|
76
|
-
"react-native": "*"
|
|
77
|
-
},
|
|
78
|
-
"peerDependenciesMeta": {
|
|
79
|
-
"react-native": {
|
|
80
|
-
"optional": true
|
|
81
|
-
}
|
|
82
|
-
},
|
|
83
|
-
"devDependencies": {
|
|
84
|
-
"@testing-library/jest-dom": "^6.6.3",
|
|
85
|
-
"@types/jest": "^29.5.14",
|
|
86
|
-
"@types/luxon": "^3.7.1",
|
|
87
|
-
"@types/mailgun-js": "^0.22.18",
|
|
88
|
-
"@types/node": "^20.17.13",
|
|
89
|
-
"@types/react": "^19.1.0",
|
|
90
|
-
"expo-crypto": "^14.0.0",
|
|
91
|
-
"firebase-mock": "^2.3.2",
|
|
92
|
-
"jest": "^29.7.0",
|
|
93
|
-
"ts-jest": "^29.2.5",
|
|
94
|
-
"tsup": "^8.3.5",
|
|
95
|
-
"typescript": "^5.7.3"
|
|
96
|
-
},
|
|
97
|
-
"dependencies": {
|
|
98
|
-
"axios": "^1.8.3",
|
|
99
|
-
"expo-server-sdk": "^3.13.0",
|
|
100
|
-
"firebase-admin": "^13.0.2",
|
|
101
|
-
"geofire-common": "^6.0.0",
|
|
102
|
-
"luxon": "^3.7.1",
|
|
103
|
-
"tz-lookup": "^6.1.25",
|
|
104
|
-
"zod": "^3.24.1"
|
|
105
|
-
},
|
|
106
|
-
"optionalDependencies": {
|
|
107
|
-
"firebase-functions": "^6.2.0"
|
|
108
|
-
},
|
|
109
|
-
"jest": {
|
|
110
|
-
"preset": "ts-jest",
|
|
111
|
-
"testEnvironment": "node",
|
|
112
|
-
"moduleNameMapper": {
|
|
113
|
-
"^@/(.*)$": "<rootDir>/src/$1"
|
|
114
|
-
},
|
|
115
|
-
"setupFilesAfterEnv": [
|
|
116
|
-
"<rootDir>/jest.setup.ts"
|
|
117
|
-
]
|
|
118
|
-
}
|
|
119
|
-
}
|
|
1
|
+
{
|
|
2
|
+
"name": "@blackcode_sa/metaestetics-api",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "1.12.67",
|
|
5
|
+
"description": "Firebase authentication service with anonymous upgrade support",
|
|
6
|
+
"main": "dist/index.js",
|
|
7
|
+
"module": "dist/index.mjs",
|
|
8
|
+
"types": "dist/index.d.ts",
|
|
9
|
+
"typesVersions": {
|
|
10
|
+
"*": {
|
|
11
|
+
"*": [
|
|
12
|
+
"./dist/index.d.ts"
|
|
13
|
+
],
|
|
14
|
+
"admin": [
|
|
15
|
+
"./dist/admin/index.d.ts"
|
|
16
|
+
],
|
|
17
|
+
"backoffice": [
|
|
18
|
+
"./dist/backoffice/index.d.ts"
|
|
19
|
+
]
|
|
20
|
+
}
|
|
21
|
+
},
|
|
22
|
+
"exports": {
|
|
23
|
+
".": {
|
|
24
|
+
"types": "./dist/index.d.ts",
|
|
25
|
+
"import": "./dist/index.mjs",
|
|
26
|
+
"require": "./dist/index.js",
|
|
27
|
+
"default": "./dist/index.js"
|
|
28
|
+
},
|
|
29
|
+
"./admin": {
|
|
30
|
+
"types": "./dist/admin/index.d.ts",
|
|
31
|
+
"import": "./dist/admin/index.mjs",
|
|
32
|
+
"require": "./dist/admin/index.js",
|
|
33
|
+
"default": "./dist/admin/index.js"
|
|
34
|
+
},
|
|
35
|
+
"./backoffice": {
|
|
36
|
+
"types": "./dist/backoffice/index.d.ts",
|
|
37
|
+
"import": "./dist/backoffice/index.mjs",
|
|
38
|
+
"require": "./dist/backoffice/index.js",
|
|
39
|
+
"default": "./dist/backoffice/index.js"
|
|
40
|
+
}
|
|
41
|
+
},
|
|
42
|
+
"files": [
|
|
43
|
+
"dist",
|
|
44
|
+
"src"
|
|
45
|
+
],
|
|
46
|
+
"publishConfig": {
|
|
47
|
+
"access": "public",
|
|
48
|
+
"registry": "https://registry.npmjs.org/"
|
|
49
|
+
},
|
|
50
|
+
"keywords": [
|
|
51
|
+
"firebase",
|
|
52
|
+
"auth",
|
|
53
|
+
"authentication",
|
|
54
|
+
"anonymous"
|
|
55
|
+
],
|
|
56
|
+
"author": "Blackcode SA",
|
|
57
|
+
"license": "MIT",
|
|
58
|
+
"scripts": {
|
|
59
|
+
"clean": "node -e \"const fs=require('fs');const path=require('path');const dist='dist';if(fs.existsSync(dist))fs.rmSync(dist,{recursive:true,force:true})\"",
|
|
60
|
+
"build:main": "tsup src/index.ts --format cjs,esm --dts --external react-native",
|
|
61
|
+
"build:admin": "tsup src/admin/index.ts --format cjs,esm --dts --out-dir dist/admin --external react-native",
|
|
62
|
+
"build:backoffice": "tsup src/backoffice/index.ts --format cjs,esm --dts --out-dir dist/backoffice",
|
|
63
|
+
"build": "npm run clean && npm run build:main && npm run build:admin && npm run build:backoffice",
|
|
64
|
+
"dev": "tsup src/index.ts --format cjs,esm --dts --watch --external react-native",
|
|
65
|
+
"prepublishOnly": "npm run build",
|
|
66
|
+
"publish:patch": "node scripts/publish.js patch",
|
|
67
|
+
"publish:minor": "node scripts/publish.js minor",
|
|
68
|
+
"publish:major": "node scripts/publish.js major",
|
|
69
|
+
"test": "jest",
|
|
70
|
+
"test:watch": "jest --watch",
|
|
71
|
+
"test:coverage": "jest --coverage"
|
|
72
|
+
},
|
|
73
|
+
"peerDependencies": {
|
|
74
|
+
"firebase": "^11.1.0",
|
|
75
|
+
"react": ">=16.8.0",
|
|
76
|
+
"react-native": "*"
|
|
77
|
+
},
|
|
78
|
+
"peerDependenciesMeta": {
|
|
79
|
+
"react-native": {
|
|
80
|
+
"optional": true
|
|
81
|
+
}
|
|
82
|
+
},
|
|
83
|
+
"devDependencies": {
|
|
84
|
+
"@testing-library/jest-dom": "^6.6.3",
|
|
85
|
+
"@types/jest": "^29.5.14",
|
|
86
|
+
"@types/luxon": "^3.7.1",
|
|
87
|
+
"@types/mailgun-js": "^0.22.18",
|
|
88
|
+
"@types/node": "^20.17.13",
|
|
89
|
+
"@types/react": "^19.1.0",
|
|
90
|
+
"expo-crypto": "^14.0.0",
|
|
91
|
+
"firebase-mock": "^2.3.2",
|
|
92
|
+
"jest": "^29.7.0",
|
|
93
|
+
"ts-jest": "^29.2.5",
|
|
94
|
+
"tsup": "^8.3.5",
|
|
95
|
+
"typescript": "^5.7.3"
|
|
96
|
+
},
|
|
97
|
+
"dependencies": {
|
|
98
|
+
"axios": "^1.8.3",
|
|
99
|
+
"expo-server-sdk": "^3.13.0",
|
|
100
|
+
"firebase-admin": "^13.0.2",
|
|
101
|
+
"geofire-common": "^6.0.0",
|
|
102
|
+
"luxon": "^3.7.1",
|
|
103
|
+
"tz-lookup": "^6.1.25",
|
|
104
|
+
"zod": "^3.24.1"
|
|
105
|
+
},
|
|
106
|
+
"optionalDependencies": {
|
|
107
|
+
"firebase-functions": "^6.2.0"
|
|
108
|
+
},
|
|
109
|
+
"jest": {
|
|
110
|
+
"preset": "ts-jest",
|
|
111
|
+
"testEnvironment": "node",
|
|
112
|
+
"moduleNameMapper": {
|
|
113
|
+
"^@/(.*)$": "<rootDir>/src/$1"
|
|
114
|
+
},
|
|
115
|
+
"setupFilesAfterEnv": [
|
|
116
|
+
"<rootDir>/jest.setup.ts"
|
|
117
|
+
]
|
|
118
|
+
}
|
|
119
|
+
}
|
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
export const collection = jest.fn();
|
|
2
|
-
export const doc = jest.fn();
|
|
3
|
-
export const getDoc = jest.fn();
|
|
4
|
-
export const getDocs = jest.fn();
|
|
5
|
-
export const addDoc = jest.fn();
|
|
6
|
-
export const updateDoc = jest.fn();
|
|
7
|
-
export const query = jest.fn();
|
|
8
|
-
export const where = jest.fn();
|
|
9
|
-
export const arrayUnion = jest.fn();
|
|
10
|
-
export const arrayRemove = jest.fn();
|
|
1
|
+
export const collection = jest.fn();
|
|
2
|
+
export const doc = jest.fn();
|
|
3
|
+
export const getDoc = jest.fn();
|
|
4
|
+
export const getDocs = jest.fn();
|
|
5
|
+
export const addDoc = jest.fn();
|
|
6
|
+
export const updateDoc = jest.fn();
|
|
7
|
+
export const query = jest.fn();
|
|
8
|
+
export const where = jest.fn();
|
|
9
|
+
export const arrayUnion = jest.fn();
|
|
10
|
+
export const arrayRemove = jest.fn();
|
|
@@ -1,79 +1,79 @@
|
|
|
1
|
-
# Data Aggregation Services
|
|
2
|
-
|
|
3
|
-
This directory contains services responsible for maintaining data consistency across related Firestore collections. These aggregation services are typically used by Cloud Functions that react to document changes (create/update/delete operations).
|
|
4
|
-
|
|
5
|
-
## Purpose
|
|
6
|
-
|
|
7
|
-
When a document is created, updated, or deleted in one collection, related documents in other collections often need to be updated to maintain data consistency and support efficient querying. For example:
|
|
8
|
-
|
|
9
|
-
- When a practitioner is updated, their information needs to be updated in associated clinics
|
|
10
|
-
- When a procedure is added, summaries need to be added to both practitioner and clinic documents
|
|
11
|
-
- When a clinic is deleted, related calendar events need to be canceled
|
|
12
|
-
|
|
13
|
-
Rather than embedding this logic in the main service classes, these aggregation services keep the concerns separate and can be independently triggered by Cloud Functions.
|
|
14
|
-
|
|
15
|
-
## Design Pattern
|
|
16
|
-
|
|
17
|
-
Each aggregation service:
|
|
18
|
-
|
|
19
|
-
1. Handles a specific domain entity (clinic, practitioner, procedure, etc.)
|
|
20
|
-
2. Contains methods organized by event type (creation, update, deletion)
|
|
21
|
-
3. Focuses solely on updating related collections
|
|
22
|
-
4. Uses transactions where appropriate to ensure consistency
|
|
23
|
-
|
|
24
|
-
## Available Aggregation Services
|
|
25
|
-
|
|
26
|
-
- `ClinicAggregationService`: Handles clinic-related aggregations
|
|
27
|
-
- `PractitionerAggregationService`: Handles practitioner-related aggregations
|
|
28
|
-
- `ProcedureAggregationService`: Handles procedure-related aggregations
|
|
29
|
-
- `PatientAggregationService`: Handles patient-related aggregations
|
|
30
|
-
|
|
31
|
-
## Implementation Notes
|
|
32
|
-
|
|
33
|
-
- These services are for admin/internal use only
|
|
34
|
-
- They operate with admin Firestore privileges
|
|
35
|
-
- They are designed for use by Cloud Functions, not directly by client applications
|
|
36
|
-
- They include detailed logging for monitoring and debugging
|
|
37
|
-
|
|
38
|
-
## Example Usage
|
|
39
|
-
|
|
40
|
-
In a Cloud Function:
|
|
41
|
-
|
|
42
|
-
```typescript
|
|
43
|
-
exports.onPractitionerUpdate = functions.firestore
|
|
44
|
-
.document('practitioners/{practitionerId}')
|
|
45
|
-
.onUpdate(async (change, context) => {
|
|
46
|
-
const beforeData = change.before.data();
|
|
47
|
-
const afterData = change.after.data();
|
|
48
|
-
const practitionerId = context.params.practitionerId;
|
|
49
|
-
|
|
50
|
-
// Only run aggregation if specific fields changed
|
|
51
|
-
if (beforeData.basicInfo.firstName !== afterData.basicInfo.firstName ||
|
|
52
|
-
beforeData.basicInfo.lastName !== afterData.basicInfo.lastName ||
|
|
53
|
-
beforeData.basicInfo.profileImageUrl !== afterData.basicInfo.profileImageUrl) {
|
|
54
|
-
|
|
55
|
-
const aggregationService = new PractitionerAggregationService();
|
|
56
|
-
|
|
57
|
-
// Build doctorInfo object from updated data
|
|
58
|
-
const doctorInfo = {
|
|
59
|
-
id: practitionerId,
|
|
60
|
-
name: `${afterData.basicInfo.firstName} ${afterData.basicInfo.lastName}`,
|
|
61
|
-
photo: afterData.basicInfo.profileImageUrl || '',
|
|
62
|
-
// other fields...
|
|
63
|
-
};
|
|
64
|
-
|
|
65
|
-
// Update practitioner info in all related clinics
|
|
66
|
-
await aggregationService.updatePractitionerInfoInClinics(
|
|
67
|
-
afterData.clinics,
|
|
68
|
-
doctorInfo
|
|
69
|
-
);
|
|
70
|
-
|
|
71
|
-
// Update practitioner info in all related procedures
|
|
72
|
-
await aggregationService.updatePractitionerInfoInProcedures(
|
|
73
|
-
afterData.procedures,
|
|
74
|
-
doctorInfo
|
|
75
|
-
);
|
|
76
|
-
}
|
|
77
|
-
});
|
|
78
|
-
</rewritten_file>
|
|
79
|
-
```
|
|
1
|
+
# Data Aggregation Services
|
|
2
|
+
|
|
3
|
+
This directory contains services responsible for maintaining data consistency across related Firestore collections. These aggregation services are typically used by Cloud Functions that react to document changes (create/update/delete operations).
|
|
4
|
+
|
|
5
|
+
## Purpose
|
|
6
|
+
|
|
7
|
+
When a document is created, updated, or deleted in one collection, related documents in other collections often need to be updated to maintain data consistency and support efficient querying. For example:
|
|
8
|
+
|
|
9
|
+
- When a practitioner is updated, their information needs to be updated in associated clinics
|
|
10
|
+
- When a procedure is added, summaries need to be added to both practitioner and clinic documents
|
|
11
|
+
- When a clinic is deleted, related calendar events need to be canceled
|
|
12
|
+
|
|
13
|
+
Rather than embedding this logic in the main service classes, these aggregation services keep the concerns separate and can be independently triggered by Cloud Functions.
|
|
14
|
+
|
|
15
|
+
## Design Pattern
|
|
16
|
+
|
|
17
|
+
Each aggregation service:
|
|
18
|
+
|
|
19
|
+
1. Handles a specific domain entity (clinic, practitioner, procedure, etc.)
|
|
20
|
+
2. Contains methods organized by event type (creation, update, deletion)
|
|
21
|
+
3. Focuses solely on updating related collections
|
|
22
|
+
4. Uses transactions where appropriate to ensure consistency
|
|
23
|
+
|
|
24
|
+
## Available Aggregation Services
|
|
25
|
+
|
|
26
|
+
- `ClinicAggregationService`: Handles clinic-related aggregations
|
|
27
|
+
- `PractitionerAggregationService`: Handles practitioner-related aggregations
|
|
28
|
+
- `ProcedureAggregationService`: Handles procedure-related aggregations
|
|
29
|
+
- `PatientAggregationService`: Handles patient-related aggregations
|
|
30
|
+
|
|
31
|
+
## Implementation Notes
|
|
32
|
+
|
|
33
|
+
- These services are for admin/internal use only
|
|
34
|
+
- They operate with admin Firestore privileges
|
|
35
|
+
- They are designed for use by Cloud Functions, not directly by client applications
|
|
36
|
+
- They include detailed logging for monitoring and debugging
|
|
37
|
+
|
|
38
|
+
## Example Usage
|
|
39
|
+
|
|
40
|
+
In a Cloud Function:
|
|
41
|
+
|
|
42
|
+
```typescript
|
|
43
|
+
exports.onPractitionerUpdate = functions.firestore
|
|
44
|
+
.document('practitioners/{practitionerId}')
|
|
45
|
+
.onUpdate(async (change, context) => {
|
|
46
|
+
const beforeData = change.before.data();
|
|
47
|
+
const afterData = change.after.data();
|
|
48
|
+
const practitionerId = context.params.practitionerId;
|
|
49
|
+
|
|
50
|
+
// Only run aggregation if specific fields changed
|
|
51
|
+
if (beforeData.basicInfo.firstName !== afterData.basicInfo.firstName ||
|
|
52
|
+
beforeData.basicInfo.lastName !== afterData.basicInfo.lastName ||
|
|
53
|
+
beforeData.basicInfo.profileImageUrl !== afterData.basicInfo.profileImageUrl) {
|
|
54
|
+
|
|
55
|
+
const aggregationService = new PractitionerAggregationService();
|
|
56
|
+
|
|
57
|
+
// Build doctorInfo object from updated data
|
|
58
|
+
const doctorInfo = {
|
|
59
|
+
id: practitionerId,
|
|
60
|
+
name: `${afterData.basicInfo.firstName} ${afterData.basicInfo.lastName}`,
|
|
61
|
+
photo: afterData.basicInfo.profileImageUrl || '',
|
|
62
|
+
// other fields...
|
|
63
|
+
};
|
|
64
|
+
|
|
65
|
+
// Update practitioner info in all related clinics
|
|
66
|
+
await aggregationService.updatePractitionerInfoInClinics(
|
|
67
|
+
afterData.clinics,
|
|
68
|
+
doctorInfo
|
|
69
|
+
);
|
|
70
|
+
|
|
71
|
+
// Update practitioner info in all related procedures
|
|
72
|
+
await aggregationService.updatePractitionerInfoInProcedures(
|
|
73
|
+
afterData.procedures,
|
|
74
|
+
doctorInfo
|
|
75
|
+
);
|
|
76
|
+
}
|
|
77
|
+
});
|
|
78
|
+
</rewritten_file>
|
|
79
|
+
```
|