2025-12-13 13:27:05 +00:00
|
|
|
import 'package:drift/drift.dart' as drift;
|
2026-01-09 17:21:18 +00:00
|
|
|
import 'package:mnemo_cards_backend/database/daos/user_dao.dart';
|
2025-12-13 13:27:05 +00:00
|
|
|
import 'package:mnemo_cards_backend/database/database.dart';
|
2026-01-08 16:07:56 +00:00
|
|
|
import 'package:mnemo_cards_backend/packs/card_pack_drift_extension.dart';
|
2025-12-13 13:27:05 +00:00
|
|
|
import 'package:mnemo_cards_common_backend/mnemo_cards_common_backend.dart';
|
|
|
|
|
|
2025-12-13 20:55:50 +00:00
|
|
|
/// Extension для конвертации User (Drift) в UserModel
|
2025-12-13 13:27:05 +00:00
|
|
|
extension UserToUserModel on User {
|
2026-01-08 16:07:56 +00:00
|
|
|
Future<UserModel> toUserModel([List<CardPack>? packs]) async {
|
|
|
|
|
final packModels = packs != null
|
|
|
|
|
? await Future.wait(packs.map((p) => p.toModel()))
|
|
|
|
|
: <CardPackModel>[];
|
2025-12-13 13:27:05 +00:00
|
|
|
final userModel = UserModel(
|
|
|
|
|
id: id,
|
|
|
|
|
name: name,
|
|
|
|
|
email: email,
|
2025-12-18 20:40:48 +00:00
|
|
|
telegram: telegram,
|
2025-12-13 13:27:05 +00:00
|
|
|
admin: admin,
|
2025-12-13 14:48:00 +00:00
|
|
|
purchases: purchases,
|
|
|
|
|
userSettings: userSettings,
|
2026-01-08 16:07:56 +00:00
|
|
|
packs: packModels,
|
2025-12-13 13:27:05 +00:00
|
|
|
);
|
|
|
|
|
|
|
|
|
|
return userModel;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2026-01-09 17:21:18 +00:00
|
|
|
extension UserWithDataToUserDataModel on UserWithData {
|
|
|
|
|
Future<UserDataModel> toUserDataModel() async {
|
|
|
|
|
if (userData == null) {
|
|
|
|
|
return UserDataModel();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return UserDataModel(
|
|
|
|
|
id: userData!.id,
|
|
|
|
|
lastTestSessionToken: userData!.lastTestSessionToken,
|
|
|
|
|
lastTimeOnline: userData!.lastTimeOnline?.toDateTime(),
|
|
|
|
|
tags: userData!.tags,
|
|
|
|
|
totalStudyTimeMinutes: userData!.totalStudyTimeMinutes,
|
|
|
|
|
currentStreak: userData!.currentStreak,
|
|
|
|
|
longestStreak: userData!.longestStreak,
|
|
|
|
|
// words, packProgress, studyDates, categoryMinutes, achievements
|
|
|
|
|
// are loaded separately from database when needed
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
2025-12-13 13:27:05 +00:00
|
|
|
/// Extension для конвертации UserModel в User (Drift)
|
|
|
|
|
extension UserModelToUser on UserModel {
|
|
|
|
|
UsersCompanion toUsersCompanion() {
|
|
|
|
|
return UsersCompanion(
|
2025-12-13 20:55:50 +00:00
|
|
|
id: id != null ? drift.Value(id!) : const drift.Value.absent(),
|
2025-12-13 14:48:00 +00:00
|
|
|
externalUserId: const drift.Value.absent(),
|
2025-12-13 13:27:05 +00:00
|
|
|
name: drift.Value(name),
|
|
|
|
|
email: drift.Value(email),
|
2025-12-18 20:40:48 +00:00
|
|
|
telegram: drift.Value(telegram),
|
2025-12-13 13:27:05 +00:00
|
|
|
admin: drift.Value(admin),
|
2025-12-13 14:48:00 +00:00
|
|
|
purchases: drift.Value(purchases),
|
|
|
|
|
userSettings: drift.Value(userSettings),
|
2025-12-13 13:27:05 +00:00
|
|
|
);
|
|
|
|
|
}
|
2025-12-20 18:26:15 +00:00
|
|
|
}
|