refactor repositories

This commit is contained in:
shenlong-tanwen
2024-09-21 20:04:05 +05:30
parent d6495f014d
commit e810512285
23 changed files with 142 additions and 127 deletions
@@ -4,19 +4,16 @@ import 'package:drift/drift.dart';
import 'package:immich_mobile/domain/entities/asset.entity.drift.dart';
import 'package:immich_mobile/domain/interfaces/asset.interface.dart';
import 'package:immich_mobile/domain/models/asset.model.dart';
import 'package:immich_mobile/domain/models/render_list.model.dart';
import 'package:immich_mobile/domain/models/render_list_element.model.dart';
import 'package:immich_mobile/domain/repositories/database.repository.dart';
import 'package:immich_mobile/utils/extensions/drift.extension.dart';
import 'package:immich_mobile/utils/mixins/log.mixin.dart';
class RemoteAssetDriftRepository with LogMixin implements IAssetRepository {
class AssetDriftRepository with LogMixin implements IAssetRepository {
final DriftDatabaseRepository _db;
const RemoteAssetDriftRepository(this._db);
const AssetDriftRepository(this._db);
@override
Future<bool> addAll(Iterable<Asset> assets) async {
Future<bool> upsertAll(Iterable<Asset> assets) async {
try {
await _db.batch((batch) => batch.insertAllOnConflictUpdate(
_db.asset,
@@ -31,7 +28,7 @@ class RemoteAssetDriftRepository with LogMixin implements IAssetRepository {
}
@override
Future<bool> clearAll() async {
Future<bool> deleteAll() async {
try {
await _db.asset.deleteAll();
return true;
@@ -42,7 +39,7 @@ class RemoteAssetDriftRepository with LogMixin implements IAssetRepository {
}
@override
Future<List<Asset>> fetchAssets({int? offset, int? limit}) async {
Future<List<Asset>> getAll({int? offset, int? limit}) async {
final query = _db.asset.select()
..orderBy([(asset) => OrderingTerm.desc(asset.createdTime)]);
@@ -54,40 +51,7 @@ class RemoteAssetDriftRepository with LogMixin implements IAssetRepository {
}
@override
Stream<RenderList> watchRenderList() {
final assetCountExp = _db.asset.id.count();
final createdTimeExp = _db.asset.createdTime;
final monthYearExp = _db.asset.createdTime.strftime('%m-%Y');
final query = _db.asset.selectOnly()
..addColumns([assetCountExp, createdTimeExp])
..groupBy([monthYearExp])
..orderBy([OrderingTerm.desc(createdTimeExp)]);
int lastAssetOffset = 0;
return query
.expand((row) {
final createdTime = row.read<DateTime>(createdTimeExp)!;
final assetCount = row.read(assetCountExp)!;
final assetOffset = lastAssetOffset;
lastAssetOffset += assetCount;
return [
RenderListMonthHeaderElement(date: createdTime),
RenderListAssetElement(
date: createdTime,
assetCount: assetCount,
assetOffset: assetOffset,
),
];
})
.watch()
.map((elements) => RenderList(elements: elements));
}
@override
Future<List<Asset>> fetchLocalAssetsForIds(List<String> localIds) async {
Future<List<Asset>> getForLocalIds(List<String> localIds) async {
final query = _db.asset.select()
..where((row) => row.localId.isIn(localIds))
..orderBy([(asset) => OrderingTerm.asc(asset.localId)]);
@@ -96,7 +60,7 @@ class RemoteAssetDriftRepository with LogMixin implements IAssetRepository {
}
@override
Future<List<Asset>> fetchRemoteAssetsForIds(List<String> remoteIds) async {
Future<List<Asset>> getForRemoteIds(List<String> remoteIds) async {
final query = _db.asset.select()
..where((row) => row.remoteId.isIn(remoteIds))
..orderBy([(asset) => OrderingTerm.asc(asset.remoteId)]);
@@ -105,7 +69,7 @@ class RemoteAssetDriftRepository with LogMixin implements IAssetRepository {
}
@override
FutureOr<void> deleteAssetsForIds(List<int> ids) async {
FutureOr<void> deleteIds(List<int> ids) async {
await _db.asset.deleteWhere((row) => row.id.isIn(ids));
}
}
@@ -115,7 +79,7 @@ AssetCompanion _toEntity(Asset asset) {
localId: Value(asset.localId),
remoteId: Value(asset.remoteId),
name: asset.name,
checksum: asset.checksum,
hash: asset.hash,
height: Value(asset.height),
width: Value(asset.width),
type: asset.type,
@@ -133,7 +97,7 @@ Asset _toModel(AssetData asset) {
remoteId: asset.remoteId,
name: asset.name,
type: asset.type,
checksum: asset.checksum,
hash: asset.hash,
createdTime: asset.createdTime,
modifiedTime: asset.modifiedTime,
height: asset.height,
@@ -13,12 +13,12 @@ class LogDriftRepository implements ILogRepository {
const LogDriftRepository(this._db);
@override
Future<List<LogMessage>> fetchAll() async {
Future<List<LogMessage>> getAll() async {
return await _db.managers.logs.map(_toModel).get();
}
@override
Future<void> truncateLogs({int limit = 250}) async {
Future<void> truncate({int limit = 250}) async {
final totalCount = await _db.managers.logs.count();
if (totalCount > limit) {
final rowsToDelete = totalCount - limit;
@@ -30,7 +30,7 @@ class LogDriftRepository implements ILogRepository {
}
@override
FutureOr<bool> add(LogMessage log) async {
FutureOr<bool> create(LogMessage log) async {
try {
await _db.into(_db.logs).insert(LogsCompanion.insert(
content: log.content,
@@ -48,7 +48,7 @@ class LogDriftRepository implements ILogRepository {
}
@override
FutureOr<bool> addAll(List<LogMessage> logs) async {
FutureOr<bool> createAll(List<LogMessage> logs) async {
try {
await _db.batch((b) {
b.insertAll(
@@ -71,7 +71,7 @@ class LogDriftRepository implements ILogRepository {
}
@override
FutureOr<bool> clear() async {
FutureOr<bool> deleteAll() async {
try {
await _db.managers.logs.delete();
return true;
@@ -0,0 +1,46 @@
import 'package:drift/drift.dart';
import 'package:immich_mobile/domain/interfaces/renderlist.interface.dart';
import 'package:immich_mobile/domain/models/render_list.model.dart';
import 'package:immich_mobile/domain/models/render_list_element.model.dart';
import 'package:immich_mobile/domain/repositories/database.repository.dart';
import 'package:immich_mobile/utils/extensions/drift.extension.dart';
import 'package:immich_mobile/utils/mixins/log.mixin.dart';
class RenderListDriftRepository with LogMixin implements IRenderListRepository {
final DriftDatabaseRepository _db;
const RenderListDriftRepository(this._db);
@override
Stream<RenderList> watchAll() {
final assetCountExp = _db.asset.id.count();
final createdTimeExp = _db.asset.createdTime;
final monthYearExp = _db.asset.createdTime.strftime('%m-%Y');
final query = _db.asset.selectOnly()
..addColumns([assetCountExp, createdTimeExp])
..groupBy([monthYearExp])
..orderBy([OrderingTerm.desc(createdTimeExp)]);
int lastAssetOffset = 0;
return query
.expand((row) {
final createdTime = row.read<DateTime>(createdTimeExp)!;
final assetCount = row.read(assetCountExp)!;
final assetOffset = lastAssetOffset;
lastAssetOffset += assetCount;
return [
RenderListMonthHeaderElement(date: createdTime),
RenderListAssetElement(
date: createdTime,
assetCount: assetCount,
assetOffset: assetOffset,
),
];
})
.watch()
.map((elements) => RenderList(elements: elements));
}
}
@@ -30,7 +30,7 @@ class StoreDriftRepository with LogMixin implements IStoreRepository {
}
@override
FutureOr<bool> set<T, U>(StoreKey<T, U> key, T value) async {
FutureOr<bool> upsert<T, U>(StoreKey<T, U> key, T value) async {
try {
final storeValue = key.converter.toPrimitive(value);
final intValue = (key.type == int) ? storeValue as int : null;
@@ -61,7 +61,7 @@ class StoreDriftRepository with LogMixin implements IStoreRepository {
}
@override
FutureOr<void> clearStore() async {
FutureOr<void> deleteAll() async {
await _db.managers.store.delete();
}
@@ -13,7 +13,7 @@ class UserDriftRepository with LogMixin implements IUserRepository {
const UserDriftRepository(this._db);
@override
FutureOr<User?> fetch(String userId) async {
FutureOr<User?> getForId(String userId) async {
return await _db.managers.user
.filter((f) => f.id.equals(userId))
.map(_toModel)
@@ -21,7 +21,7 @@ class UserDriftRepository with LogMixin implements IUserRepository {
}
@override
FutureOr<bool> add(User user) async {
FutureOr<bool> upsert(User user) async {
try {
await _db.into(_db.user).insertOnConflictUpdate(
UserCompanion.insert(