Some checks are pending
Backend CI / test (push) Waiting to run
Backend CI / build (push) Blocked by required conditions
Web App CI / test (push) Waiting to run
Web App CI / build (push) Blocked by required conditions
Deploy Admin Panel / Deploy Admin Panel (push) Waiting to run
Deploy Admin Panel / Admin Panel Verification (push) Blocked by required conditions
Deploy Mnemo Cards / Deploy Backend (push) Waiting to run
Deploy Mnemo Cards / Deploy Web App (push) Blocked by required conditions
Deploy Mnemo Cards / Final Verification (push) Blocked by required conditions
Deploy Telegram Bot / Deploy Telegram Bot (push) Waiting to run
64 lines
2.6 KiB
Dart
64 lines
2.6 KiB
Dart
import 'package:mnemo_cards_common_backend/mnemo_cards_common_backend.dart';
|
||
import 'package:mnemo_cards_backend/user/user_data_model.dart';
|
||
import 'package:mnemo_cards_common/mnemo_cards_common.dart';
|
||
|
||
extension UserModelExtension on UserModel {
|
||
/// Конвертация в DTO
|
||
///
|
||
/// Примечание: для расчета packProgress, studyDates, categoryMinutes на лету
|
||
/// используйте toDtoWithCalculatedData()
|
||
/// [userData] - опциональные данные пользователя
|
||
/// [subscriptionModel] - опциональная подписка пользователя
|
||
Future<UserDto> toDto({
|
||
UserDataModel? userData,
|
||
UserSubscriptionModel? subscriptionModel,
|
||
}) async {
|
||
final activeSubscription =
|
||
subscriptionModel != null && subscriptionModel.isActive;
|
||
return UserDto(
|
||
id: id,
|
||
name: name,
|
||
email: email,
|
||
telegram: telegram,
|
||
admin: admin,
|
||
packs: packs.map((e) => e.id?.toString()).whereNotNull().toList(),
|
||
subscription: activeSubscription,
|
||
subscriptionFeatures: subscriptionModel?.features.toSet() ?? {},
|
||
userDataDto: userData?.toDto(),
|
||
);
|
||
}
|
||
|
||
/// Конвертация в DTO с рассчитанными данными на лету
|
||
///
|
||
/// Используется когда нужно рассчитать packProgress, studyDates, categoryMinutes
|
||
/// из WordStatistics и StudySessions вместо использования удаленных полей UserDatas
|
||
/// [userData] - опциональные данные пользователя
|
||
/// [subscriptionModel] - опциональная подписка пользователя
|
||
Future<UserDto> toDtoWithCalculatedData({
|
||
required List<PackProgressDto> packProgress,
|
||
required List<DateTime> studyDates,
|
||
required Map<String, int> categoryMinutes,
|
||
AllWordsStatisticsDto? wordsStatistics,
|
||
UserDataModel? userData,
|
||
UserSubscriptionModel? subscriptionModel,
|
||
}) async {
|
||
final activeSubscription =
|
||
subscriptionModel != null && subscriptionModel.isActive;
|
||
return UserDto(
|
||
id: id,
|
||
name: name,
|
||
email: email,
|
||
telegram: telegram,
|
||
admin: admin,
|
||
packs: packs.map((e) => e.id?.toString()).whereNotNull().toList(),
|
||
subscription: activeSubscription,
|
||
subscriptionFeatures: subscriptionModel?.features.toSet() ?? {},
|
||
userDataDto: userData?.toDto(
|
||
calculatedPackProgress: packProgress,
|
||
calculatedStudyDates: studyDates,
|
||
calculatedCategoryMinutes: categoryMinutes,
|
||
calculatedWordsStatistics: wordsStatistics,
|
||
),
|
||
);
|
||
}
|
||
}
|