@foxford/sdk 8.0.1 → 8.1.1

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/entities.d.cts CHANGED
@@ -1,5 +1,13 @@
1
+ import { U as UserInterests } from './types-3Yq2Uj51.cjs';
2
+ import './antibot.cjs';
3
+ import '@foxford/services';
4
+ import '@foxford/types';
5
+
1
6
  type PupilRole = '11 класс' | '10 класс' | '9 класс' | '8 класс' | '7 класс' | '6 класс' | '5 класс' | '4 класс' | '3 класс' | '2 класс' | '1 класс';
2
7
  type UserRole = 'Ученик' | 'Репетитор' | 'Учитель' | 'Родитель' | 'Выпускник' | 'Дошкольник' | PupilRole;
8
+ type LeaderboardAccessState = 'unavailable' | 'available' | 'vacation' | 'disabled';
9
+ type LeaderboardReadinessState = 'changeable_course_selection' | 'ready' | 'unready' | 'waiting_course_selection';
10
+ type LearningGoalsAccessState = 'enabled' | 'disabled' | 'optional' | 'required';
3
11
  interface UserDTO {
4
12
  id: null | number;
5
13
  email: string;
@@ -110,79 +118,556 @@ interface UserDTO {
110
118
  startsAt: null | string;
111
119
  yearName: string;
112
120
  } | null;
121
+ /** Текущий интерес посетителя — та же форма, что у `GET /api/user/user_interest`, но из профиля. */
122
+ currentInterest: UserInterests | null;
123
+ /** До какой даты открыт приём в домашнюю школу. */
124
+ admissionFinishesOn: null | string;
125
+ /** Посетитель пришёл из Алгоритмики. */
126
+ algoritmika: boolean;
127
+ bonusesPageVisited: boolean;
128
+ canChangeSchoolInfo: boolean;
129
+ externshipDemoAccessActive: boolean;
130
+ /** Экстернат ждёт оплаты: когда закроется доступ и по какому договору. */
131
+ externshipPaymentRequired: {
132
+ accessClosingDate: string;
133
+ contractId: number;
134
+ } | null;
135
+ externshipPromoHeaderOn: boolean;
136
+ hasExamProgressAccess: boolean;
137
+ hasYearlyRecapAccess: boolean;
138
+ isAttestationSchoolManager: null | boolean;
139
+ isMentor: boolean;
140
+ isXpStreakAvailable: boolean;
141
+ leaderboard: {
142
+ accessState: LeaderboardAccessState;
143
+ readinessState: LeaderboardReadinessState;
144
+ } | null;
145
+ leaderboardAccessState: LeaderboardAccessState;
146
+ learningGoalsAccessState: LearningGoalsAccessState;
147
+ /** Мессенджеры, на которые подписан посетитель; `null` — бэкенд не считал. */
148
+ messengerSubscriptions: null | string[];
149
+ needToPromoteRenewalWithCoach: boolean;
150
+ nextYearCoursesBannerAvailable: boolean;
151
+ passwordSet: null | boolean;
152
+ referralCode: null | string;
153
+ targetActionsOnboardingAvailable: boolean;
113
154
  }
114
155
 
