@blackcode_sa/metaestetics-api 1.12.62 → 1.12.63
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/admin/index.d.mts +4 -2
- package/dist/admin/index.d.ts +4 -2
- package/dist/admin/index.js +4 -45
- package/dist/admin/index.mjs +4 -45
- package/dist/backoffice/index.d.mts +9 -0
- package/dist/backoffice/index.d.ts +9 -0
- package/dist/backoffice/index.js +11 -0
- package/dist/backoffice/index.mjs +11 -0
- package/dist/index.d.mts +99 -3
- package/dist/index.d.ts +99 -3
- package/dist/index.js +545 -281
- package/dist/index.mjs +867 -603
- package/package.json +119 -119
- package/src/__mocks__/firstore.ts +10 -10
- package/src/admin/aggregation/README.md +79 -79
- package/src/admin/aggregation/appointment/README.md +128 -128
- package/src/admin/aggregation/appointment/appointment.aggregation.service.ts +1844 -1844
- package/src/admin/aggregation/appointment/index.ts +1 -1
- package/src/admin/aggregation/clinic/README.md +52 -52
- package/src/admin/aggregation/clinic/clinic.aggregation.service.ts +703 -703
- package/src/admin/aggregation/clinic/index.ts +1 -1
- package/src/admin/aggregation/forms/README.md +13 -13
- package/src/admin/aggregation/forms/filled-forms.aggregation.service.ts +322 -322
- package/src/admin/aggregation/forms/index.ts +1 -1
- package/src/admin/aggregation/index.ts +8 -8
- package/src/admin/aggregation/patient/README.md +27 -27
- package/src/admin/aggregation/patient/index.ts +1 -1
- package/src/admin/aggregation/patient/patient.aggregation.service.ts +141 -141
- package/src/admin/aggregation/practitioner/README.md +42 -42
- package/src/admin/aggregation/practitioner/index.ts +1 -1
- package/src/admin/aggregation/practitioner/practitioner.aggregation.service.ts +433 -433
- package/src/admin/aggregation/practitioner-invite/index.ts +1 -1
- package/src/admin/aggregation/practitioner-invite/practitioner-invite.aggregation.service.ts +961 -961
- package/src/admin/aggregation/procedure/README.md +43 -43
- package/src/admin/aggregation/procedure/index.ts +1 -1
- package/src/admin/aggregation/procedure/procedure.aggregation.service.ts +702 -702
- package/src/admin/aggregation/reviews/index.ts +1 -1
- package/src/admin/aggregation/reviews/reviews.aggregation.service.ts +641 -689
- package/src/admin/booking/README.md +125 -125
- package/src/admin/booking/booking.admin.ts +1037 -1037
- package/src/admin/booking/booking.calculator.ts +712 -712
- package/src/admin/booking/booking.types.ts +59 -59
- package/src/admin/booking/index.ts +3 -3
- package/src/admin/booking/timezones-problem.md +185 -185
- package/src/admin/calendar/README.md +7 -7
- package/src/admin/calendar/calendar.admin.service.ts +345 -345
- package/src/admin/calendar/index.ts +1 -1
- package/src/admin/documentation-templates/document-manager.admin.ts +260 -260
- package/src/admin/documentation-templates/index.ts +1 -1
- package/src/admin/free-consultation/free-consultation-utils.admin.ts +148 -148
- package/src/admin/free-consultation/index.ts +1 -1
- package/src/admin/index.ts +75 -75
- package/src/admin/logger/index.ts +78 -78
- package/src/admin/mailing/README.md +95 -95
- package/src/admin/mailing/appointment/appointment.mailing.service.ts +732 -732
- package/src/admin/mailing/appointment/index.ts +1 -1
- package/src/admin/mailing/appointment/templates/patient/appointment-confirmed.html +40 -40
- package/src/admin/mailing/base.mailing.service.ts +208 -208
- package/src/admin/mailing/index.ts +3 -3
- package/src/admin/mailing/practitionerInvite/existing-practitioner-invite.mailing.ts +611 -611
- package/src/admin/mailing/practitionerInvite/index.ts +2 -2
- package/src/admin/mailing/practitionerInvite/practitionerInvite.mailing.ts +395 -395
- package/src/admin/mailing/practitionerInvite/templates/existing-practitioner-invitation.template.ts +155 -155
- package/src/admin/mailing/practitionerInvite/templates/invitation.template.ts +101 -101
- package/src/admin/mailing/practitionerInvite/templates/invite-accepted-notification.template.ts +228 -228
- package/src/admin/mailing/practitionerInvite/templates/invite-rejected-notification.template.ts +242 -242
- package/src/admin/notifications/index.ts +1 -1
- package/src/admin/notifications/notifications.admin.ts +710 -710
- package/src/admin/requirements/README.md +128 -128
- package/src/admin/requirements/index.ts +1 -1
- package/src/admin/requirements/patient-requirements.admin.service.ts +475 -475
- package/src/admin/users/index.ts +1 -1
- package/src/admin/users/user-profile.admin.ts +405 -405
- package/src/backoffice/constants/certification.constants.ts +13 -13
- package/src/backoffice/constants/index.ts +1 -1
- package/src/backoffice/errors/backoffice.errors.ts +181 -181
- package/src/backoffice/errors/index.ts +1 -1
- package/src/backoffice/expo-safe/README.md +26 -26
- package/src/backoffice/expo-safe/index.ts +41 -41
- package/src/backoffice/index.ts +5 -5
- package/src/backoffice/services/FIXES_README.md +102 -102
- package/src/backoffice/services/README.md +40 -40
- package/src/backoffice/services/brand.service.ts +256 -256
- package/src/backoffice/services/category.service.ts +318 -318
- package/src/backoffice/services/constants.service.ts +385 -385
- package/src/backoffice/services/documentation-template.service.ts +202 -202
- package/src/backoffice/services/index.ts +8 -8
- package/src/backoffice/services/migrate-products.ts +116 -116
- package/src/backoffice/services/product.service.ts +553 -553
- package/src/backoffice/services/requirement.service.ts +235 -235
- package/src/backoffice/services/subcategory.service.ts +395 -395
- package/src/backoffice/services/technology.service.ts +1083 -1070
- package/src/backoffice/types/README.md +12 -12
- package/src/backoffice/types/admin-constants.types.ts +69 -69
- package/src/backoffice/types/brand.types.ts +29 -29
- package/src/backoffice/types/category.types.ts +62 -62
- package/src/backoffice/types/documentation-templates.types.ts +28 -28
- package/src/backoffice/types/index.ts +10 -10
- package/src/backoffice/types/procedure-product.types.ts +38 -38
- package/src/backoffice/types/product.types.ts +240 -240
- package/src/backoffice/types/requirement.types.ts +63 -63
- package/src/backoffice/types/static/README.md +18 -18
- package/src/backoffice/types/static/blocking-condition.types.ts +21 -21
- package/src/backoffice/types/static/certification.types.ts +37 -37
- package/src/backoffice/types/static/contraindication.types.ts +19 -19
- package/src/backoffice/types/static/index.ts +6 -6
- package/src/backoffice/types/static/pricing.types.ts +16 -16
- package/src/backoffice/types/static/procedure-family.types.ts +14 -14
- package/src/backoffice/types/static/treatment-benefit.types.ts +22 -22
- package/src/backoffice/types/subcategory.types.ts +34 -34
- package/src/backoffice/types/technology.types.ts +163 -161
- package/src/backoffice/validations/index.ts +1 -1
- package/src/backoffice/validations/schemas.ts +164 -163
- package/src/config/__mocks__/firebase.ts +99 -99
- package/src/config/firebase.ts +78 -78
- package/src/config/index.ts +9 -9
- package/src/errors/auth.error.ts +6 -6
- package/src/errors/auth.errors.ts +200 -200
- package/src/errors/clinic.errors.ts +32 -32
- package/src/errors/firebase.errors.ts +47 -47
- package/src/errors/user.errors.ts +99 -99
- package/src/index.backup.ts +407 -407
- package/src/index.ts +6 -6
- package/src/locales/en.ts +31 -31
- package/src/recommender/admin/index.ts +1 -1
- package/src/recommender/admin/services/recommender.service.admin.ts +5 -5
- package/src/recommender/front/index.ts +1 -1
- package/src/recommender/front/services/onboarding.service.ts +5 -5
- package/src/recommender/front/services/recommender.service.ts +3 -3
- package/src/recommender/index.ts +1 -1
- package/src/services/PATIENTAUTH.MD +197 -197
- package/src/services/README.md +106 -106
- package/src/services/__tests__/auth/auth.mock.test.ts +17 -17
- package/src/services/__tests__/auth/auth.setup.ts +293 -293
- package/src/services/__tests__/auth.service.test.ts +346 -346
- package/src/services/__tests__/base.service.test.ts +77 -77
- package/src/services/__tests__/user.service.test.ts +528 -528
- package/src/services/appointment/README.md +17 -17
- package/src/services/appointment/appointment.service.ts +2505 -2082
- package/src/services/appointment/index.ts +1 -1
- package/src/services/appointment/utils/appointment.utils.ts +552 -552
- package/src/services/appointment/utils/extended-procedure.utils.ts +314 -314
- package/src/services/appointment/utils/form-initialization.utils.ts +225 -225
- package/src/services/appointment/utils/recommended-procedure.utils.ts +195 -195
- package/src/services/appointment/utils/zone-management.utils.ts +353 -353
- package/src/services/appointment/utils/zone-photo.utils.ts +152 -152
- package/src/services/auth/auth.service.ts +989 -989
- package/src/services/auth/auth.v2.service.ts +961 -961
- package/src/services/auth/index.ts +7 -7
- package/src/services/auth/utils/error.utils.ts +90 -90
- package/src/services/auth/utils/firebase.utils.ts +49 -49
- package/src/services/auth/utils/index.ts +21 -21
- package/src/services/auth/utils/practitioner.utils.ts +125 -125
- package/src/services/base.service.ts +41 -41
- package/src/services/calendar/calendar.service.ts +1077 -1077
- package/src/services/calendar/calendar.v2.service.ts +1683 -1683
- package/src/services/calendar/calendar.v3.service.ts +313 -313
- package/src/services/calendar/externalCalendar.service.ts +178 -178
- package/src/services/calendar/index.ts +5 -5
- package/src/services/calendar/synced-calendars.service.ts +743 -743
- package/src/services/calendar/utils/appointment.utils.ts +265 -265
- package/src/services/calendar/utils/calendar-event.utils.ts +646 -646
- package/src/services/calendar/utils/clinic.utils.ts +237 -237
- package/src/services/calendar/utils/docs.utils.ts +157 -157
- package/src/services/calendar/utils/google-calendar.utils.ts +697 -697
- package/src/services/calendar/utils/index.ts +8 -8
- package/src/services/calendar/utils/patient.utils.ts +198 -198
- package/src/services/calendar/utils/practitioner.utils.ts +221 -221
- package/src/services/calendar/utils/synced-calendar.utils.ts +472 -472
- package/src/services/clinic/README.md +204 -204
- package/src/services/clinic/__tests__/clinic-admin.service.test.ts +287 -287
- package/src/services/clinic/__tests__/clinic-group.service.test.ts +352 -352
- package/src/services/clinic/__tests__/clinic.service.test.ts +354 -354
- package/src/services/clinic/billing-transactions.service.ts +217 -217
- package/src/services/clinic/clinic-admin.service.ts +202 -202
- package/src/services/clinic/clinic-group.service.ts +310 -310
- package/src/services/clinic/clinic.service.ts +708 -708
- package/src/services/clinic/index.ts +5 -5
- package/src/services/clinic/practitioner-invite.service.ts +519 -519
- package/src/services/clinic/utils/admin.utils.ts +551 -551
- package/src/services/clinic/utils/clinic-group.utils.ts +646 -646
- package/src/services/clinic/utils/clinic.utils.ts +949 -949
- package/src/services/clinic/utils/filter.utils.d.ts +23 -23
- package/src/services/clinic/utils/filter.utils.ts +446 -446
- package/src/services/clinic/utils/index.ts +11 -11
- package/src/services/clinic/utils/photos.utils.ts +188 -188
- package/src/services/clinic/utils/search.utils.ts +84 -84
- package/src/services/clinic/utils/tag.utils.ts +124 -124
- package/src/services/documentation-templates/documentation-template.service.ts +537 -537
- package/src/services/documentation-templates/filled-document.service.ts +587 -587
- package/src/services/documentation-templates/index.ts +2 -2
- package/src/services/index.ts +13 -13
- package/src/services/media/index.ts +1 -1
- package/src/services/media/media.service.ts +418 -418
- package/src/services/notifications/__tests__/notification.service.test.ts +242 -242
- package/src/services/notifications/index.ts +1 -1
- package/src/services/notifications/notification.service.ts +215 -215
- package/src/services/patient/README.md +48 -48
- package/src/services/patient/To-Do.md +43 -43
- package/src/services/patient/__tests__/patient.service.test.ts +294 -294
- package/src/services/patient/index.ts +2 -2
- package/src/services/patient/patient.service.ts +883 -883
- package/src/services/patient/patientRequirements.service.ts +285 -285
- package/src/services/patient/utils/aesthetic-analysis.utils.ts +176 -176
- package/src/services/patient/utils/clinic.utils.ts +80 -80
- package/src/services/patient/utils/docs.utils.ts +142 -142
- package/src/services/patient/utils/index.ts +9 -9
- package/src/services/patient/utils/location.utils.ts +126 -126
- package/src/services/patient/utils/medical-stuff.utils.ts +143 -143
- package/src/services/patient/utils/medical.utils.ts +458 -458
- package/src/services/patient/utils/practitioner.utils.ts +260 -260
- package/src/services/patient/utils/profile.utils.ts +510 -510
- package/src/services/patient/utils/sensitive.utils.ts +260 -260
- package/src/services/patient/utils/token.utils.ts +211 -211
- package/src/services/practitioner/README.md +145 -145
- package/src/services/practitioner/index.ts +1 -1
- package/src/services/practitioner/practitioner.service.ts +1742 -1742
- package/src/services/procedure/README.md +163 -163
- package/src/services/procedure/index.ts +1 -1
- package/src/services/procedure/procedure.service.ts +1682 -1682
- package/src/services/reviews/index.ts +1 -1
- package/src/services/reviews/reviews.service.ts +636 -683
- package/src/services/user/index.ts +1 -1
- package/src/services/user/user.service.ts +489 -489
- package/src/services/user/user.v2.service.ts +466 -466
- package/src/types/appointment/index.ts +481 -453
- package/src/types/calendar/index.ts +258 -258
- package/src/types/calendar/synced-calendar.types.ts +66 -66
- package/src/types/clinic/index.ts +489 -489
- package/src/types/clinic/practitioner-invite.types.ts +91 -91
- package/src/types/clinic/preferences.types.ts +159 -159
- package/src/types/clinic/to-do +3 -3
- package/src/types/documentation-templates/index.ts +308 -308
- package/src/types/index.ts +44 -44
- package/src/types/notifications/README.md +77 -77
- package/src/types/notifications/index.ts +265 -265
- package/src/types/patient/aesthetic-analysis.types.ts +66 -66
- package/src/types/patient/allergies.ts +58 -58
- package/src/types/patient/index.ts +275 -273
- package/src/types/patient/medical-info.types.ts +152 -152
- package/src/types/patient/patient-requirements.ts +92 -92
- package/src/types/patient/token.types.ts +61 -61
- package/src/types/practitioner/index.ts +206 -206
- package/src/types/procedure/index.ts +181 -181
- package/src/types/profile/index.ts +39 -39
- package/src/types/reviews/index.ts +130 -132
- package/src/types/tz-lookup.d.ts +4 -4
- package/src/types/user/index.ts +38 -38
- package/src/utils/TIMESTAMPS.md +176 -176
- package/src/utils/TimestampUtils.ts +241 -241
- package/src/utils/index.ts +1 -1
- package/src/validations/appointment.schema.ts +574 -574
- package/src/validations/calendar.schema.ts +225 -225
- package/src/validations/clinic.schema.ts +493 -493
- package/src/validations/common.schema.ts +25 -25
- package/src/validations/documentation-templates/index.ts +1 -1
- package/src/validations/documentation-templates/template.schema.ts +220 -220
- package/src/validations/documentation-templates.schema.ts +10 -10
- package/src/validations/index.ts +20 -20
- package/src/validations/media.schema.ts +10 -10
- package/src/validations/notification.schema.ts +90 -90
- package/src/validations/patient/aesthetic-analysis.schema.ts +55 -55
- package/src/validations/patient/medical-info.schema.ts +125 -125
- package/src/validations/patient/patient-requirements.schema.ts +84 -84
- package/src/validations/patient/token.schema.ts +29 -29
- package/src/validations/patient.schema.ts +217 -216
- package/src/validations/practitioner.schema.ts +222 -222
- package/src/validations/procedure-product.schema.ts +41 -41
- package/src/validations/procedure.schema.ts +124 -124
- package/src/validations/profile-info.schema.ts +41 -41
- package/src/validations/reviews.schema.ts +189 -195
- package/src/validations/schemas.ts +104 -104
- package/src/validations/shared.schema.ts +78 -78
|
@@ -1,258 +1,258 @@
|
|
|
1
|
-
import { Timestamp, FieldValue } from "firebase/firestore";
|
|
2
|
-
import type { ClinicLocation } from "../clinic";
|
|
3
|
-
import type {
|
|
4
|
-
Category,
|
|
5
|
-
ProcedureFamily,
|
|
6
|
-
Product,
|
|
7
|
-
Subcategory,
|
|
8
|
-
Technology,
|
|
9
|
-
} from "../../backoffice";
|
|
10
|
-
import type { SyncedCalendarProvider } from "./synced-calendar.types";
|
|
11
|
-
import type { Gender } from "../patient";
|
|
12
|
-
import type { PractitionerCertification } from "../practitioner";
|
|
13
|
-
import type { Currency } from "../../backoffice/types/static/pricing.types";
|
|
14
|
-
import type {
|
|
15
|
-
ClinicInfo,
|
|
16
|
-
PractitionerProfileInfo,
|
|
17
|
-
PatientProfileInfo,
|
|
18
|
-
} from "../profile";
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Enum for calendar event status
|
|
22
|
-
*/
|
|
23
|
-
export enum CalendarEventStatus {
|
|
24
|
-
PENDING = "pending", // When event is created, but not confirmed
|
|
25
|
-
CONFIRMED = "confirmed", // When event is confirmed and ready to be used
|
|
26
|
-
REJECTED = "rejected", // When event is rejected by the clinic administrator or patient
|
|
27
|
-
CANCELED = "canceled", // When event is canceled by the patient
|
|
28
|
-
RESCHEDULED = "rescheduled", // When event is rescheduled by the clinic administrator
|
|
29
|
-
COMPLETED = "completed", // When event is completed
|
|
30
|
-
NO_SHOW = "no_show", // When event is no-show by the patient
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
/**
|
|
34
|
-
* Enum for calendar event sync status
|
|
35
|
-
*/
|
|
36
|
-
export enum CalendarSyncStatus {
|
|
37
|
-
INTERNAL = "internal",
|
|
38
|
-
EXTERNAL = "external",
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Enum for calendar event types
|
|
43
|
-
*/
|
|
44
|
-
export enum CalendarEventType {
|
|
45
|
-
APPOINTMENT = "appointment",
|
|
46
|
-
BLOCKING = "blocking",
|
|
47
|
-
BREAK = "break",
|
|
48
|
-
FREE_DAY = "free_day",
|
|
49
|
-
OTHER = "other",
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Interface for calendar event time
|
|
54
|
-
*/
|
|
55
|
-
export interface CalendarEventTime {
|
|
56
|
-
start: Timestamp;
|
|
57
|
-
end: Timestamp;
|
|
58
|
-
}
|
|
59
|
-
|
|
60
|
-
export interface ProcedureInfo {
|
|
61
|
-
// TO-DO: Create detailed procedure info when procedures are integrated
|
|
62
|
-
name: string;
|
|
63
|
-
description: string;
|
|
64
|
-
duration: number;
|
|
65
|
-
price: number;
|
|
66
|
-
currency: Currency;
|
|
67
|
-
}
|
|
68
|
-
|
|
69
|
-
export interface ProcedureCategorization {
|
|
70
|
-
procedureFamily: ProcedureFamily;
|
|
71
|
-
procedureCategory: Category;
|
|
72
|
-
procedureSubcategory: Subcategory;
|
|
73
|
-
procedureTechnology: Technology;
|
|
74
|
-
procedureProduct: Product;
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
export interface SyncedCalendarEvent {
|
|
78
|
-
eventId: string;
|
|
79
|
-
syncedCalendarProvider: SyncedCalendarProvider;
|
|
80
|
-
syncedAt: Timestamp; // Timestamp when the event was last synced with the external calendar
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
/**
|
|
84
|
-
* Interface for calendar event
|
|
85
|
-
*/
|
|
86
|
-
export interface CalendarEvent {
|
|
87
|
-
id: string;
|
|
88
|
-
clinicBranchId?: string | null;
|
|
89
|
-
clinicBranchInfo?: ClinicInfo | null;
|
|
90
|
-
practitionerProfileId?: string | null;
|
|
91
|
-
practitionerProfileInfo?: PractitionerProfileInfo | null;
|
|
92
|
-
patientProfileId?: string | null;
|
|
93
|
-
patientProfileInfo?: PatientProfileInfo | null;
|
|
94
|
-
procedureId?: string | null;
|
|
95
|
-
procedureInfo?: ProcedureInfo | null;
|
|
96
|
-
procedureCategorization?: ProcedureCategorization | null;
|
|
97
|
-
appointmentId?: string | null; // Created when calendar event is confirmed and it's type is APPOINTMENT
|
|
98
|
-
syncedCalendarEventId?: SyncedCalendarEvent[] | null;
|
|
99
|
-
eventName: string;
|
|
100
|
-
eventLocation?: ClinicLocation;
|
|
101
|
-
eventTime: CalendarEventTime;
|
|
102
|
-
description?: string;
|
|
103
|
-
status: CalendarEventStatus;
|
|
104
|
-
syncStatus: CalendarSyncStatus;
|
|
105
|
-
eventType: CalendarEventType;
|
|
106
|
-
createdAt: Timestamp;
|
|
107
|
-
updatedAt: Timestamp;
|
|
108
|
-
}
|
|
109
|
-
|
|
110
|
-
/**
|
|
111
|
-
* Interface for creating a calendar event
|
|
112
|
-
*/
|
|
113
|
-
export interface CreateCalendarEventData {
|
|
114
|
-
id: string;
|
|
115
|
-
clinicBranchId?: string | null;
|
|
116
|
-
clinicBranchInfo?: ClinicInfo | null;
|
|
117
|
-
practitionerProfileId?: string | null;
|
|
118
|
-
practitionerProfileInfo?: PractitionerProfileInfo | null;
|
|
119
|
-
patientProfileId?: string | null;
|
|
120
|
-
patientProfileInfo?: PatientProfileInfo | null;
|
|
121
|
-
procedureId?: string | null;
|
|
122
|
-
appointmentId?: string | null; // Not needed if event type is not APPOINTMENT, or if there is no automatic appointment confirmation
|
|
123
|
-
syncedCalendarEventId?: SyncedCalendarEvent[] | null;
|
|
124
|
-
eventName: string;
|
|
125
|
-
eventLocation?: ClinicLocation;
|
|
126
|
-
eventTime: CalendarEventTime;
|
|
127
|
-
description?: string;
|
|
128
|
-
status: CalendarEventStatus;
|
|
129
|
-
syncStatus: CalendarSyncStatus;
|
|
130
|
-
eventType: CalendarEventType;
|
|
131
|
-
createdAt: FieldValue;
|
|
132
|
-
updatedAt: FieldValue;
|
|
133
|
-
}
|
|
134
|
-
|
|
135
|
-
/**
|
|
136
|
-
* Interface for updating a calendar event
|
|
137
|
-
*/
|
|
138
|
-
export interface UpdateCalendarEventData {
|
|
139
|
-
syncedCalendarEventId?: SyncedCalendarEvent[] | null;
|
|
140
|
-
appointmentId?: string | null; // Updated when calendar event is confirmed and it's type is APPOINTMENT, plus Appointment is created
|
|
141
|
-
eventName?: string;
|
|
142
|
-
eventTime?: CalendarEventTime;
|
|
143
|
-
description?: string;
|
|
144
|
-
status?: CalendarEventStatus;
|
|
145
|
-
syncStatus?: CalendarSyncStatus;
|
|
146
|
-
eventType?: CalendarEventType;
|
|
147
|
-
updatedAt: FieldValue;
|
|
148
|
-
}
|
|
149
|
-
|
|
150
|
-
/**
|
|
151
|
-
* Interface for available time slot
|
|
152
|
-
*/
|
|
153
|
-
export interface TimeSlot {
|
|
154
|
-
start: Date;
|
|
155
|
-
end: Date;
|
|
156
|
-
isAvailable: boolean;
|
|
157
|
-
}
|
|
158
|
-
|
|
159
|
-
/**
|
|
160
|
-
* Interface for appointment creation parameters
|
|
161
|
-
*/
|
|
162
|
-
export interface CreateAppointmentParams {
|
|
163
|
-
clinicId: string;
|
|
164
|
-
doctorId: string;
|
|
165
|
-
patientId: string;
|
|
166
|
-
procedureId: string;
|
|
167
|
-
eventLocation: ClinicLocation;
|
|
168
|
-
eventTime: CalendarEventTime;
|
|
169
|
-
description?: string;
|
|
170
|
-
}
|
|
171
|
-
|
|
172
|
-
/**
|
|
173
|
-
* Interface for appointment update parameters
|
|
174
|
-
*/
|
|
175
|
-
export interface UpdateAppointmentParams {
|
|
176
|
-
appointmentId: string;
|
|
177
|
-
clinicId: string;
|
|
178
|
-
doctorId: string;
|
|
179
|
-
patientId: string;
|
|
180
|
-
eventTime?: CalendarEventTime;
|
|
181
|
-
description?: string;
|
|
182
|
-
status?: CalendarEventStatus;
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
/**
|
|
186
|
-
* Collection names for calendar
|
|
187
|
-
*/
|
|
188
|
-
export const CALENDAR_COLLECTION = "calendar";
|
|
189
|
-
|
|
190
|
-
/**
|
|
191
|
-
* Enum for specifying the primary search location for calendar events
|
|
192
|
-
*/
|
|
193
|
-
export enum SearchLocationEnum {
|
|
194
|
-
PRACTITIONER = "practitioner",
|
|
195
|
-
PATIENT = "patient",
|
|
196
|
-
CLINIC = "clinic", // Represents searching events associated with a clinic
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
/**
|
|
200
|
-
* Interface for defining a date range
|
|
201
|
-
*/
|
|
202
|
-
export interface DateRange {
|
|
203
|
-
start: Timestamp;
|
|
204
|
-
end: Timestamp;
|
|
205
|
-
}
|
|
206
|
-
|
|
207
|
-
/**
|
|
208
|
-
* Interface for general calendar event search parameters
|
|
209
|
-
*/
|
|
210
|
-
export interface SearchCalendarEventsParams {
|
|
211
|
-
/** The primary location to search within (practitioner, patient, or clinic calendar). */
|
|
212
|
-
searchLocation: SearchLocationEnum;
|
|
213
|
-
/** The ID of the entity (practitioner, patient, or clinic) whose calendar/events are being searched. */
|
|
214
|
-
entityId: string;
|
|
215
|
-
/** Optional filter for clinic ID. If searchLocation is CLINIC, this is implicitly applied using entityId. */
|
|
216
|
-
clinicId?: string;
|
|
217
|
-
/** Optional filter for practitioner ID. */
|
|
218
|
-
practitionerId?: string;
|
|
219
|
-
/** Optional filter for patient ID. */
|
|
220
|
-
patientId?: string;
|
|
221
|
-
/** Optional filter for procedure ID. */
|
|
222
|
-
procedureId?: string;
|
|
223
|
-
/** Optional filter for a specific date range (based on event start time). */
|
|
224
|
-
dateRange?: DateRange;
|
|
225
|
-
/** Optional filter for event status. */
|
|
226
|
-
eventStatus?: CalendarEventStatus;
|
|
227
|
-
/** Optional filter for event type. */
|
|
228
|
-
eventType?: CalendarEventType;
|
|
229
|
-
}
|
|
230
|
-
|
|
231
|
-
/**
|
|
232
|
-
* Interface for creating blocking events
|
|
233
|
-
*/
|
|
234
|
-
export interface CreateBlockingEventParams {
|
|
235
|
-
entityType: "practitioner" | "clinic";
|
|
236
|
-
entityId: string; // Profile ID of clinic or practitioner, not userRef
|
|
237
|
-
eventName: string;
|
|
238
|
-
eventTime: CalendarEventTime;
|
|
239
|
-
eventType:
|
|
240
|
-
| CalendarEventType.BLOCKING // Let's only use this enum for doctor's app, then handle more information through description (eg "Holiday", "Break", "Free Day", "Other")
|
|
241
|
-
| CalendarEventType.BREAK
|
|
242
|
-
| CalendarEventType.FREE_DAY
|
|
243
|
-
| CalendarEventType.OTHER;
|
|
244
|
-
description?: string;
|
|
245
|
-
}
|
|
246
|
-
|
|
247
|
-
/**
|
|
248
|
-
* Interface for updating blocking events
|
|
249
|
-
*/
|
|
250
|
-
export interface UpdateBlockingEventParams {
|
|
251
|
-
entityType: "practitioner" | "clinic";
|
|
252
|
-
entityId: string;
|
|
253
|
-
eventId: string;
|
|
254
|
-
eventName?: string;
|
|
255
|
-
eventTime?: CalendarEventTime;
|
|
256
|
-
description?: string;
|
|
257
|
-
status?: CalendarEventStatus;
|
|
258
|
-
}
|
|
1
|
+
import { Timestamp, FieldValue } from "firebase/firestore";
|
|
2
|
+
import type { ClinicLocation } from "../clinic";
|
|
3
|
+
import type {
|
|
4
|
+
Category,
|
|
5
|
+
ProcedureFamily,
|
|
6
|
+
Product,
|
|
7
|
+
Subcategory,
|
|
8
|
+
Technology,
|
|
9
|
+
} from "../../backoffice";
|
|
10
|
+
import type { SyncedCalendarProvider } from "./synced-calendar.types";
|
|
11
|
+
import type { Gender } from "../patient";
|
|
12
|
+
import type { PractitionerCertification } from "../practitioner";
|
|
13
|
+
import type { Currency } from "../../backoffice/types/static/pricing.types";
|
|
14
|
+
import type {
|
|
15
|
+
ClinicInfo,
|
|
16
|
+
PractitionerProfileInfo,
|
|
17
|
+
PatientProfileInfo,
|
|
18
|
+
} from "../profile";
|
|
19
|
+
|
|
20
|
+
/**
|
|
21
|
+
* Enum for calendar event status
|
|
22
|
+
*/
|
|
23
|
+
export enum CalendarEventStatus {
|
|
24
|
+
PENDING = "pending", // When event is created, but not confirmed
|
|
25
|
+
CONFIRMED = "confirmed", // When event is confirmed and ready to be used
|
|
26
|
+
REJECTED = "rejected", // When event is rejected by the clinic administrator or patient
|
|
27
|
+
CANCELED = "canceled", // When event is canceled by the patient
|
|
28
|
+
RESCHEDULED = "rescheduled", // When event is rescheduled by the clinic administrator
|
|
29
|
+
COMPLETED = "completed", // When event is completed
|
|
30
|
+
NO_SHOW = "no_show", // When event is no-show by the patient
|
|
31
|
+
}
|
|
32
|
+
|
|
33
|
+
/**
|
|
34
|
+
* Enum for calendar event sync status
|
|
35
|
+
*/
|
|
36
|
+
export enum CalendarSyncStatus {
|
|
37
|
+
INTERNAL = "internal",
|
|
38
|
+
EXTERNAL = "external",
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
/**
|
|
42
|
+
* Enum for calendar event types
|
|
43
|
+
*/
|
|
44
|
+
export enum CalendarEventType {
|
|
45
|
+
APPOINTMENT = "appointment",
|
|
46
|
+
BLOCKING = "blocking",
|
|
47
|
+
BREAK = "break",
|
|
48
|
+
FREE_DAY = "free_day",
|
|
49
|
+
OTHER = "other",
|
|
50
|
+
}
|
|
51
|
+
|
|
52
|
+
/**
|
|
53
|
+
* Interface for calendar event time
|
|
54
|
+
*/
|
|
55
|
+
export interface CalendarEventTime {
|
|
56
|
+
start: Timestamp;
|
|
57
|
+
end: Timestamp;
|
|
58
|
+
}
|
|
59
|
+
|
|
60
|
+
export interface ProcedureInfo {
|
|
61
|
+
// TO-DO: Create detailed procedure info when procedures are integrated
|
|
62
|
+
name: string;
|
|
63
|
+
description: string;
|
|
64
|
+
duration: number;
|
|
65
|
+
price: number;
|
|
66
|
+
currency: Currency;
|
|
67
|
+
}
|
|
68
|
+
|
|
69
|
+
export interface ProcedureCategorization {
|
|
70
|
+
procedureFamily: ProcedureFamily;
|
|
71
|
+
procedureCategory: Category;
|
|
72
|
+
procedureSubcategory: Subcategory;
|
|
73
|
+
procedureTechnology: Technology;
|
|
74
|
+
procedureProduct: Product;
|
|
75
|
+
}
|
|
76
|
+
|
|
77
|
+
export interface SyncedCalendarEvent {
|
|
78
|
+
eventId: string;
|
|
79
|
+
syncedCalendarProvider: SyncedCalendarProvider;
|
|
80
|
+
syncedAt: Timestamp; // Timestamp when the event was last synced with the external calendar
|
|
81
|
+
}
|
|
82
|
+
|
|
83
|
+
/**
|
|
84
|
+
* Interface for calendar event
|
|
85
|
+
*/
|
|
86
|
+
export interface CalendarEvent {
|
|
87
|
+
id: string;
|
|
88
|
+
clinicBranchId?: string | null;
|
|
89
|
+
clinicBranchInfo?: ClinicInfo | null;
|
|
90
|
+
practitionerProfileId?: string | null;
|
|
91
|
+
practitionerProfileInfo?: PractitionerProfileInfo | null;
|
|
92
|
+
patientProfileId?: string | null;
|
|
93
|
+
patientProfileInfo?: PatientProfileInfo | null;
|
|
94
|
+
procedureId?: string | null;
|
|
95
|
+
procedureInfo?: ProcedureInfo | null;
|
|
96
|
+
procedureCategorization?: ProcedureCategorization | null;
|
|
97
|
+
appointmentId?: string | null; // Created when calendar event is confirmed and it's type is APPOINTMENT
|
|
98
|
+
syncedCalendarEventId?: SyncedCalendarEvent[] | null;
|
|
99
|
+
eventName: string;
|
|
100
|
+
eventLocation?: ClinicLocation;
|
|
101
|
+
eventTime: CalendarEventTime;
|
|
102
|
+
description?: string;
|
|
103
|
+
status: CalendarEventStatus;
|
|
104
|
+
syncStatus: CalendarSyncStatus;
|
|
105
|
+
eventType: CalendarEventType;
|
|
106
|
+
createdAt: Timestamp;
|
|
107
|
+
updatedAt: Timestamp;
|
|
108
|
+
}
|
|
109
|
+
|
|
110
|
+
/**
|
|
111
|
+
* Interface for creating a calendar event
|
|
112
|
+
*/
|
|
113
|
+
export interface CreateCalendarEventData {
|
|
114
|
+
id: string;
|
|
115
|
+
clinicBranchId?: string | null;
|
|
116
|
+
clinicBranchInfo?: ClinicInfo | null;
|
|
117
|
+
practitionerProfileId?: string | null;
|
|
118
|
+
practitionerProfileInfo?: PractitionerProfileInfo | null;
|
|
119
|
+
patientProfileId?: string | null;
|
|
120
|
+
patientProfileInfo?: PatientProfileInfo | null;
|
|
121
|
+
procedureId?: string | null;
|
|
122
|
+
appointmentId?: string | null; // Not needed if event type is not APPOINTMENT, or if there is no automatic appointment confirmation
|
|
123
|
+
syncedCalendarEventId?: SyncedCalendarEvent[] | null;
|
|
124
|
+
eventName: string;
|
|
125
|
+
eventLocation?: ClinicLocation;
|
|
126
|
+
eventTime: CalendarEventTime;
|
|
127
|
+
description?: string;
|
|
128
|
+
status: CalendarEventStatus;
|
|
129
|
+
syncStatus: CalendarSyncStatus;
|
|
130
|
+
eventType: CalendarEventType;
|
|
131
|
+
createdAt: FieldValue;
|
|
132
|
+
updatedAt: FieldValue;
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
/**
|
|
136
|
+
* Interface for updating a calendar event
|
|
137
|
+
*/
|
|
138
|
+
export interface UpdateCalendarEventData {
|
|
139
|
+
syncedCalendarEventId?: SyncedCalendarEvent[] | null;
|
|
140
|
+
appointmentId?: string | null; // Updated when calendar event is confirmed and it's type is APPOINTMENT, plus Appointment is created
|
|
141
|
+
eventName?: string;
|
|
142
|
+
eventTime?: CalendarEventTime;
|
|
143
|
+
description?: string;
|
|
144
|
+
status?: CalendarEventStatus;
|
|
145
|
+
syncStatus?: CalendarSyncStatus;
|
|
146
|
+
eventType?: CalendarEventType;
|
|
147
|
+
updatedAt: FieldValue;
|
|
148
|
+
}
|
|
149
|
+
|
|
150
|
+
/**
|
|
151
|
+
* Interface for available time slot
|
|
152
|
+
*/
|
|
153
|
+
export interface TimeSlot {
|
|
154
|
+
start: Date;
|
|
155
|
+
end: Date;
|
|
156
|
+
isAvailable: boolean;
|
|
157
|
+
}
|
|
158
|
+
|
|
159
|
+
/**
|
|
160
|
+
* Interface for appointment creation parameters
|
|
161
|
+
*/
|
|
162
|
+
export interface CreateAppointmentParams {
|
|
163
|
+
clinicId: string;
|
|
164
|
+
doctorId: string;
|
|
165
|
+
patientId: string;
|
|
166
|
+
procedureId: string;
|
|
167
|
+
eventLocation: ClinicLocation;
|
|
168
|
+
eventTime: CalendarEventTime;
|
|
169
|
+
description?: string;
|
|
170
|
+
}
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Interface for appointment update parameters
|
|
174
|
+
*/
|
|
175
|
+
export interface UpdateAppointmentParams {
|
|
176
|
+
appointmentId: string;
|
|
177
|
+
clinicId: string;
|
|
178
|
+
doctorId: string;
|
|
179
|
+
patientId: string;
|
|
180
|
+
eventTime?: CalendarEventTime;
|
|
181
|
+
description?: string;
|
|
182
|
+
status?: CalendarEventStatus;
|
|
183
|
+
}
|
|
184
|
+
|
|
185
|
+
/**
|
|
186
|
+
* Collection names for calendar
|
|
187
|
+
*/
|
|
188
|
+
export const CALENDAR_COLLECTION = "calendar";
|
|
189
|
+
|
|
190
|
+
/**
|
|
191
|
+
* Enum for specifying the primary search location for calendar events
|
|
192
|
+
*/
|
|
193
|
+
export enum SearchLocationEnum {
|
|
194
|
+
PRACTITIONER = "practitioner",
|
|
195
|
+
PATIENT = "patient",
|
|
196
|
+
CLINIC = "clinic", // Represents searching events associated with a clinic
|
|
197
|
+
}
|
|
198
|
+
|
|
199
|
+
/**
|
|
200
|
+
* Interface for defining a date range
|
|
201
|
+
*/
|
|
202
|
+
export interface DateRange {
|
|
203
|
+
start: Timestamp;
|
|
204
|
+
end: Timestamp;
|
|
205
|
+
}
|
|
206
|
+
|
|
207
|
+
/**
|
|
208
|
+
* Interface for general calendar event search parameters
|
|
209
|
+
*/
|
|
210
|
+
export interface SearchCalendarEventsParams {
|
|
211
|
+
/** The primary location to search within (practitioner, patient, or clinic calendar). */
|
|
212
|
+
searchLocation: SearchLocationEnum;
|
|
213
|
+
/** The ID of the entity (practitioner, patient, or clinic) whose calendar/events are being searched. */
|
|
214
|
+
entityId: string;
|
|
215
|
+
/** Optional filter for clinic ID. If searchLocation is CLINIC, this is implicitly applied using entityId. */
|
|
216
|
+
clinicId?: string;
|
|
217
|
+
/** Optional filter for practitioner ID. */
|
|
218
|
+
practitionerId?: string;
|
|
219
|
+
/** Optional filter for patient ID. */
|
|
220
|
+
patientId?: string;
|
|
221
|
+
/** Optional filter for procedure ID. */
|
|
222
|
+
procedureId?: string;
|
|
223
|
+
/** Optional filter for a specific date range (based on event start time). */
|
|
224
|
+
dateRange?: DateRange;
|
|
225
|
+
/** Optional filter for event status. */
|
|
226
|
+
eventStatus?: CalendarEventStatus;
|
|
227
|
+
/** Optional filter for event type. */
|
|
228
|
+
eventType?: CalendarEventType;
|
|
229
|
+
}
|
|
230
|
+
|
|
231
|
+
/**
|
|
232
|
+
* Interface for creating blocking events
|
|
233
|
+
*/
|
|
234
|
+
export interface CreateBlockingEventParams {
|
|
235
|
+
entityType: "practitioner" | "clinic";
|
|
236
|
+
entityId: string; // Profile ID of clinic or practitioner, not userRef
|
|
237
|
+
eventName: string;
|
|
238
|
+
eventTime: CalendarEventTime;
|
|
239
|
+
eventType:
|
|
240
|
+
| CalendarEventType.BLOCKING // Let's only use this enum for doctor's app, then handle more information through description (eg "Holiday", "Break", "Free Day", "Other")
|
|
241
|
+
| CalendarEventType.BREAK
|
|
242
|
+
| CalendarEventType.FREE_DAY
|
|
243
|
+
| CalendarEventType.OTHER;
|
|
244
|
+
description?: string;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
/**
|
|
248
|
+
* Interface for updating blocking events
|
|
249
|
+
*/
|
|
250
|
+
export interface UpdateBlockingEventParams {
|
|
251
|
+
entityType: "practitioner" | "clinic";
|
|
252
|
+
entityId: string;
|
|
253
|
+
eventId: string;
|
|
254
|
+
eventName?: string;
|
|
255
|
+
eventTime?: CalendarEventTime;
|
|
256
|
+
description?: string;
|
|
257
|
+
status?: CalendarEventStatus;
|
|
258
|
+
}
|
|
@@ -1,66 +1,66 @@
|
|
|
1
|
-
import { Timestamp, FieldValue } from "firebase/firestore";
|
|
2
|
-
|
|
3
|
-
/**
|
|
4
|
-
* Enum for synced calendar provider
|
|
5
|
-
*/
|
|
6
|
-
export enum SyncedCalendarProvider {
|
|
7
|
-
GOOGLE = "google",
|
|
8
|
-
OUTLOOK = "outlook",
|
|
9
|
-
APPLE = "apple",
|
|
10
|
-
}
|
|
11
|
-
|
|
12
|
-
/**
|
|
13
|
-
* Interface for synced calendar
|
|
14
|
-
*/
|
|
15
|
-
export interface SyncedCalendar {
|
|
16
|
-
id: string;
|
|
17
|
-
provider: SyncedCalendarProvider;
|
|
18
|
-
name: string;
|
|
19
|
-
description?: string;
|
|
20
|
-
accessToken: string;
|
|
21
|
-
refreshToken: string;
|
|
22
|
-
tokenExpiry: Timestamp;
|
|
23
|
-
calendarId: string;
|
|
24
|
-
isActive: boolean;
|
|
25
|
-
lastSyncedAt?: Timestamp;
|
|
26
|
-
createdAt: Timestamp;
|
|
27
|
-
updatedAt: Timestamp;
|
|
28
|
-
}
|
|
29
|
-
|
|
30
|
-
/**
|
|
31
|
-
* Interface for creating a synced calendar
|
|
32
|
-
*/
|
|
33
|
-
export interface CreateSyncedCalendarData {
|
|
34
|
-
id: string;
|
|
35
|
-
provider: SyncedCalendarProvider;
|
|
36
|
-
name: string;
|
|
37
|
-
description?: string;
|
|
38
|
-
accessToken: string;
|
|
39
|
-
refreshToken: string;
|
|
40
|
-
tokenExpiry: Timestamp;
|
|
41
|
-
calendarId: string;
|
|
42
|
-
isActive: boolean;
|
|
43
|
-
lastSyncedAt?: Timestamp;
|
|
44
|
-
createdAt: FieldValue;
|
|
45
|
-
updatedAt: FieldValue;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
/**
|
|
49
|
-
* Interface for updating a synced calendar
|
|
50
|
-
*/
|
|
51
|
-
export interface UpdateSyncedCalendarData {
|
|
52
|
-
name?: string;
|
|
53
|
-
description?: string;
|
|
54
|
-
accessToken?: string;
|
|
55
|
-
refreshToken?: string;
|
|
56
|
-
tokenExpiry?: Timestamp;
|
|
57
|
-
calendarId?: string;
|
|
58
|
-
isActive?: boolean;
|
|
59
|
-
lastSyncedAt?: Timestamp;
|
|
60
|
-
updatedAt: FieldValue;
|
|
61
|
-
}
|
|
62
|
-
|
|
63
|
-
/**
|
|
64
|
-
* Collection name for synced calendars
|
|
65
|
-
*/
|
|
66
|
-
export const SYNCED_CALENDARS_COLLECTION = "syncedCalendars";
|
|
1
|
+
import { Timestamp, FieldValue } from "firebase/firestore";
|
|
2
|
+
|
|
3
|
+
/**
|
|
4
|
+
* Enum for synced calendar provider
|
|
5
|
+
*/
|
|
6
|
+
export enum SyncedCalendarProvider {
|
|
7
|
+
GOOGLE = "google",
|
|
8
|
+
OUTLOOK = "outlook",
|
|
9
|
+
APPLE = "apple",
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
/**
|
|
13
|
+
* Interface for synced calendar
|
|
14
|
+
*/
|
|
15
|
+
export interface SyncedCalendar {
|
|
16
|
+
id: string;
|
|
17
|
+
provider: SyncedCalendarProvider;
|
|
18
|
+
name: string;
|
|
19
|
+
description?: string;
|
|
20
|
+
accessToken: string;
|
|
21
|
+
refreshToken: string;
|
|
22
|
+
tokenExpiry: Timestamp;
|
|
23
|
+
calendarId: string;
|
|
24
|
+
isActive: boolean;
|
|
25
|
+
lastSyncedAt?: Timestamp;
|
|
26
|
+
createdAt: Timestamp;
|
|
27
|
+
updatedAt: Timestamp;
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
/**
|
|
31
|
+
* Interface for creating a synced calendar
|
|
32
|
+
*/
|
|
33
|
+
export interface CreateSyncedCalendarData {
|
|
34
|
+
id: string;
|
|
35
|
+
provider: SyncedCalendarProvider;
|
|
36
|
+
name: string;
|
|
37
|
+
description?: string;
|
|
38
|
+
accessToken: string;
|
|
39
|
+
refreshToken: string;
|
|
40
|
+
tokenExpiry: Timestamp;
|
|
41
|
+
calendarId: string;
|
|
42
|
+
isActive: boolean;
|
|
43
|
+
lastSyncedAt?: Timestamp;
|
|
44
|
+
createdAt: FieldValue;
|
|
45
|
+
updatedAt: FieldValue;
|
|
46
|
+
}
|
|
47
|
+
|
|
48
|
+
/**
|
|
49
|
+
* Interface for updating a synced calendar
|
|
50
|
+
*/
|
|
51
|
+
export interface UpdateSyncedCalendarData {
|
|
52
|
+
name?: string;
|
|
53
|
+
description?: string;
|
|
54
|
+
accessToken?: string;
|
|
55
|
+
refreshToken?: string;
|
|
56
|
+
tokenExpiry?: Timestamp;
|
|
57
|
+
calendarId?: string;
|
|
58
|
+
isActive?: boolean;
|
|
59
|
+
lastSyncedAt?: Timestamp;
|
|
60
|
+
updatedAt: FieldValue;
|
|
61
|
+
}
|
|
62
|
+
|
|
63
|
+
/**
|
|
64
|
+
* Collection name for synced calendars
|
|
65
|
+
*/
|
|
66
|
+
export const SYNCED_CALENDARS_COLLECTION = "syncedCalendars";
|