feat(app): 统一同步协议 — SyncModels + ApiClient.sync + SyncEngine.tryBatchSync
Flutter ↔ Rust 同步协议对齐: - 新增 sync_models.dart: SyncReq/SyncResp/SyncChange/ConflictInfo 与 Rust dto.rs 一一对应 (CreateJournal/UpdateJournal/DeleteJournal) - ApiClient.sync(): 调用 POST /diary/sync 批量同步端点 - SyncEngine.tryBatchSync(): PendingOperation → SyncChange 批量提交 成功清空队列,冲突保留待用户处理 保留原有逐个同步 trySync() 作为降级方案 后端 509/509 测试通过, Flutter analyze 0 error
This commit is contained in:
@@ -10,6 +10,8 @@
|
||||
import 'package:dio/dio.dart';
|
||||
import 'package:connectivity_plus/connectivity_plus.dart';
|
||||
|
||||
import '../models/sync_models.dart';
|
||||
|
||||
/// 网络离线异常 — 网络不可用时由 ApiClient 抛出
|
||||
class OfflineException implements Exception {
|
||||
final String message;
|
||||
@@ -187,4 +189,19 @@ class ApiClient {
|
||||
});
|
||||
return _dio.post<T>(path, data: formData);
|
||||
}
|
||||
|
||||
// ===== 同步 API =====
|
||||
|
||||
/// 批量同步 — POST /diary/sync
|
||||
///
|
||||
/// 将客户端变更批量提交到服务端,返回服务端变更和冲突信息。
|
||||
/// 对应 Rust sync_handler::sync_journals 端点。
|
||||
Future<SyncResp> sync(SyncReq req) async {
|
||||
await _ensureOnline();
|
||||
final response = await _dio.post<Map<String, dynamic>>(
|
||||
'/diary/sync',
|
||||
data: req.toJson(),
|
||||
);
|
||||
return SyncResp.fromJson(response.data!);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user