mnemo_cards/mnemo_cards_backend/lib/user/user_model.dart

65 lines
2.6 KiB
Dart
Raw Normal View History

2025-11-16 11:25:27 +00:00
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 {
2025-12-14 20:45:27 +00:00
/// Конвертация в DTO
2025-12-20 18:26:15 +00:00
///
2025-12-14 20:45:27 +00:00
/// Примечание: для расчета packProgress, studyDates, categoryMinutes на лету
/// используйте toDtoWithCalculatedData()
2026-01-09 17:21:18 +00:00
/// [userData] - опциональные данные пользователя
/// [subscriptionModel] - опциональная подписка пользователя
Future<UserDto> toDto({
UserDataModel? userData,
UserSubscriptionModel? subscriptionModel,
}) async {
2025-12-20 18:26:15 +00:00
final activeSubscription =
2026-01-09 17:21:18 +00:00
subscriptionModel != null && subscriptionModel.isActive;
2025-11-16 11:25:27 +00:00
return UserDto(
id: id,
name: name,
email: email,
2025-12-18 20:40:48 +00:00
telegram: telegram,
2025-11-16 11:25:27 +00:00
admin: admin,
packs: packs.map((e) => e.id?.toString()).whereNotNull().toList(),
subscription: activeSubscription,
2025-12-13 20:55:50 +00:00
subscriptionFeatures: subscriptionModel?.features.toSet() ?? {},
userDataDto: userData?.toDto(),
2025-11-16 11:25:27 +00:00
);
}
2025-12-20 18:26:15 +00:00
2025-12-14 20:45:27 +00:00
/// Конвертация в DTO с рассчитанными данными на лету
2025-12-20 18:26:15 +00:00
///
2025-12-14 20:45:27 +00:00
/// Используется когда нужно рассчитать packProgress, studyDates, categoryMinutes
/// из WordStatistics и StudySessions вместо использования удаленных полей UserDatas
2026-01-09 17:21:18 +00:00
/// [userData] - опциональные данные пользователя
/// [subscriptionModel] - опциональная подписка пользователя
2025-12-14 20:45:27 +00:00
Future<UserDto> toDtoWithCalculatedData({
required List<PackProgressDto> packProgress,
required List<DateTime> studyDates,
required Map<String, int> categoryMinutes,
AllWordsStatisticsDto? wordsStatistics,
2026-01-09 17:21:18 +00:00
UserDataModel? userData,
UserSubscriptionModel? subscriptionModel,
2025-12-14 20:45:27 +00:00
}) async {
2025-12-20 18:26:15 +00:00
final activeSubscription =
2026-01-09 17:21:18 +00:00
subscriptionModel != null && subscriptionModel.isActive;
2025-12-14 20:45:27 +00:00
return UserDto(
id: id,
name: name,
email: email,
2025-12-18 20:40:48 +00:00
telegram: telegram,
2025-12-14 20:45:27 +00:00
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,
),
);
}
2025-11-16 11:25:27 +00:00
}