refactor repositories
This commit is contained in:
@@ -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(
|
||||
|
||||
Reference in New Issue
Block a user