otf-api 0.2.1__py3-none-any.whl → 0.3.0__py3-none-any.whl
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.
- otf_api/__init__.py +12 -67
- otf_api/api.py +794 -36
- otf_api/cli/__init__.py +4 -0
- otf_api/cli/_utilities.py +60 -0
- otf_api/cli/app.py +177 -0
- otf_api/cli/bookings.py +231 -0
- otf_api/cli/prompts.py +162 -0
- otf_api/models/__init__.py +4 -8
- otf_api/models/auth.py +18 -12
- otf_api/models/base.py +205 -2
- otf_api/models/responses/__init__.py +6 -14
- otf_api/models/responses/body_composition_list.py +304 -0
- otf_api/models/responses/book_class.py +405 -0
- otf_api/models/responses/bookings.py +211 -37
- otf_api/models/responses/cancel_booking.py +93 -0
- otf_api/models/responses/challenge_tracker_content.py +6 -6
- otf_api/models/responses/challenge_tracker_detail.py +6 -6
- otf_api/models/responses/classes.py +205 -7
- otf_api/models/responses/enums.py +0 -35
- otf_api/models/responses/favorite_studios.py +5 -5
- otf_api/models/responses/latest_agreement.py +2 -2
- otf_api/models/responses/lifetime_stats.py +92 -0
- otf_api/models/responses/member_detail.py +17 -12
- otf_api/models/responses/member_membership.py +2 -2
- otf_api/models/responses/member_purchases.py +9 -9
- otf_api/models/responses/out_of_studio_workout_history.py +4 -4
- otf_api/models/responses/performance_summary_detail.py +1 -1
- otf_api/models/responses/performance_summary_list.py +13 -13
- otf_api/models/responses/studio_detail.py +10 -10
- otf_api/models/responses/studio_services.py +8 -8
- otf_api/models/responses/telemetry.py +6 -6
- otf_api/models/responses/telemetry_hr_history.py +6 -6
- otf_api/models/responses/telemetry_max_hr.py +3 -3
- otf_api/models/responses/total_classes.py +2 -2
- otf_api/models/responses/workouts.py +4 -4
- otf_api-0.3.0.dist-info/METADATA +55 -0
- otf_api-0.3.0.dist-info/RECORD +42 -0
- otf_api-0.3.0.dist-info/entry_points.txt +3 -0
- otf_api/__version__.py +0 -1
- otf_api/classes_api.py +0 -44
- otf_api/member_api.py +0 -380
- otf_api/performance_api.py +0 -54
- otf_api/studios_api.py +0 -96
- otf_api/telemetry_api.py +0 -95
- otf_api-0.2.1.dist-info/METADATA +0 -284
- otf_api-0.2.1.dist-info/RECORD +0 -38
- {otf_api-0.2.1.dist-info → otf_api-0.3.0.dist-info}/AUTHORS.md +0 -0
- {otf_api-0.2.1.dist-info → otf_api-0.3.0.dist-info}/LICENSE +0 -0
- {otf_api-0.2.1.dist-info → otf_api-0.3.0.dist-info}/WHEEL +0 -0
@@ -0,0 +1,405 @@
|
|
1
|
+
from datetime import datetime
|
2
|
+
from typing import Any
|
3
|
+
|
4
|
+
from pydantic import BaseModel, Field
|
5
|
+
|
6
|
+
|
7
|
+
class MemberProfile(BaseModel):
|
8
|
+
is_latest_agreement_signed: bool = Field(..., alias="isLatestAgreementSigned")
|
9
|
+
|
10
|
+
|
11
|
+
class StudioProfiles(BaseModel):
|
12
|
+
studio_id: int = Field(..., alias="studioId")
|
13
|
+
is_franchise_agreement_enabled: int = Field(..., alias="isFranchiseAgreementEnabled")
|
14
|
+
|
15
|
+
|
16
|
+
class HomeStudio(BaseModel):
|
17
|
+
studio_uuid: str = Field(..., alias="studioUUId")
|
18
|
+
studio_name: str = Field(..., alias="studioName")
|
19
|
+
description: str
|
20
|
+
contact_email: str = Field(..., alias="contactEmail")
|
21
|
+
status: str
|
22
|
+
logo_url: str = Field(..., alias="logoUrl")
|
23
|
+
time_zone: str = Field(..., alias="timeZone")
|
24
|
+
mbo_studio_id: int = Field(..., alias="mboStudioId")
|
25
|
+
studio_id: int = Field(..., alias="studioId")
|
26
|
+
allows_cr_waitlist: bool = Field(..., alias="allowsCRWaitlist")
|
27
|
+
cr_waitlist_flag_last_updated: datetime = Field(..., alias="crWaitlistFlagLastUpdated")
|
28
|
+
studio_profiles: StudioProfiles = Field(..., alias="studioProfiles")
|
29
|
+
|
30
|
+
|
31
|
+
class MemberService(BaseModel):
|
32
|
+
member_service_id: int = Field(..., alias="memberServiceId")
|
33
|
+
member_service_uuid: str = Field(..., alias="memberServiceUUId")
|
34
|
+
service_name: str = Field(..., alias="serviceName")
|
35
|
+
studio_id: int = Field(..., alias="studioId")
|
36
|
+
mbo_client_service_id: int = Field(..., alias="mboClientServiceId")
|
37
|
+
current: bool
|
38
|
+
member_id: int = Field(..., alias="memberId")
|
39
|
+
service_id: int = Field(..., alias="serviceId")
|
40
|
+
remaining: int
|
41
|
+
count: int
|
42
|
+
payment_date: datetime = Field(..., alias="paymentDate")
|
43
|
+
expiration_date: datetime = Field(..., alias="expirationDate")
|
44
|
+
active_date: datetime = Field(..., alias="activeDate")
|
45
|
+
created_by: str | None = Field(None, alias="createdBy")
|
46
|
+
created_date: datetime | None = Field(None, alias="createdDate")
|
47
|
+
updated_by: str | None = Field(None, alias="updatedBy")
|
48
|
+
updated_date: datetime | None = Field(None, alias="updatedDate")
|
49
|
+
is_deleted: bool = Field(..., alias="isDeleted")
|
50
|
+
|
51
|
+
|
52
|
+
class ServiceItem(BaseModel):
|
53
|
+
service_id: int = Field(..., alias="serviceId")
|
54
|
+
name: str
|
55
|
+
member_service: MemberService = Field(..., alias="MemberService")
|
56
|
+
|
57
|
+
|
58
|
+
class Member(BaseModel):
|
59
|
+
member_id: int = Field(..., alias="memberId")
|
60
|
+
member_uuid: str = Field(..., alias="memberUUId")
|
61
|
+
cognito_id: str = Field(..., alias="cognitoId")
|
62
|
+
home_studio_id: int = Field(..., alias="homeStudioId")
|
63
|
+
mbo_studio_id: int = Field(..., alias="mboStudioId")
|
64
|
+
mbo_id: str = Field(..., alias="mboId")
|
65
|
+
mbo_unique_id: int = Field(..., alias="mboUniqueId")
|
66
|
+
mbo_status: str = Field(..., alias="mboStatus")
|
67
|
+
user_name: str = Field(..., alias="userName")
|
68
|
+
first_name: str = Field(..., alias="firstName")
|
69
|
+
last_name: str = Field(..., alias="lastName")
|
70
|
+
email: str
|
71
|
+
profile_picture_url: None = Field(..., alias="profilePictureUrl")
|
72
|
+
alternate_emails: None = Field(..., alias="alternateEmails")
|
73
|
+
address_line1: None = Field(..., alias="addressLine1")
|
74
|
+
address_line2: None = Field(..., alias="addressLine2")
|
75
|
+
city: None
|
76
|
+
state: None
|
77
|
+
postal_code: None = Field(..., alias="postalCode")
|
78
|
+
phone_number: str = Field(..., alias="phoneNumber")
|
79
|
+
home_phone: str = Field(..., alias="homePhone")
|
80
|
+
work_phone: None = Field(..., alias="workPhone")
|
81
|
+
phone_type: None = Field(..., alias="phoneType")
|
82
|
+
birth_day: str = Field(..., alias="birthDay")
|
83
|
+
cc_last4: str = Field(..., alias="ccLast4")
|
84
|
+
cc_type: str = Field(..., alias="ccType")
|
85
|
+
gender: str
|
86
|
+
liability: None
|
87
|
+
locale: str
|
88
|
+
weight: int
|
89
|
+
weight_measure: str = Field(..., alias="weightMeasure")
|
90
|
+
height: int
|
91
|
+
height_measure: str = Field(..., alias="heightMeasure")
|
92
|
+
max_hr: int = Field(..., alias="maxHr")
|
93
|
+
intro_neccessary: bool = Field(..., alias="introNeccessary")
|
94
|
+
online_signup: None = Field(..., alias="onlineSignup")
|
95
|
+
year_imported: int = Field(..., alias="yearImported")
|
96
|
+
is_member_verified: bool = Field(..., alias="isMemberVerified")
|
97
|
+
lead_prospect: bool = Field(..., alias="leadProspect")
|
98
|
+
created_by: str | None = Field(None, alias="createdBy")
|
99
|
+
created_date: datetime | None = Field(None, alias="createdDate")
|
100
|
+
updated_by: str | None = Field(None, alias="updatedBy")
|
101
|
+
updated_date: datetime | None = Field(None, alias="updatedDate")
|
102
|
+
is_deleted: bool = Field(..., alias="isDeleted")
|
103
|
+
member_profile: MemberProfile = Field(..., alias="memberProfile")
|
104
|
+
home_studio: HomeStudio = Field(..., alias="homeStudio")
|
105
|
+
membership: None
|
106
|
+
service: list[ServiceItem]
|
107
|
+
notes: str
|
108
|
+
|
109
|
+
|
110
|
+
class Studio(BaseModel):
|
111
|
+
studio_uuid: str = Field(..., alias="studioUUId")
|
112
|
+
studio_name: str = Field(..., alias="studioName")
|
113
|
+
description: str
|
114
|
+
contact_email: str = Field(..., alias="contactEmail")
|
115
|
+
status: str
|
116
|
+
logo_url: str = Field(..., alias="logoUrl")
|
117
|
+
time_zone: str = Field(..., alias="timeZone")
|
118
|
+
mbo_studio_id: int = Field(..., alias="mboStudioId")
|
119
|
+
studio_id: int = Field(..., alias="studioId")
|
120
|
+
allows_cr_waitlist: bool = Field(..., alias="allowsCRWaitlist")
|
121
|
+
cr_waitlist_flag_last_updated: datetime = Field(..., alias="crWaitlistFlagLastUpdated")
|
122
|
+
|
123
|
+
|
124
|
+
class Location(BaseModel):
|
125
|
+
location_id: int = Field(..., alias="locationId")
|
126
|
+
location_uuid: str = Field(..., alias="locationUUId")
|
127
|
+
|
128
|
+
|
129
|
+
class Coach(BaseModel):
|
130
|
+
coach_uuid: str = Field(..., alias="coachUUId")
|
131
|
+
first_name: str = Field(..., alias="firstName")
|
132
|
+
last_name: str = Field(..., alias="lastName")
|
133
|
+
mbo_coach_id: int = Field(..., alias="mboCoachId")
|
134
|
+
name: str
|
135
|
+
|
136
|
+
|
137
|
+
class Class(BaseModel):
|
138
|
+
class_id: int = Field(..., alias="classId")
|
139
|
+
class_uuid: str = Field(..., alias="classUUId")
|
140
|
+
mbo_studio_id: int = Field(..., alias="mboStudioId")
|
141
|
+
mbo_class_id: int = Field(..., alias="mboClassId")
|
142
|
+
mbo_class_schedule_id: int = Field(..., alias="mboClassScheduleId")
|
143
|
+
mbo_program_id: int = Field(..., alias="mboProgramId")
|
144
|
+
studio_id: int = Field(..., alias="studioId")
|
145
|
+
coach_id: int = Field(..., alias="coachId")
|
146
|
+
location_id: int = Field(..., alias="locationId")
|
147
|
+
name: str
|
148
|
+
description: str
|
149
|
+
program_name: str = Field(..., alias="programName")
|
150
|
+
program_schedule_type: str = Field(..., alias="programScheduleType")
|
151
|
+
program_cancel_offset: int = Field(..., alias="programCancelOffset")
|
152
|
+
max_capacity: int = Field(..., alias="maxCapacity")
|
153
|
+
total_booked: int = Field(..., alias="totalBooked")
|
154
|
+
web_capacity: int = Field(..., alias="webCapacity")
|
155
|
+
web_booked: int = Field(..., alias="webBooked")
|
156
|
+
total_booked_waitlist: int = Field(..., alias="totalBookedWaitlist")
|
157
|
+
start_date_time: datetime = Field(..., alias="startDateTime")
|
158
|
+
end_date_time: datetime = Field(..., alias="endDateTime")
|
159
|
+
is_cancelled: bool = Field(..., alias="isCancelled")
|
160
|
+
substitute: bool
|
161
|
+
is_active: bool = Field(..., alias="isActive")
|
162
|
+
is_waitlist_available: bool = Field(..., alias="isWaitlistAvailable")
|
163
|
+
is_enrolled: bool = Field(..., alias="isEnrolled")
|
164
|
+
is_hide_cancel: bool = Field(..., alias="isHideCancel")
|
165
|
+
is_available: bool = Field(..., alias="isAvailable")
|
166
|
+
room_number: int = Field(..., alias="roomNumber")
|
167
|
+
created_by: str | None = Field(None, alias="createdBy")
|
168
|
+
created_date: datetime | None = Field(None, alias="createdDate")
|
169
|
+
updated_by: str | None = Field(None, alias="updatedBy")
|
170
|
+
updated_date: datetime | None = Field(None, alias="updatedDate")
|
171
|
+
is_deleted: bool = Field(..., alias="isDeleted")
|
172
|
+
studio: Studio
|
173
|
+
location: Location
|
174
|
+
coach: Coach
|
175
|
+
attributes: dict[str, Any]
|
176
|
+
|
177
|
+
|
178
|
+
class Class1(BaseModel):
|
179
|
+
mbo_studio_id: int = Field(..., alias="mboStudioId")
|
180
|
+
studio_uuid: str = Field(..., alias="studioUUId")
|
181
|
+
|
182
|
+
|
183
|
+
class CustomData(BaseModel):
|
184
|
+
otf_class: Class1 = Field(..., alias="class")
|
185
|
+
|
186
|
+
|
187
|
+
class SavedBooking(BaseModel):
|
188
|
+
class_booking_id: int = Field(..., alias="classBookingId")
|
189
|
+
class_booking_uuid: str = Field(..., alias="classBookingUUId")
|
190
|
+
studio_id: int = Field(..., alias="studioId")
|
191
|
+
class_id: int = Field(..., alias="classId")
|
192
|
+
is_intro: bool = Field(..., alias="isIntro")
|
193
|
+
member_id: int = Field(..., alias="memberId")
|
194
|
+
mbo_member_id: str = Field(..., alias="mboMemberId")
|
195
|
+
mbo_class_id: int = Field(..., alias="mboClassId")
|
196
|
+
mbo_visit_id: None = Field(..., alias="mboVisitId")
|
197
|
+
mbo_waitlist_entry_id: None = Field(..., alias="mboWaitlistEntryId")
|
198
|
+
mbo_sync_message: None = Field(..., alias="mboSyncMessage")
|
199
|
+
status: str
|
200
|
+
booked_date: datetime = Field(..., alias="bookedDate")
|
201
|
+
checked_in_date: None = Field(..., alias="checkedInDate")
|
202
|
+
cancelled_date: None = Field(..., alias="cancelledDate")
|
203
|
+
created_by: str | None = Field(None, alias="createdBy")
|
204
|
+
created_date: datetime | None = Field(None, alias="createdDate")
|
205
|
+
updated_by: str | None = Field(None, alias="updatedBy")
|
206
|
+
updated_date: datetime | None = Field(None, alias="updatedDate")
|
207
|
+
is_deleted: bool = Field(..., alias="isDeleted")
|
208
|
+
member: Member
|
209
|
+
otf_class: Class = Field(..., alias="class")
|
210
|
+
custom_data: CustomData = Field(..., alias="customData")
|
211
|
+
attributes: dict[str, Any]
|
212
|
+
|
213
|
+
|
214
|
+
class FieldModel(BaseModel):
|
215
|
+
xsi_nil: str = Field(..., alias="xsiNil")
|
216
|
+
|
217
|
+
|
218
|
+
class FacilitySquareFeet(BaseModel):
|
219
|
+
field_: FieldModel
|
220
|
+
|
221
|
+
|
222
|
+
class TreatmentRooms(BaseModel):
|
223
|
+
field_: FieldModel
|
224
|
+
|
225
|
+
|
226
|
+
class Location1(BaseModel):
|
227
|
+
site_id: str | Any = Field(..., alias="siteId")
|
228
|
+
business_description: str | Any = Field(..., alias="businessDescription")
|
229
|
+
additional_image_ur_ls: str | Any = Field(..., alias="additionalImageUrLs")
|
230
|
+
facility_square_feet: FacilitySquareFeet | Any = Field(..., alias="facilitySquareFeet")
|
231
|
+
treatment_rooms: TreatmentRooms | Any = Field(..., alias="treatmentRooms")
|
232
|
+
has_classes: str = Field(..., alias="hasClasses")
|
233
|
+
id: str
|
234
|
+
name: str
|
235
|
+
address: str
|
236
|
+
address2: str
|
237
|
+
tax1: str
|
238
|
+
tax2: str
|
239
|
+
tax3: str
|
240
|
+
tax4: str
|
241
|
+
tax5: str
|
242
|
+
phone: str
|
243
|
+
city: str
|
244
|
+
state_prov_code: str = Field(..., alias="stateProvCode")
|
245
|
+
postal_code: str = Field(..., alias="postalCode")
|
246
|
+
latitude: str
|
247
|
+
longitude: str
|
248
|
+
|
249
|
+
|
250
|
+
class MaxCapacity(BaseModel):
|
251
|
+
field_: FieldModel | Any
|
252
|
+
|
253
|
+
|
254
|
+
class WebCapacity(BaseModel):
|
255
|
+
field_: FieldModel | Any
|
256
|
+
|
257
|
+
|
258
|
+
class TotalBookedWaitlist(BaseModel):
|
259
|
+
field_: FieldModel | Any
|
260
|
+
|
261
|
+
|
262
|
+
class WebBooked(BaseModel):
|
263
|
+
field_: FieldModel | Any
|
264
|
+
|
265
|
+
|
266
|
+
class SemesterId(BaseModel):
|
267
|
+
field_: FieldModel | Any
|
268
|
+
|
269
|
+
|
270
|
+
class Program(BaseModel):
|
271
|
+
id: str
|
272
|
+
name: str
|
273
|
+
schedule_type: str = Field(..., alias="scheduleType")
|
274
|
+
cancel_offset: str = Field(..., alias="cancelOffset")
|
275
|
+
|
276
|
+
|
277
|
+
class DefaultTimeLength(BaseModel):
|
278
|
+
field_: FieldModel
|
279
|
+
|
280
|
+
|
281
|
+
class SessionType(BaseModel):
|
282
|
+
default_time_length: DefaultTimeLength = Field(..., alias="defaultTimeLength")
|
283
|
+
program_id: str = Field(..., alias="programId")
|
284
|
+
num_deducted: str = Field(..., alias="numDeducted")
|
285
|
+
id: str
|
286
|
+
name: str
|
287
|
+
site_id: str = Field(..., alias="siteId")
|
288
|
+
cross_regional_booking_performed: str = Field(..., alias="crossRegionalBookingPerformed")
|
289
|
+
available_for_add_on: str = Field(..., alias="availableForAddOn")
|
290
|
+
|
291
|
+
|
292
|
+
class ClassDescription(BaseModel):
|
293
|
+
id: str
|
294
|
+
name: str
|
295
|
+
description: str
|
296
|
+
prereq: str
|
297
|
+
notes: str
|
298
|
+
last_updated: datetime = Field(..., alias="lastUpdated")
|
299
|
+
program: Program
|
300
|
+
session_type: SessionType = Field(..., alias="sessionType")
|
301
|
+
|
302
|
+
|
303
|
+
class Staff(BaseModel):
|
304
|
+
email: str
|
305
|
+
mobile_phone: str = Field(..., alias="mobilePhone")
|
306
|
+
state: str
|
307
|
+
country: str
|
308
|
+
sort_order: str = Field(..., alias="sortOrder")
|
309
|
+
appointment_trn: str = Field(..., alias="appointmentTrn")
|
310
|
+
reservation_trn: str = Field(..., alias="reservationTrn")
|
311
|
+
independent_contractor: str = Field(..., alias="independentContractor")
|
312
|
+
always_allow_double_booking: str = Field(..., alias="alwaysAllowDoubleBooking")
|
313
|
+
id: str
|
314
|
+
name: str
|
315
|
+
first_name: str = Field(..., alias="firstName")
|
316
|
+
last_name: str = Field(..., alias="lastName")
|
317
|
+
bio: str
|
318
|
+
is_male: str = Field(..., alias="isMale")
|
319
|
+
|
320
|
+
|
321
|
+
class AgreementDate(BaseModel):
|
322
|
+
field_: FieldModel
|
323
|
+
|
324
|
+
|
325
|
+
class ReleasedBy(BaseModel):
|
326
|
+
field_: FieldModel
|
327
|
+
|
328
|
+
|
329
|
+
class Liability(BaseModel):
|
330
|
+
is_released: str = Field(..., alias="isReleased")
|
331
|
+
agreement_date: AgreementDate = Field(..., alias="agreementDate")
|
332
|
+
released_by: ReleasedBy = Field(..., alias="releasedBy")
|
333
|
+
|
334
|
+
|
335
|
+
class FirstAppointmentDate(BaseModel):
|
336
|
+
field_: FieldModel
|
337
|
+
|
338
|
+
|
339
|
+
class Client(BaseModel):
|
340
|
+
notes: str
|
341
|
+
mobile_provider: str = Field(..., alias="mobileProvider")
|
342
|
+
appointment_gender_preference: str = Field(..., alias="appointmentGenderPreference")
|
343
|
+
is_company: str = Field(..., alias="isCompany")
|
344
|
+
liability_release: str = Field(..., alias="liabilityRelease")
|
345
|
+
promotional_email_opt_in: str = Field(..., alias="promotionalEmailOptIn")
|
346
|
+
creation_date: datetime = Field(..., alias="creationDate")
|
347
|
+
liability: Liability
|
348
|
+
unique_id: str = Field(..., alias="uniqueId")
|
349
|
+
action: str
|
350
|
+
id: str
|
351
|
+
first_name: str = Field(..., alias="firstName")
|
352
|
+
last_name: str = Field(..., alias="lastName")
|
353
|
+
email: str
|
354
|
+
email_opt_in: str = Field(..., alias="emailOptIn")
|
355
|
+
address_line1: str = Field(..., alias="addressLine1")
|
356
|
+
address_line2: str = Field(..., alias="addressLine2")
|
357
|
+
city: str
|
358
|
+
state: str
|
359
|
+
postal_code: str = Field(..., alias="postalCode")
|
360
|
+
country: str
|
361
|
+
mobile_phone: str = Field(..., alias="mobilePhone")
|
362
|
+
home_phone: str = Field(..., alias="homePhone")
|
363
|
+
birth_date: datetime = Field(..., alias="birthDate")
|
364
|
+
first_appointment_date: FirstAppointmentDate = Field(..., alias="firstAppointmentDate")
|
365
|
+
referred_by: str = Field(..., alias="referredBy")
|
366
|
+
red_alert: str = Field(..., alias="redAlert")
|
367
|
+
is_prospect: str = Field(..., alias="isProspect")
|
368
|
+
contact_method: str = Field(..., alias="contactMethod")
|
369
|
+
member_uuid: str = Field(..., alias="memberUUId")
|
370
|
+
|
371
|
+
|
372
|
+
class MboClass(BaseModel):
|
373
|
+
class_schedule_id: str = Field(..., alias="classScheduleId")
|
374
|
+
location: Location1
|
375
|
+
max_capacity: MaxCapacity = Field(..., alias="maxCapacity")
|
376
|
+
web_capacity: WebCapacity = Field(..., alias="webCapacity")
|
377
|
+
total_booked: None = Field(..., alias="totalBooked")
|
378
|
+
total_booked_waitlist: TotalBookedWaitlist = Field(..., alias="totalBookedWaitlist")
|
379
|
+
web_booked: WebBooked = Field(..., alias="webBooked")
|
380
|
+
semester_id: SemesterId = Field(..., alias="semesterId")
|
381
|
+
is_canceled: str = Field(..., alias="isCanceled")
|
382
|
+
substitute: str
|
383
|
+
active: str
|
384
|
+
is_waitlist_available: str = Field(..., alias="isWaitlistAvailable")
|
385
|
+
is_enrolled: str = Field(..., alias="isEnrolled")
|
386
|
+
hide_cancel: str = Field(..., alias="hideCancel")
|
387
|
+
id: str
|
388
|
+
is_available: str = Field(..., alias="isAvailable")
|
389
|
+
start_date_time: datetime = Field(..., alias="startDateTime")
|
390
|
+
end_date_time: datetime = Field(..., alias="endDateTime")
|
391
|
+
class_description: ClassDescription = Field(..., alias="classDescription")
|
392
|
+
staff: Staff
|
393
|
+
class_uuid: str = Field(..., alias="classUUId")
|
394
|
+
client: Client
|
395
|
+
|
396
|
+
|
397
|
+
class MboResponseItem(BaseModel):
|
398
|
+
class_booking_uuid: str | Any = Field(..., alias="classBookingUUId")
|
399
|
+
action: str | Any
|
400
|
+
otf_class: MboClass | Any = Field(..., alias="class")
|
401
|
+
|
402
|
+
|
403
|
+
class BookClass(BaseModel):
|
404
|
+
saved_bookings: list[SavedBooking] = Field(..., alias="savedBookings")
|
405
|
+
mbo_response: list[MboResponseItem] = Field(..., alias="mboResponse")
|