mnemo_cards/mnemo_cards_backend/lib/user/user_drift_extension.dart

63 lines
2 KiB
Dart
Raw Normal View History

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
}