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() Future toDto() async { final activeSubscription = subscriptionModel != null && subscriptionModel!.isActive; return UserDto( id: id, name: name, email: email, 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 Future toDtoWithCalculatedData({ required List packProgress, required List studyDates, required Map categoryMinutes, AllWordsStatisticsDto? wordsStatistics, }) async { final activeSubscription = subscriptionModel != null && subscriptionModel!.isActive; return UserDto( id: id, name: name, email: email, 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, ), ); } }