115
156
  declare class User {
116
157
  private readonly props;
117
158
  private readonly isDefault;
118
159
  private constructor();
160
+ /**
161
+ * Идентификатор посетителя на бэкенде.
162
+ *
163
+ * @returns Число либо `null` у гостя.
164
+ */
119
165
  get id(): UserDTO['id'];
166
+ /**
167
+ * Почта посетителя.
168
+ *
169
+ * @returns Строка; пустая, если почты нет.
170
+ */
120
171
  get email(): UserDTO['email'];
172
+ /**
173
+ * Имя.
174
+ *
175
+ * @returns Строка; пустая, если не заполнено.
176
+ */
121
177
  get firstName(): UserDTO['firstName'];
178
+ /**
179
+ * Отчество.
180
+ *
181
+ * @returns Строка; пустая, если не заполнено.
182
+ */
122
183
  get middleName(): UserDTO['middleName'];
184
+ /**
185
+ * Фамилия.
186
+ *
187
+ * @returns Строка; пустая, если не заполнено.
188
+ */
123
189
  get lastName(): UserDTO['lastName'];
190
+ /**
191
+ * Полное имя, каким его собрал бэкенд.
192
+ *
193
+ * @returns Строка; пустая у гостя.
194
+ */
124
195
  get fullName(): UserDTO['fullName'];
196
+ /**
197
+ * Короткое имя для обращения в интерфейсе.
198
+ *
199
+ * @returns Строка; пустая у гостя.
200
+ */
125
201
  get shortName(): UserDTO['shortName'];
202
+ /**
203
+ * Когда заведён профиль.
204
+ *
205
+ * @returns Дата ISO либо `null` у гостя.
206
+ */
126
207
  get createdAt(): UserDTO['createdAt'];
208
+ /**
209
+ * Часовой пояс посетителя.
210
+ *
211
+ * @returns Имя пояса либо `null`, если не задан.
212
+ */
127
213
  get timezone(): UserDTO['timezone'];
214
+ /**
215
+ * Локаль интерфейса.
216
+ *
217
+ * @returns Код локали либо `null`, если не задана.
218
+ */
128
219
  get locale(): UserDTO['locale'];
220
+ /**
221
+ * Класс посетителя: id, порядковый номер, имя и транслит.
222
+ *
223
+ * @returns Объект класса; у гостя поля `null` и пустые строки.
224
+ */
129
225
  get grade(): UserDTO['grade'];
226
+ /**
227
+ * Телефон посетителя.
228
+ *
229
+ * @returns Строка либо `null`, если не указан.
230
+ */
130
231
  get phone(): UserDTO['phone'];
232
+ /**
233
+ * Адрес аватара.
234
+ *
235
+ * @returns Строка; пустая, если аватара нет.
236
+ */
131
237
  get avatarUrl(): UserDTO['avatarUrl'];
238
+ /**
239
+ * Посетитель — родитель.
240
+ *
241
+ * @returns `true`, если роль родительская.
242
+ */
132
243
  get isParent(): UserDTO['isParent'];
244
+ /**
245
+ * Посетитель — выпускник.
246
+ *
247
+ * @returns `true`, если школу закончил.
248
+ */
133
249
  get isGraduated(): UserDTO['isGraduated'];
250
+ /**
251
+ * Класс подтверждён посетителем.
252
+ *
253
+ * @returns `true`, если класс проверен.
254
+ */
134
255
  get gradeChecked(): UserDTO['gradeChecked'];
256
+ /**
257
+ * Тип учётной записи на бэкенде.
258
+ *
259
+ * @returns `pupil`, `agent` либо `null` у гостя.
260
+ */
135
261
  get type(): UserDTO['type'];
262
+ /**
263
+ * Посетитель — репетитор.
264
+ *
265
+ * @returns `true`, если роль репетитора.
266
+ */
136
267
  get isCoach(): UserDTO['isCoach'];
268
+ /**
269
+ * Ведёт мини-группы.
270
+ *
271
+ * @returns `true`, если ведёт.
272
+ */
137
273
  get isMiniGroupTeacher(): UserDTO['isMiniGroupTeacher'];
274
+ /**
275
+ * Репетитор экстерната.
276
+ *
277
+ * @returns `true`, если ведёт экстернат.
278
+ */
138
279
  get isExternshipCoach(): UserDTO['isExternshipCoach'];
280
+ /**
281
+ * Посетитель — учитель.
282
+ *
283
+ * @returns `true`, если роль учителя.
284
+ */
139
285
  get isAgent(): UserDTO['isAgent'];
286
+ /**
287
+ * Посетитель — методист.
288
+ *
289
+ * @returns `true`, если методист.
290
+ */
140
291
  get methodist(): UserDTO['methodist'];
292
+ /**
293
+ * Почтовый адрес: страна, регион, город, улица, дом.
294
+ *
295
+ * @returns Объект адреса либо `null`, если не заполнен.
296
+ */
141
297
  get address(): UserDTO['address'];
298
+ /**
299
+ * Привязанные соцсети.
300
+ *
301
+ * @returns Список провайдеров с идентификаторами; пустой, если привязок нет.
302
+ */
142
303
  get socialNets(): UserDTO['socialNets'];
304
+ /**
305
+ * Логин в Skype.
306
+ *
307
+ * @returns Строка либо `null`.
308
+ */
143
309
  get skype(): UserDTO['skype'];
310
+ /**
311
+ * Настройки интерфейса: показанные подсказки и скрытые баннеры.
312
+ *
313
+ * @returns Объект флагов либо `undefined`, если бэкенд их не прислал.
314
+ */
144
315
  get settings(): UserDTO['settings'];
316
+ /**
317
+ * Бонусный счёт: подарочные и реальные бонусы.
318
+ *
319
+ * @returns Объект с суммами.
320
+ */
145
321
  get bonus(): UserDTO['bonus'];
322
+ /**
323
+ * Сумма бонусов на счёте.
324
+ *
325
+ * @returns Число.
326
+ */
146
327
  get bonusAmount(): UserDTO['bonusAmount'];
328
+ /**
329
+ * Есть действующие покупки.
330
+ *
331
+ * @returns `true`, если есть.
332
+ */
147
333
  get hasActivePurchases(): UserDTO['hasActivePurchases'];
334
+ /**
335
+ * Остались попытки пробных экзаменов.
336
+ *
337
+ * @returns `true`, если остались.
338
+ */
148
339
  get hasAttemptsSolveExamRehearsals(): UserDTO['hasAttemptsSolveExamRehearsals'];
340
+ /**
341
+ * Есть закладки.
342
+ *
343
+ * @returns `true`, если есть.
344
+ */
149
345
  get hasBookmarks(): UserDTO['hasBookmarks'];
346
+ /**
347
+ * Метки посетителя на бэкенде.
348
+ *
349
+ * @returns Список строк либо `null`.
350
+ */
150
351
  get tags(): UserDTO['tags'];
352
+ /**
353
+ * Шаблон корзины.
354
+ *
355
+ * @returns Число либо `null`.
356
+ */
151
357
  get cartTemplateId(): UserDTO['cartTemplateId'];
358
+ /**
359
+ * Сколько позиций в корзине.
360
+ *
361
+ * @returns Число.
362
+ */
152
363
  get cartItemsCount(): UserDTO['cartItemsCount'];
364
+ /**
365
+ * Онбординг пройден.
366
+ *
367
+ * @returns `true`, если пройден.
368
+ */
153
369
  get onboardingFinished(): UserDTO['onboardingFinished'];
370
+ /**
371
+ * Когда пройден онбординг.
372
+ *
373
+ * @returns Дата ISO либо `null`, пока не пройден.
374
+ */
154
375
  get onboardingFinishedAt(): UserDTO['onboardingFinishedAt'];
376
+ /**
377
+ * Почта подтверждена.
378
+ *
379
+ * @returns `true`, если подтверждена.
380
+ */
155
381
  get emailConfirmed(): UserDTO['emailConfirmed'];
382
+ /**
383
+ * Телефон подтверждён.
384
+ *
385
+ * @returns `true`, если подтверждён.
386
+ */
156
387
  get phoneConfirmed(): UserDTO['phoneConfirmed'];
388
+ /**
389
+ * Почта выдумана бэкендом при регистрации без почты.
390
+ *
391
+ * @returns `true`, если почта ненастоящая.
392
+ */
157
393
  get fakeEmail(): UserDTO['fakeEmail'];
394
+ /**
395
+ * Посетитель заведён бэкендом без его участия (например, по заявке).
396
+ *
397
+ * @returns `true`, если учётная запись ненастоящая.
398
+ */
158
399
  get fakeUser(): UserDTO['fakeUser'];
400
+ /**
401
+ * Профиль дополнен данными после регистрации.
402
+ *
403
+ * @returns `true`, если дополнен.
404
+ */
159
405
  get profileEnriched(): UserDTO['profileEnriched'];
406
+ /**
407
+ * Идентификатор итогов года.
408
+ *
409
+ * @returns Строка либо `null`, если итогов нет.
410
+ */
160
411
  get recapUuid(): UserDTO['recapUuid'];
412
+ /**
413
+ * Дисциплины, которые изучает посетитель.
414
+ *
415
+ * @returns Список id; пустой, если не выбраны.
416
+ */
161
417
  get disciplineIds(): UserDTO['disciplineIds'];
418
+ /**
419
+ * Настройки приватности.
420
+ *
421
+ * @returns Объект с флагом публичного профиля.
422
+ */
162
423
  get privacy(): UserDTO['privacy'];
424
+ /**
425
+ * Телефон родителя.
426
+ *
427
+ * @returns Строка либо `null`.
428
+ */
163
429
  get parentPhone(): UserDTO['parentPhone'];
430
+ /**
431
+ * Телефон родителя подтверждён.
432
+ *
433
+ * @returns `true`, если подтверждён.
434
+ */
164
435
  get parentPhoneConfirmed(): UserDTO['parentPhoneConfirmed'];
436
+ /**
437
+ * Посетитель что-то покупал.
438
+ *
439
+ * @returns `true`, `false` либо `null`, если бэкенд не считал.
440
+ */
165
441
  get isCustomer(): UserDTO['isCustomer'];
442
+ /**
443
+ * Доступны многодневные серии занятий.
444
+ *
445
+ * @returns `true`, если доступны.
446
+ */
166
447
  get hasAccessToMultiDaysStreaks(): UserDTO['hasAccessToMultiDaysStreaks'];
448
+ /**
449
+ * Ученик начальной школы.
450
+ *
451
+ * @returns `true`, если начальная школа.
452
+ */
167
453
  get isElementaryPupil(): UserDTO['isElementaryPupil'];
454
+ /**
455
+ * Токен для канала уведомлений по WebSocket.
456
+ *
457
+ * @returns Строка либо `null`, если канала нет.
458
+ */
168
459
  get webSocketNotificationsJwt(): UserDTO['webSocketNotificationsJwt'];
460
+ /**
461
+ * Доступны аттестационные листы.
462
+ *
463
+ * @returns `true`, если доступны.
464
+ */
169
465
  get hasAccessToAttestationSheets(): UserDTO['hasAccessToAttestationSheets'];
466
+ /**
467
+ * Посетитель учится в экстернате.
468
+ *
469
+ * @returns `true`, если экстернат.
470
+ */
170
471
  get externshipUser(): UserDTO['externshipUser'];
472
+ /**
473
+ * Есть оплаченные договоры экстерната.
474
+ *
475
+ * @returns `true`, если есть.
476
+ */
171
477
  get hasPurchasedExternshipContracts(): UserDTO['hasPurchasedExternshipContracts'];
478
+ /**
479
+ * Доступна аттестация экстерната.
480
+ *
481
+ * @returns `true`, если доступна.
482
+ */
172
483
  get hasExternshipAttestationAccess(): UserDTO['hasExternshipAttestationAccess'];
484
+ /**
485
+ * Профиль в разделе социализации.
486
+ *
487
+ * @returns Объект с id и состоянием либо `null`, если профиля нет.
488
+ */
173
489
  get socializationProfile(): UserDTO['socializationProfile'];
490
+ /**
491
+ * Когда заканчивается бесплатный доступ.
492
+ *
493
+ * @returns Дата ISO либо `null`, если доступа нет.
494
+ */
174
495
  get freeAccessFinishesAt(): UserDTO['freeAccessFinishesAt'];
496
+ /**
497
+ * В комнате начальной школы есть непросмотренные новинки.
498
+ *
499
+ * @returns `true`, если есть; `undefined`, если бэкенд не прислал.
500
+ */
175
501
  get hasUnseenRoomFeatures(): UserDTO['hasUnseenRoomFeatures'];
502
+ /**
503
+ * Покупал договоры экстерната.
504
+ *
505
+ * @returns `true`, если покупал.
506
+ */
176
507
  get purchaseAnyExternshipContracts(): UserDTO['purchaseAnyExternshipContracts'];
508
+ /**
509
+ * Связан с экстернатом: ученик, родитель либо репетитор.
510
+ *
511
+ * @returns `true`, если связан; `undefined`, если бэкенд не прислал.
512
+ */
177
513
  get hasExternshipRelation(): UserDTO['hasExternshipRelation'];
514
+ /**
515
+ * Есть действующий договор экстерната.
516
+ *
517
+ * @returns `true`, если есть; `undefined`, если бэкенд не прислал.
518
+ */
178
519
  get hasExternshipActiveContract(): UserDTO['hasExternshipActiveContract'];
520
+ /**
521
+ * Можно продлить договор домашней школы.
522
+ *
523
+ * @returns `true`, если можно; `undefined`, если бэкенд не прислал.
524
+ */
179
525
  get canProlongateContract(): UserDTO['canProlongateContract'];
526
+ /**
527
+ * Окно пролонгации договора: даты, скидка, заголовок следующего года.
528
+ *
529
+ * @returns Объект окна, `null` либо `undefined`, если окна нет.
530
+ */
180
531
  get prolongation(): UserDTO['prolongation'];
532
+ /**
533
+ * Текущий интерес посетителя: класс, дисциплина, уровень, формат и причина. Та же форма, что у `GET /api/user/user_interest`, но из профиля, без похода.
534
+ *
535
+ * @returns Объект интереса либо `null`, если бэкенд не считал.
536
+ */
537
+ get currentInterest(): UserDTO['currentInterest'];
538
+ /**
539
+ * До какой даты открыт приём в домашнюю школу.
540
+ *
541
+ * @returns Дата либо `null`, если приём не идёт.
542
+ */
543
+ get admissionFinishesOn(): UserDTO['admissionFinishesOn'];
544
+ /**
545
+ * Посетитель пришёл из Алгоритмики — партнёрский вход с другой площадки.
546
+ *
547
+ * @returns `true`, если из Алгоритмики.
548
+ */
549
+ get algoritmika(): UserDTO['algoritmika'];
550
+ /**
551
+ * Страница бонусов уже открывалась — подсказки на ней больше не показываются.
552
+ *
553
+ * @returns `true`, если открывалась.
554
+ */
555
+ get bonusesPageVisited(): UserDTO['bonusesPageVisited'];
556
+ /**
557
+ * Посетителю разрешено менять школу и класс в профиле.
558
+ *
559
+ * @returns `true`, если разрешено.
560
+ */
561
+ get canChangeSchoolInfo(): UserDTO['canChangeSchoolInfo'];
562
+ /**
563
+ * Идёт демо-доступ к экстернату.
564
+ *
565
+ * @returns `true`, пока демо активно.
566
+ */
567
+ get externshipDemoAccessActive(): UserDTO['externshipDemoAccessActive'];
568
+ /**
569
+ * Экстернат ждёт оплаты: когда закроется доступ и по какому договору.
570
+ *
571
+ * @returns Объект с датой и id договора либо `null`, если долга нет.
572
+ */
573
+ get externshipPaymentRequired(): UserDTO['externshipPaymentRequired'];
574
+ /**
575
+ * Показывать промо-шапку экстерната.
576
+ *
577
+ * @returns `true`, если показывать.
578
+ */
579
+ get externshipPromoHeaderOn(): UserDTO['externshipPromoHeaderOn'];
580
+ /**
581
+ * Доступен раздел прогресса подготовки к экзаменам.
582
+ *
583
+ * @returns `true`, если доступен.
584
+ */
585
+ get hasExamProgressAccess(): UserDTO['hasExamProgressAccess'];
586
+ /**
587
+ * Доступны итоги года; их адрес — `recapUuid`.
588
+ *
589
+ * @returns `true`, если доступны.
590
+ */
591
+ get hasYearlyRecapAccess(): UserDTO['hasYearlyRecapAccess'];
592
+ /**
593
+ * Управляет аттестационной школой.
594
+ *
595
+ * @returns `true`, `false` либо `null`, если бэкенд не считал.
596
+ */
597
+ get isAttestationSchoolManager(): UserDTO['isAttestationSchoolManager'];
598
+ /**
599
+ * Посетитель — наставник.
600
+ *
601
+ * @returns `true`, если наставник.
602
+ */
603
+ get isMentor(): UserDTO['isMentor'];
604
+ /**
605
+ * Доступна серия ежедневных занятий с опытом (XP-стрик).
606
+ *
607
+ * @returns `true`, если доступна.
608
+ */
609
+ get isXpStreakAvailable(): UserDTO['isXpStreakAvailable'];
610
+ /**
611
+ * Таблица лидеров: доступна ли посетителю и готов ли он к ней (выбор курса).
612
+ *
613
+ * @returns Объект состояний либо `null`, если посетитель вне программы.
614
+ */
615
+ get leaderboard(): UserDTO['leaderboard'];
616
+ /**
617
+ * Состояние доступа к таблице лидеров.
618
+ *
619
+ * @returns `unavailable`, `available`, `vacation` либо `disabled`.
620
+ */
621
+ get leaderboardAccessState(): UserDTO['leaderboardAccessState'];
622
+ /**
623
+ * Как устроены учебные цели у посетителя.
624
+ *
625
+ * @returns `enabled`, `disabled`, `optional` либо `required`.
626
+ */
627
+ get learningGoalsAccessState(): UserDTO['learningGoalsAccessState'];
628
+ /**
629
+ * Мессенджеры, на которые посетитель подписан на уведомления.
630
+ *
631
+ * @returns Список либо `null`, если бэкенд не считал.
632
+ */
633
+ get messengerSubscriptions(): UserDTO['messengerSubscriptions'];
634
+ /**
635
+ * Пора предлагать продление занятий с репетитором.
636
+ *
637
+ * @returns `true`, если пора.
638
+ */
639
+ get needToPromoteRenewalWithCoach(): UserDTO['needToPromoteRenewalWithCoach'];
640
+ /**
641
+ * Показывать баннер курсов следующего учебного года.
642
+ *
643
+ * @returns `true`, если показывать.
644
+ */
645
+ get nextYearCoursesBannerAvailable(): UserDTO['nextYearCoursesBannerAvailable'];
646
+ /**
647
+ * Пароль задан — вход не только через код или соцсеть.
648
+ *
649
+ * @returns `true`, `false` либо `null`, если бэкенд не считал.
650
+ */
651
+ get passwordSet(): UserDTO['passwordSet'];
652
+ /**
653
+ * Реферальный код для программы «приведи друга».
654
+ *
655
+ * @returns Строка либо `null`, если код не выдан.
656
+ */
657
+ get referralCode(): UserDTO['referralCode'];
658
+ /**
659
+ * Доступен онбординг целевых действий.
660
+ *
661
+ * @returns `true`, если доступен.
662
+ */
663
+ get targetActionsOnboardingAvailable(): UserDTO['targetActionsOnboardingAvailable'];
181
664
  /**
182
665
  * Идёт ли сейчас окно пролонгации договора домашней школы.
183
666
  *
184
667
  * Границы включаются: последний день окна ещё считается пролонгацией. Не заданная граница
185
668
  * означает, что окна нет вовсе, а не что оно бесконечно.
669
+ *
670
+ * @returns `true`, если сегодня внутри окна включительно
186
671
  */
187
672
  isProlongationBetweenDates(): boolean;
188
673
  /**
@@ -193,11 +678,18 @@ declare class User {
193
678
  * @returns клонированный объект
194
679
  */
195
680
  private static deepClone;
681
+ /**
682
+ * Гость — сущность с умолчаниями всех полей и признаком `isDefaultUser()`.
683
+ *
684
+ * @returns Новая сущность на каждый вызов: умолчания общие на процесс, копия своя.
685
+ */
196
686
  static createDefault(): User;
197
687
  /**
198
688
  * Форма посетителя по умолчанию ДАННЫМИ — гость со всеми полями: тому, кто отдаёт `UserDTO`
199
689
  * наружу (хост — приложениям), нужна полная форма, а не сущность с методами. Своя копия на
200
690
  * вызов: умолчания общие на процесс, и правка чужой копии их не тронет.
691
+ *
692
+ * @returns Новая копия умолчаний на каждый вызов
201
693
  */
202
694
  static defaultDto(): UserDTO;
203
695
  /**
@@ -207,6 +699,13 @@ declare class User {
207
699
  * @returns санитизированная строка
208
700
  */
209
701
  private static sanitizeString;
702
+ /**
703
+ * Сущность из профиля бэкенда (`UserDTO` в camelCase): строковые поля чистятся от null-байтов
704
+ * и пробелов по краям, остальное берётся как есть.
705
+ *
706
+ * @param input - Профиль в форме `UserDTO`
707
+ * @returns Сущность над копией профиля: исходный объект не трогается
708
+ */
210
709
  static fromApi(input: unknown): User;
211
710
  /**
212
711
  * Санитизирует данные пользователя
@@ -215,30 +714,48 @@ declare class User {
215
714
  * @returns санитизированные данные
216
715
  */
217
716
  private static sanitizeUserData;
717
+ /**
718
+ * Сущность собрана из умолчаний (`createDefault`), а не из профиля бэкенда.
719
+ *
720
+ * @returns `true` у гостя по умолчанию
721
+ */
218
722
  isDefaultUser(): boolean;
723
+ /**
724
+ * Посетитель вошёл — у него есть идентификатор на бэкенде.
725
+ *
726
+ * @returns `true`, если `id` задан и положителен
727
+ */
219
728
  isLoggedIn(): boolean;
220
729
  private static getGradeString;
221
730
  /**
222
- * Возвращает тектовое представление роли / класса пользователя
731
+ * Роль либо класс словом — для подписи в интерфейсе.
223
732
  *
224
- * @returns {UserRole}
733
+ * @returns «Дошкольник» для нулевого класса, «Выпускник» без класса, иначе класс («5 класс»)
225
734
  */
226
735
  getPupilRole(): UserRole;
227
736
  /**
228
- * Возвращает роль пользователя
229
- * @returns {UserRole} роль как строка
737
+ * Роль словом — по флагам профиля, первый совпавший: репетитор, учитель, родитель.
738
+ *
739
+ * @returns «Репетитор», «Учитель», «Родитель», иначе роль ученика из `getPupilRole()`
230
740
  */
231
741
  getRole: () => UserRole;
232
742
  /**
233
- * Возвращает фамилию и инициалы юзера
234
- * @param {User} user
235
- * @return {string} 'Пупкин В.'
743
+ * Фамилия с инициалами имени и отчества — подпись в списках.
744
+ *
745
+ * @returns Строка вида «Пупкин В. И.»; без отчества — «Пупкин В.»
236
746
  */
237
747
  getInitials: () => string;
748
+ /**
749
+ * Профиль строкой JSON — для печати в документ и передачи по сети.
750
+ *
751
+ * @returns JSON полей сущности
752
+ */
238
753
  toJson(): string;
239
754
  /**
240
755
  * Посетитель данными — то, что едет по сети и в состояние: сущность с методами не
241
756
  * сериализуется. Своя копия на вызов: сущность неизменяема, и правка копии её не тронет.
757
+ *
758
+ * @returns Копия полей сущности данными
242
759
  */
243
760
  toDto(): UserDTO;
244
761
  }