@blackcode_sa/metaestetics-api 1.13.5 → 1.13.8
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 +20 -1
- package/dist/admin/index.d.ts +20 -1
- package/dist/admin/index.js +217 -1
- package/dist/admin/index.mjs +217 -1
- package/dist/index.d.mts +26 -3
- package/dist/index.d.ts +26 -3
- package/dist/index.js +168 -6
- package/dist/index.mjs +168 -6
- package/package.json +121 -121
- 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 +1984 -1984
- 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 +966 -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 -689
- package/src/admin/analytics/analytics.admin.service.ts +278 -278
- package/src/admin/analytics/index.ts +2 -2
- 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 +81 -81
- 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 +57 -57
- package/src/backoffice/services/analytics.service.proposal.md +863 -863
- package/src/backoffice/services/analytics.service.summary.md +143 -143
- package/src/backoffice/services/brand.service.ts +256 -256
- package/src/backoffice/services/category.service.ts +384 -384
- 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 +461 -461
- package/src/backoffice/services/technology.service.ts +1151 -1151
- 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 -67
- 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 -168
- 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 +211 -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/analytics/ARCHITECTURE.md +199 -199
- package/src/services/analytics/CLOUD_FUNCTIONS.md +225 -225
- package/src/services/analytics/GROUPED_ANALYTICS.md +501 -501
- package/src/services/analytics/QUICK_START.md +393 -393
- package/src/services/analytics/README.md +304 -304
- package/src/services/analytics/SUMMARY.md +141 -141
- package/src/services/analytics/TRENDS.md +380 -380
- package/src/services/analytics/USAGE_GUIDE.md +518 -518
- package/src/services/analytics/analytics-cloud.service.ts +222 -222
- package/src/services/analytics/analytics.service.ts +2142 -2142
- package/src/services/analytics/index.ts +4 -4
- package/src/services/analytics/review-analytics.service.ts +941 -941
- package/src/services/analytics/utils/appointment-filtering.utils.ts +138 -138
- package/src/services/analytics/utils/cost-calculation.utils.ts +182 -182
- package/src/services/analytics/utils/grouping.utils.ts +434 -434
- package/src/services/analytics/utils/stored-analytics.utils.ts +347 -347
- package/src/services/analytics/utils/time-calculation.utils.ts +186 -186
- package/src/services/analytics/utils/trend-calculation.utils.ts +200 -200
- package/src/services/appointment/README.md +17 -17
- package/src/services/appointment/appointment.service.ts +2558 -2558
- 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 +1043 -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 +14 -14
- 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 +1799 -1742
- package/src/services/procedure/README.md +163 -163
- package/src/services/procedure/index.ts +1 -1
- package/src/services/procedure/procedure.service.ts +2307 -2200
- package/src/services/reviews/index.ts +1 -1
- package/src/services/reviews/reviews.service.ts +734 -734
- 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/analytics/analytics.types.ts +597 -597
- package/src/types/analytics/grouped-analytics.types.ts +173 -173
- package/src/types/analytics/index.ts +4 -4
- package/src/types/analytics/stored-analytics.types.ts +137 -137
- 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 +498 -498
- 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 +47 -47
- package/src/types/notifications/README.md +77 -77
- package/src/types/notifications/index.ts +286 -286
- 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 -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 +494 -494
- 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 -195
- package/src/validations/schemas.ts +104 -104
- package/src/validations/shared.schema.ts +78 -78
|
@@ -1,202 +1,202 @@
|
|
|
1
|
-
import {
|
|
2
|
-
collection,
|
|
3
|
-
doc,
|
|
4
|
-
getDoc,
|
|
5
|
-
getDocs,
|
|
6
|
-
query,
|
|
7
|
-
where,
|
|
8
|
-
updateDoc,
|
|
9
|
-
setDoc,
|
|
10
|
-
deleteDoc,
|
|
11
|
-
Timestamp,
|
|
12
|
-
serverTimestamp,
|
|
13
|
-
} from "firebase/firestore";
|
|
14
|
-
import { BaseService } from "../base.service";
|
|
15
|
-
import {
|
|
16
|
-
ClinicAdmin,
|
|
17
|
-
CreateClinicAdminData,
|
|
18
|
-
UpdateClinicAdminData,
|
|
19
|
-
CLINIC_ADMINS_COLLECTION,
|
|
20
|
-
CLINIC_GROUPS_COLLECTION,
|
|
21
|
-
ClinicGroup,
|
|
22
|
-
CreateDefaultClinicGroupData,
|
|
23
|
-
Clinic,
|
|
24
|
-
} from "../../types/clinic";
|
|
25
|
-
import { ClinicGroupService } from "./clinic-group.service";
|
|
26
|
-
import { ClinicService } from "./clinic.service";
|
|
27
|
-
import {
|
|
28
|
-
clinicAdminSchema,
|
|
29
|
-
createClinicAdminSchema,
|
|
30
|
-
} from "../../validations/clinic.schema";
|
|
31
|
-
import { Auth } from "firebase/auth";
|
|
32
|
-
import { Firestore } from "firebase/firestore";
|
|
33
|
-
import { FirebaseApp } from "firebase/app";
|
|
34
|
-
import * as AdminUtils from "./utils/admin.utils";
|
|
35
|
-
|
|
36
|
-
export class ClinicAdminService extends BaseService {
|
|
37
|
-
private clinicGroupService?: ClinicGroupService;
|
|
38
|
-
private clinicService?: ClinicService;
|
|
39
|
-
|
|
40
|
-
constructor(
|
|
41
|
-
db: Firestore,
|
|
42
|
-
auth: Auth,
|
|
43
|
-
app: FirebaseApp,
|
|
44
|
-
clinicGroupService?: ClinicGroupService,
|
|
45
|
-
clinicService?: ClinicService
|
|
46
|
-
) {
|
|
47
|
-
super(db, auth, app);
|
|
48
|
-
this.clinicGroupService = clinicGroupService;
|
|
49
|
-
this.clinicService = clinicService;
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Postavlja servise nakon inicijalizacije
|
|
54
|
-
* (Rešava problem cirkularnih zavisnosti)
|
|
55
|
-
*/
|
|
56
|
-
setServices(
|
|
57
|
-
clinicGroupService: ClinicGroupService,
|
|
58
|
-
clinicService: ClinicService
|
|
59
|
-
): void {
|
|
60
|
-
this.clinicGroupService = clinicGroupService;
|
|
61
|
-
this.clinicService = clinicService;
|
|
62
|
-
}
|
|
63
|
-
|
|
64
|
-
/**
|
|
65
|
-
* Dohvata servis za grupacije klinika
|
|
66
|
-
*/
|
|
67
|
-
getClinicGroupService(): ClinicGroupService {
|
|
68
|
-
if (!this.clinicGroupService) {
|
|
69
|
-
throw new Error("ClinicGroupService not set");
|
|
70
|
-
}
|
|
71
|
-
return this.clinicGroupService;
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
/**
|
|
75
|
-
* Dohvata servis za klinike
|
|
76
|
-
*/
|
|
77
|
-
getClinicService(): ClinicService {
|
|
78
|
-
if (!this.clinicService) {
|
|
79
|
-
throw new Error("ClinicService not set");
|
|
80
|
-
}
|
|
81
|
-
return this.clinicService;
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
/**
|
|
85
|
-
* Sinhronizuje klinike za vlasnika grupe
|
|
86
|
-
*/
|
|
87
|
-
async syncOwnerClinics(adminId: string): Promise<void> {
|
|
88
|
-
return AdminUtils.syncOwnerClinics(
|
|
89
|
-
this.db,
|
|
90
|
-
adminId,
|
|
91
|
-
this.getClinicService(),
|
|
92
|
-
this.getClinicGroupService()
|
|
93
|
-
);
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
/**
|
|
97
|
-
* Kreira novi admin profil
|
|
98
|
-
*/
|
|
99
|
-
async createClinicAdmin(data: CreateClinicAdminData): Promise<ClinicAdmin> {
|
|
100
|
-
return AdminUtils.createClinicAdmin(
|
|
101
|
-
this.db,
|
|
102
|
-
data,
|
|
103
|
-
this.getClinicGroupService()
|
|
104
|
-
);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
/**
|
|
108
|
-
* Dohvata admin profil po ID-u
|
|
109
|
-
*/
|
|
110
|
-
async getClinicAdmin(adminId: string): Promise<ClinicAdmin | null> {
|
|
111
|
-
return AdminUtils.getClinicAdmin(this.db, adminId);
|
|
112
|
-
}
|
|
113
|
-
|
|
114
|
-
/**
|
|
115
|
-
* Dohvata admin profil po korisničkom ID-u
|
|
116
|
-
*/
|
|
117
|
-
async getClinicAdminByUserRef(userRef: string): Promise<ClinicAdmin | null> {
|
|
118
|
-
return AdminUtils.getClinicAdminByUserRef(this.db, userRef);
|
|
119
|
-
}
|
|
120
|
-
|
|
121
|
-
/**
|
|
122
|
-
* Dohvata sve admine u grupi
|
|
123
|
-
*/
|
|
124
|
-
async getClinicAdminsByGroup(clinicGroupId: string): Promise<ClinicAdmin[]> {
|
|
125
|
-
return AdminUtils.getClinicAdminsByGroup(this.db, clinicGroupId);
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
/**
|
|
129
|
-
* Ažurira admin profil
|
|
130
|
-
*/
|
|
131
|
-
async updateClinicAdmin(
|
|
132
|
-
adminId: string,
|
|
133
|
-
data: UpdateClinicAdminData
|
|
134
|
-
): Promise<ClinicAdmin> {
|
|
135
|
-
return AdminUtils.updateClinicAdmin(this.db, adminId, data);
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
/**
|
|
139
|
-
* Briše admin profil
|
|
140
|
-
*/
|
|
141
|
-
async deleteClinicAdmin(adminId: string): Promise<void> {
|
|
142
|
-
return AdminUtils.deleteClinicAdmin(this.db, adminId);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Dodaje kliniku u listu klinika kojima admin upravlja
|
|
147
|
-
*/
|
|
148
|
-
async addClinicToManaged(
|
|
149
|
-
adminId: string,
|
|
150
|
-
clinicId: string,
|
|
151
|
-
requesterId?: string
|
|
152
|
-
): Promise<void> {
|
|
153
|
-
return AdminUtils.addClinicToManaged(
|
|
154
|
-
this.db,
|
|
155
|
-
adminId,
|
|
156
|
-
clinicId,
|
|
157
|
-
requesterId,
|
|
158
|
-
this.getClinicService()
|
|
159
|
-
);
|
|
160
|
-
}
|
|
161
|
-
|
|
162
|
-
/**
|
|
163
|
-
* Uklanja kliniku iz liste klinika kojima admin upravlja
|
|
164
|
-
*/
|
|
165
|
-
async removeClinicFromManaged(
|
|
166
|
-
adminId: string,
|
|
167
|
-
clinicId: string,
|
|
168
|
-
requesterId?: string
|
|
169
|
-
): Promise<void> {
|
|
170
|
-
return AdminUtils.removeClinicFromManaged(
|
|
171
|
-
this.db,
|
|
172
|
-
adminId,
|
|
173
|
-
clinicId,
|
|
174
|
-
requesterId
|
|
175
|
-
);
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
/**
|
|
179
|
-
* Dohvata sve klinike kojima admin upravlja
|
|
180
|
-
*/
|
|
181
|
-
async getManagedClinics(adminId: string): Promise<Clinic[]> {
|
|
182
|
-
return AdminUtils.getManagedClinics(
|
|
183
|
-
this.db,
|
|
184
|
-
adminId,
|
|
185
|
-
this.getClinicService()
|
|
186
|
-
);
|
|
187
|
-
}
|
|
188
|
-
|
|
189
|
-
/**
|
|
190
|
-
* Dohvata sve aktivne klinike kojima admin upravlja
|
|
191
|
-
*/
|
|
192
|
-
async getActiveManagedClinics(adminId: string): Promise<Clinic[]> {
|
|
193
|
-
return AdminUtils.getActiveManagedClinics(
|
|
194
|
-
this.db,
|
|
195
|
-
adminId,
|
|
196
|
-
this.getClinicService()
|
|
197
|
-
);
|
|
198
|
-
}
|
|
199
|
-
|
|
200
|
-
// TODO: Add more methods for clinic admins for managing permissions, editing profiles by the admin, or by the clinic group owner and so on
|
|
201
|
-
// Generally refactor admin permissions and clinic group permissions and systems for admin management
|
|
202
|
-
}
|
|
1
|
+
import {
|
|
2
|
+
collection,
|
|
3
|
+
doc,
|
|
4
|
+
getDoc,
|
|
5
|
+
getDocs,
|
|
6
|
+
query,
|
|
7
|
+
where,
|
|
8
|
+
updateDoc,
|
|
9
|
+
setDoc,
|
|
10
|
+
deleteDoc,
|
|
11
|
+
Timestamp,
|
|
12
|
+
serverTimestamp,
|
|
13
|
+
} from "firebase/firestore";
|
|
14
|
+
import { BaseService } from "../base.service";
|
|
15
|
+
import {
|
|
16
|
+
ClinicAdmin,
|
|
17
|
+
CreateClinicAdminData,
|
|
18
|
+
UpdateClinicAdminData,
|
|
19
|
+
CLINIC_ADMINS_COLLECTION,
|
|
20
|
+
CLINIC_GROUPS_COLLECTION,
|
|
21
|
+
ClinicGroup,
|
|
22
|
+
CreateDefaultClinicGroupData,
|
|
23
|
+
Clinic,
|
|
24
|
+
} from "../../types/clinic";
|
|
25
|
+
import { ClinicGroupService } from "./clinic-group.service";
|
|
26
|
+
import { ClinicService } from "./clinic.service";
|
|
27
|
+
import {
|
|
28
|
+
clinicAdminSchema,
|
|
29
|
+
createClinicAdminSchema,
|
|
30
|
+
} from "../../validations/clinic.schema";
|
|
31
|
+
import { Auth } from "firebase/auth";
|
|
32
|
+
import { Firestore } from "firebase/firestore";
|
|
33
|
+
import { FirebaseApp } from "firebase/app";
|
|
34
|
+
import * as AdminUtils from "./utils/admin.utils";
|
|
35
|
+
|
|
36
|
+
export class ClinicAdminService extends BaseService {
|
|
37
|
+
private clinicGroupService?: ClinicGroupService;
|
|
38
|
+
private clinicService?: ClinicService;
|
|
39
|
+
|
|
40
|
+
constructor(
|
|
41
|
+
db: Firestore,
|
|
42
|
+
auth: Auth,
|
|
43
|
+
app: FirebaseApp,
|
|
44
|
+
clinicGroupService?: ClinicGroupService,
|
|
45
|
+
clinicService?: ClinicService
|
|
46
|
+
) {
|
|
47
|
+
super(db, auth, app);
|
|
48
|
+
this.clinicGroupService = clinicGroupService;
|
|
49
|
+
this.clinicService = clinicService;
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Postavlja servise nakon inicijalizacije
|
|
54
|
+
* (Rešava problem cirkularnih zavisnosti)
|
|
55
|
+
*/
|
|
56
|
+
setServices(
|
|
57
|
+
clinicGroupService: ClinicGroupService,
|
|
58
|
+
clinicService: ClinicService
|
|
59
|
+
): void {
|
|
60
|
+
this.clinicGroupService = clinicGroupService;
|
|
61
|
+
this.clinicService = clinicService;
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
/**
|
|
65
|
+
* Dohvata servis za grupacije klinika
|
|
66
|
+
*/
|
|
67
|
+
getClinicGroupService(): ClinicGroupService {
|
|
68
|
+
if (!this.clinicGroupService) {
|
|
69
|
+
throw new Error("ClinicGroupService not set");
|
|
70
|
+
}
|
|
71
|
+
return this.clinicGroupService;
|
|
72
|
+
}
|
|
73
|
+
|
|
74
|
+
/**
|
|
75
|
+
* Dohvata servis za klinike
|
|
76
|
+
*/
|
|
77
|
+
getClinicService(): ClinicService {
|
|
78
|
+
if (!this.clinicService) {
|
|
79
|
+
throw new Error("ClinicService not set");
|
|
80
|
+
}
|
|
81
|
+
return this.clinicService;
|
|
82
|
+
}
|
|
83
|
+
|
|
84
|
+
/**
|
|
85
|
+
* Sinhronizuje klinike za vlasnika grupe
|
|
86
|
+
*/
|
|
87
|
+
async syncOwnerClinics(adminId: string): Promise<void> {
|
|
88
|
+
return AdminUtils.syncOwnerClinics(
|
|
89
|
+
this.db,
|
|
90
|
+
adminId,
|
|
91
|
+
this.getClinicService(),
|
|
92
|
+
this.getClinicGroupService()
|
|
93
|
+
);
|
|
94
|
+
}
|
|
95
|
+
|
|
96
|
+
/**
|
|
97
|
+
* Kreira novi admin profil
|
|
98
|
+
*/
|
|
99
|
+
async createClinicAdmin(data: CreateClinicAdminData): Promise<ClinicAdmin> {
|
|
100
|
+
return AdminUtils.createClinicAdmin(
|
|
101
|
+
this.db,
|
|
102
|
+
data,
|
|
103
|
+
this.getClinicGroupService()
|
|
104
|
+
);
|
|
105
|
+
}
|
|
106
|
+
|
|
107
|
+
/**
|
|
108
|
+
* Dohvata admin profil po ID-u
|
|
109
|
+
*/
|
|
110
|
+
async getClinicAdmin(adminId: string): Promise<ClinicAdmin | null> {
|
|
111
|
+
return AdminUtils.getClinicAdmin(this.db, adminId);
|
|
112
|
+
}
|
|
113
|
+
|
|
114
|
+
/**
|
|
115
|
+
* Dohvata admin profil po korisničkom ID-u
|
|
116
|
+
*/
|
|
117
|
+
async getClinicAdminByUserRef(userRef: string): Promise<ClinicAdmin | null> {
|
|
118
|
+
return AdminUtils.getClinicAdminByUserRef(this.db, userRef);
|
|
119
|
+
}
|
|
120
|
+
|
|
121
|
+
/**
|
|
122
|
+
* Dohvata sve admine u grupi
|
|
123
|
+
*/
|
|
124
|
+
async getClinicAdminsByGroup(clinicGroupId: string): Promise<ClinicAdmin[]> {
|
|
125
|
+
return AdminUtils.getClinicAdminsByGroup(this.db, clinicGroupId);
|
|
126
|
+
}
|
|
127
|
+
|
|
128
|
+
/**
|
|
129
|
+
* Ažurira admin profil
|
|
130
|
+
*/
|
|
131
|
+
async updateClinicAdmin(
|
|
132
|
+
adminId: string,
|
|
133
|
+
data: UpdateClinicAdminData
|
|
134
|
+
): Promise<ClinicAdmin> {
|
|
135
|
+
return AdminUtils.updateClinicAdmin(this.db, adminId, data);
|
|
136
|
+
}
|
|
137
|
+
|
|
138
|
+
/**
|
|
139
|
+
* Briše admin profil
|
|
140
|
+
*/
|
|
141
|
+
async deleteClinicAdmin(adminId: string): Promise<void> {
|
|
142
|
+
return AdminUtils.deleteClinicAdmin(this.db, adminId);
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
/**
|
|
146
|
+
* Dodaje kliniku u listu klinika kojima admin upravlja
|
|
147
|
+
*/
|
|
148
|
+
async addClinicToManaged(
|
|
149
|
+
adminId: string,
|
|
150
|
+
clinicId: string,
|
|
151
|
+
requesterId?: string
|
|
152
|
+
): Promise<void> {
|
|
153
|
+
return AdminUtils.addClinicToManaged(
|
|
154
|
+
this.db,
|
|
155
|
+
adminId,
|
|
156
|
+
clinicId,
|
|
157
|
+
requesterId,
|
|
158
|
+
this.getClinicService()
|
|
159
|
+
);
|
|
160
|
+
}
|
|
161
|
+
|
|
162
|
+
/**
|
|
163
|
+
* Uklanja kliniku iz liste klinika kojima admin upravlja
|
|
164
|
+
*/
|
|
165
|
+
async removeClinicFromManaged(
|
|
166
|
+
adminId: string,
|
|
167
|
+
clinicId: string,
|
|
168
|
+
requesterId?: string
|
|
169
|
+
): Promise<void> {
|
|
170
|
+
return AdminUtils.removeClinicFromManaged(
|
|
171
|
+
this.db,
|
|
172
|
+
adminId,
|
|
173
|
+
clinicId,
|
|
174
|
+
requesterId
|
|
175
|
+
);
|
|
176
|
+
}
|
|
177
|
+
|
|
178
|
+
/**
|
|
179
|
+
* Dohvata sve klinike kojima admin upravlja
|
|
180
|
+
*/
|
|
181
|
+
async getManagedClinics(adminId: string): Promise<Clinic[]> {
|
|
182
|
+
return AdminUtils.getManagedClinics(
|
|
183
|
+
this.db,
|
|
184
|
+
adminId,
|
|
185
|
+
this.getClinicService()
|
|
186
|
+
);
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
/**
|
|
190
|
+
* Dohvata sve aktivne klinike kojima admin upravlja
|
|
191
|
+
*/
|
|
192
|
+
async getActiveManagedClinics(adminId: string): Promise<Clinic[]> {
|
|
193
|
+
return AdminUtils.getActiveManagedClinics(
|
|
194
|
+
this.db,
|
|
195
|
+
adminId,
|
|
196
|
+
this.getClinicService()
|
|
197
|
+
);
|
|
198
|
+
}
|
|
199
|
+
|
|
200
|
+
// TODO: Add more methods for clinic admins for managing permissions, editing profiles by the admin, or by the clinic group owner and so on
|
|
201
|
+
// Generally refactor admin permissions and clinic group permissions and systems for admin management
|
|
202
|
+
}
|