2025-08-06 10:49:29 -05:00
|
|
|
import 'package:drift/drift.dart';
|
|
|
|
|
import 'package:immich_mobile/constants/constants.dart';
|
2025-02-28 01:48:49 +05:30
|
|
|
import 'package:immich_mobile/domain/models/log.model.dart';
|
|
|
|
|
import 'package:immich_mobile/infrastructure/entities/log.entity.dart';
|
2025-08-06 10:49:29 -05:00
|
|
|
import 'package:immich_mobile/infrastructure/entities/log.entity.drift.dart';
|
|
|
|
|
import 'package:immich_mobile/infrastructure/repositories/logger_db.repository.dart';
|
2025-02-28 01:48:49 +05:30
|
|
|
|
2025-08-06 10:49:29 -05:00
|
|
|
class LogRepository {
|
|
|
|
|
final DriftLogger _db;
|
|
|
|
|
const LogRepository(this._db);
|
2025-02-28 01:48:49 +05:30
|
|
|
|
|
|
|
|
Future<bool> deleteAll() async {
|
2025-08-06 10:49:29 -05:00
|
|
|
await _db.logMessageEntity.deleteAll();
|
2025-02-28 01:48:49 +05:30
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-06 10:49:29 -05:00
|
|
|
Future<List<LogMessage>> getAll({int limit = 250}) async {
|
|
|
|
|
final query = _db.logMessageEntity.select()
|
|
|
|
|
..orderBy([(row) => OrderingTerm.desc(row.createdAt)])
|
|
|
|
|
..limit(limit);
|
|
|
|
|
|
|
|
|
|
return query.map((log) => log.toDto()).get();
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
LogMessageEntityCompanion _toEntityCompanion(LogMessage log) {
|
|
|
|
|
return LogMessageEntityCompanion.insert(
|
|
|
|
|
message: log.message,
|
|
|
|
|
level: log.level,
|
|
|
|
|
createdAt: log.createdAt,
|
|
|
|
|
logger: Value(log.logger),
|
|
|
|
|
details: Value(log.error),
|
|
|
|
|
stack: Value(log.stack),
|
|
|
|
|
);
|
2025-02-28 01:48:49 +05:30
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<bool> insert(LogMessage log) async {
|
2025-08-06 10:49:29 -05:00
|
|
|
final logEntity = _toEntityCompanion(log);
|
2025-07-27 11:18:32 -05:00
|
|
|
|
|
|
|
|
try {
|
2025-08-06 10:49:29 -05:00
|
|
|
await _db.logMessageEntity.insertOne(logEntity);
|
2025-07-27 11:18:32 -05:00
|
|
|
} catch (e) {
|
|
|
|
|
return false;
|
|
|
|
|
}
|
|
|
|
|
|
2025-02-28 01:48:49 +05:30
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<bool> insertAll(Iterable<LogMessage> logs) async {
|
2025-08-06 10:49:29 -05:00
|
|
|
final logEntities = logs.map(_toEntityCompanion).toList();
|
|
|
|
|
await _db.logMessageEntity.insertAll(logEntities);
|
|
|
|
|
|
2025-02-28 01:48:49 +05:30
|
|
|
return true;
|
|
|
|
|
}
|
|
|
|
|
|
2025-08-06 10:49:29 -05:00
|
|
|
Future<void> deleteByLogger(String logger) async {
|
|
|
|
|
await _db.logMessageEntity.deleteWhere((row) => row.logger.equals(logger));
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Stream<List<LogMessage>> watchMessages(String logger) {
|
|
|
|
|
final query = _db.logMessageEntity.select()
|
|
|
|
|
..orderBy([(row) => OrderingTerm.desc(row.createdAt)])
|
|
|
|
|
..where((row) => row.logger.equals(logger));
|
|
|
|
|
|
|
|
|
|
return query.watch().map((rows) => rows.map((row) => row.toDto()).toList());
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
Future<void> truncate({int limit = kLogTruncateLimit}) async {
|
|
|
|
|
final totalCount = await _db.managers.logMessageEntity.count();
|
|
|
|
|
if (totalCount > limit) {
|
|
|
|
|
final rowsToDelete = totalCount - limit;
|
|
|
|
|
|
|
|
|
|
await _db.managers.logMessageEntity.orderBy((o) => o.createdAt.asc()).limit(rowsToDelete).delete();
|
|
|
|
|
}
|
2025-02-28 01:48:49 +05:30
|
|
|
}
|
|
|
|
|
}
|