You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
98 lines
3.1 KiB
98 lines
3.1 KiB
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(), |
|
); |
|
} |
|
}
|
|
|