|
|
|
|
@ -1,9 +1,11 @@
|
|
|
|
|
import 'package:drift/drift.dart';
|
|
|
|
|
import 'package:immich_mobile/constants/enums.dart';
|
|
|
|
|
import 'package:immich_mobile/domain/models/user.model.dart';
|
|
|
|
|
import 'package:immich_mobile/domain/models/user_metadata.model.dart';
|
|
|
|
|
import 'package:immich_mobile/infrastructure/entities/user.entity.dart' as entity;
|
|
|
|
|
import 'package:immich_mobile/infrastructure/entities/user.entity.drift.dart';
|
|
|
|
|
import 'package:immich_mobile/infrastructure/repositories/db.repository.dart';
|
|
|
|
|
import 'package:immich_mobile/infrastructure/repositories/user_metadata.repository.dart';
|
|
|
|
|
import 'package:isar/isar.dart';
|
|
|
|
|
|
|
|
|
|
class IsarUserRepository extends IsarDatabaseRepository {
|
|
|
|
|
@ -70,8 +72,16 @@ class DriftUserRepository extends DriftDatabaseRepository {
|
|
|
|
|
final Drift _db;
|
|
|
|
|
const DriftUserRepository(super.db) : _db = db;
|
|
|
|
|
|
|
|
|
|
Future<UserDto?> get(String id) =>
|
|
|
|
|
_db.managers.userEntity.filter((user) => user.id.equals(id)).getSingleOrNull().then((user) => user?.toDto());
|
|
|
|
|
Future<UserDto?> get(String id) async {
|
|
|
|
|
final user = await _db.managers.userEntity.filter((user) => user.id.equals(id)).getSingleOrNull();
|
|
|
|
|
|
|
|
|
|
if (user == null) return null;
|
|
|
|
|
|
|
|
|
|
final query = _db.userMetadataEntity.select()..where((e) => e.userId.equals(id));
|
|
|
|
|
final metadata = await query.map((row) => row.toDto()).get();
|
|
|
|
|
|
|
|
|
|
return user.toDto(metadata);
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<UserDto> upsert(UserDto user) async {
|
|
|
|
|
await _db.userEntity.insertOnConflictUpdate(
|
|
|
|
|
@ -87,10 +97,35 @@ class DriftUserRepository extends DriftDatabaseRepository {
|
|
|
|
|
);
|
|
|
|
|
return user;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<List<UserDto>> getAll() async {
|
|
|
|
|
final users = await _db.userEntity.select().get();
|
|
|
|
|
final List<UserDto> result = [];
|
|
|
|
|
|
|
|
|
|
for (final user in users) {
|
|
|
|
|
final query = _db.userMetadataEntity.select()..where((e) => e.userId.equals(user.id));
|
|
|
|
|
final metadata = await query.map((row) => row.toDto()).get();
|
|
|
|
|
result.add(user.toDto(metadata));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return result;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
extension on UserEntityData {
|
|
|
|
|
UserDto toDto() {
|
|
|
|
|
UserDto toDto([List<UserMetadata>? metadata]) {
|
|
|
|
|
AvatarColor avatarColor = AvatarColor.primary;
|
|
|
|
|
bool memoryEnabled = true;
|
|
|
|
|
|
|
|
|
|
if (metadata != null) {
|
|
|
|
|
for (final meta in metadata) {
|
|
|
|
|
if (meta.key == UserMetadataKey.preferences && meta.preferences != null) {
|
|
|
|
|
avatarColor = meta.preferences?.userAvatarColor ?? AvatarColor.primary;
|
|
|
|
|
memoryEnabled = meta.preferences?.memoriesEnabled ?? true;
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
return UserDto(
|
|
|
|
|
id: id,
|
|
|
|
|
email: email,
|
|
|
|
|
@ -99,6 +134,8 @@ extension on UserEntityData {
|
|
|
|
|
updatedAt: updatedAt,
|
|
|
|
|
profileChangedAt: profileChangedAt,
|
|
|
|
|
hasProfileImage: hasProfileImage,
|
|
|
|
|
avatarColor: avatarColor,
|
|
|
|
|
memoryEnabled: memoryEnabled,
|
|
|
|
|
);
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|