import 'package:immich_mobile/domain/interfaces/user.interface.dart'; import 'package:immich_mobile/domain/models/user.model.dart'; import 'package:immich_mobile/infrastructure/entities/user.entity.dart' as entity; import 'package:immich_mobile/infrastructure/repositories/db.repository.dart'; import 'package:isar/isar.dart'; class IsarUserRepository extends IsarDatabaseRepository implements IUserRepository { final Isar _db; const IsarUserRepository(super.db) : _db = db; @override Future delete(List ids) async { await transaction(() async { await _db.users.deleteAllById(ids); }); } @override Future deleteAll() async { await transaction(() async { await _db.users.clear(); }); } @override Future> getAll({SortUserBy? sortBy}) async { return (await _db.users .where() .optional( sortBy != null, (query) => switch (sortBy!) { SortUserBy.id => query.sortById(), }, ) .findAll()) .map((u) => u.toDto()) .toList(); } @override Future getByUserId(String id) async { return (await _db.users.getById(id))?.toDto(); } @override Future> getByUserIds(List ids) async { return (await _db.users.getAllById(ids)).map((u) => u?.toDto()).toList(); } @override Future insert(UserDto user) async { await transaction(() async { await _db.users.put(entity.User.fromDto(user)); }); return true; } @override Future update(UserDto user) async { await transaction(() async { await _db.users.put(entity.User.fromDto(user)); }); return user; } @override Future updateAll(List users) async { await transaction(() async { await _db.users.putAll(users.map(entity.User.fromDto).toList()); }); return true; } }