11 changed files with 470 additions and 347 deletions
@ -1,10 +0,0 @@
|
||||
enum Operation { |
||||
/// 创建 |
||||
create, |
||||
|
||||
/// 修改 |
||||
update, |
||||
|
||||
/// 删除 |
||||
delete, |
||||
} |
@ -0,0 +1,98 @@
|
||||
import 'package:problem_check_system/data/models/image_metadata_model.dart'; |
||||
import 'package:problem_check_system/data/models/problem_model.dart'; |
||||
import 'package:uuid/uuid.dart'; |
||||
|
||||
enum ProblemSyncStatus { |
||||
/// 未跟踪 - 需要被移除的记录(如本地删除但从未同步过) |
||||
untracked, |
||||
|
||||
/// 已同步 - 与服务器完全一致(类似git的unmodified) |
||||
synced, |
||||
|
||||
/// 待创建 - 新问题,需要上传到服务器(类似git的untracked → staged) |
||||
pendingCreate, |
||||
|
||||
/// 待更新 - 已修改的问题,需要更新到服务器(类似git的modified → staged) |
||||
pendingUpdate, |
||||
|
||||
/// 待删除 - 已标记删除,需要从服务器删除(类似git的deleted → staged) |
||||
pendingDelete, |
||||
} |
||||
|
||||
/// 问题状态管理器 - 类似 git add/git commit |
||||
class ProblemStateManager { |
||||
/// 静态对象uuid |
||||
static final Uuid _uuid = Uuid(); |
||||
|
||||
/// 创建新问题(类似创建新文件) |
||||
static Problem createNewProblem({ |
||||
required String description, |
||||
required String location, |
||||
required List<ImageMetadata> imageUrls, |
||||
}) { |
||||
return Problem( |
||||
id: _uuid.v4(), |
||||
description: description, |
||||
location: location, |
||||
imageUrls: imageUrls, |
||||
creationTime: DateTime.now(), |
||||
lastModifiedTime: DateTime.now(), |
||||
syncStatus: ProblemSyncStatus.pendingCreate, |
||||
); |
||||
} |
||||
|
||||
/// 修改问题内容(类似编辑文件) |
||||
static Problem modifyProblem(Problem problem) { |
||||
final newStatus = problem.syncStatus == ProblemSyncStatus.synced |
||||
? ProblemSyncStatus |
||||
.pendingUpdate // 已同步的改为待更新 |
||||
: problem.syncStatus; // 保持原有待处理状态 |
||||
|
||||
return problem.copyWith( |
||||
syncStatus: newStatus, |
||||
lastModifiedTime: DateTime.now(), |
||||
); |
||||
} |
||||
|
||||
/// 标记问题为删除 |
||||
static Problem markForDeletion(Problem problem) { |
||||
switch (problem.syncStatus) { |
||||
case ProblemSyncStatus.pendingCreate: |
||||
// 待创建的问题 → 未跟踪(直接移除) |
||||
return problem.copyWith( |
||||
syncStatus: ProblemSyncStatus.untracked, |
||||
lastModifiedTime: DateTime.now(), |
||||
); |
||||
case ProblemSyncStatus.synced: |
||||
case ProblemSyncStatus.pendingUpdate: |
||||
// 已同步或待更新的问题 → 待删除(需要服务器操作) |
||||
return problem.copyWith( |
||||
syncStatus: ProblemSyncStatus.pendingDelete, |
||||
lastModifiedTime: DateTime.now(), |
||||
); |
||||
case ProblemSyncStatus.untracked: |
||||
case ProblemSyncStatus.pendingDelete: |
||||
// 已经是删除相关状态,无需变化 |
||||
return problem; |
||||
} |
||||
} |
||||
|
||||
/// 撤销删除(类似 git reset) |
||||
static Problem undoDeletion(Problem problem) { |
||||
if (problem.syncStatus == ProblemSyncStatus.pendingDelete) { |
||||
return problem.copyWith( |
||||
syncStatus: ProblemSyncStatus.pendingUpdate, |
||||
lastModifiedTime: DateTime.now(), |
||||
); |
||||
} |
||||
return problem; |
||||
} |
||||
|
||||
/// 同步成功后的状态更新(类似 git commit 成功) |
||||
static Problem markAsSynced(Problem problem) { |
||||
return problem.copyWith( |
||||
syncStatus: ProblemSyncStatus.synced, |
||||
lastModifiedTime: DateTime.now(), |
||||
); |
||||
} |
||||
} |
@ -1,7 +0,0 @@
|
||||
enum SyncStatus { |
||||
/// 已同步,本地无修改 |
||||
synced, |
||||
|
||||
/// 未同步到服务器 |
||||
notSynced, |
||||
} |
Loading…
Reference in new issue