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