同步dbretry接口

This commit is contained in:
Happi (哈比)
2026-03-10 12:49:49 +08:00
parent 1c996075e3
commit 5eaff7ede3
3 changed files with 89 additions and 0 deletions

View File

@@ -1,6 +1,7 @@
import 'package:drift/drift.dart';
import 'package:im_app/data/local/drift/app_database.dart';
import 'package:im_app/domain/entities/api_retry.dart';
import 'package:im_app/domain/enums/retry_status.dart';
import 'package:im_app/domain/repositories/api_retry_repository.dart';
import 'package:storage_sdk/storage_sdk.dart';
@@ -44,6 +45,23 @@ class ApiRetryRepositoryImpl implements ApiRetryRepository {
addIndex: Value(apiRetry.addIndex),
);
// ── rawQuery row → Domain ─────────────────────────────────────────────────
ApiRetry _fromRow(QueryRow row) => ApiRetry(
id: row.read<int>('id'),
uid: row.readNullable<int>('uid'),
apiType: row.read<String>('api_type'),
endPoint: row.read<String>('end_point'),
requestData: row.read<String>('request_data'),
synced: row.readNullable<int>('synced'),
callbackFun: row.read<String>('callback_fun'),
expired: row.readNullable<int>('expired'),
replace: row.readNullable<int>('replace'),
expireTime: row.readNullable<int>('expire_time'),
createTime: row.readNullable<int>('create_time'),
addIndex: row.readNullable<int>('add_index'),
);
// ── 监听 ─────────────────────────────────────────────────────────────────
@override
@@ -76,6 +94,14 @@ class ApiRetryRepositoryImpl implements ApiRetryRepository {
return row != null ? _toEntity(row) : null;
}
@override
Future<ApiRetry?> getByUid(int uid) async {
final row = await _storage.selectFirst<DriftApiRetry, $ApiRetriesTable>(
(t) => t.uid.equals(uid),
);
return row != null ? _toEntity(row) : null;
}
@override
Future<List<ApiRetry>> getPending() async {
final rows = await _storage.selectWhere<DriftApiRetry, $ApiRetriesTable>(
@@ -92,6 +118,24 @@ class ApiRetryRepositoryImpl implements ApiRetryRepository {
return rows.map(_toEntity).toList();
}
@override
Future<List<ApiRetry>> getByEndPointPending(String endPoint) async {
final rows = await _storage.rawQuery(
'SELECT * FROM api_retry WHERE end_point = ? AND synced = 0 ORDER BY create_time ASC',
[endPoint],
);
return rows.map(_fromRow).toList();
}
@override
Future<List<ApiRetry>> getBySynced(int synced) async {
final rows = await _storage.rawQuery(
'SELECT * FROM api_retry WHERE synced = ? ORDER BY create_time ASC',
[synced],
);
return rows.map(_fromRow).toList();
}
// ── 写入 ─────────────────────────────────────────────────────────────────
@override
@@ -145,6 +189,17 @@ class ApiRetryRepositoryImpl implements ApiRetryRepository {
);
}
@override
Future<void> deleteFinished() async {
await _storage
.rawQuery('DELETE FROM api_retry WHERE synced IN (?, ?, ?, ?)', [
RetryStatus.success.value,
RetryStatus.failed.value,
RetryStatus.cancel.value,
RetryStatus.replace.value,
]);
}
@override
Future<void> deleteSynced() async {
await _storage.deleteWhere<DriftApiRetry, $ApiRetriesTable>(