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.

63 lines
2.2 KiB

import 'package:get/get.dart';
import 'package:problem_check_system/data/models/problem_model.dart';
import 'package:problem_check_system/data/providers/connectivity_provider.dart';
import 'package:problem_check_system/data/providers/http_provider.dart';
import 'package:problem_check_system/data/providers/local_database.dart';
/// 问题仓库,负责处理问题数据的本地持久化。
/// 它封装了底层数据库操作,为业务逻辑层提供一个简洁的接口。
class ProblemRepository {
final LocalDatabase localDatabase;
final HttpProvider httpProvider;
final ConnectivityProvider connectivityProvider;
RxBool get isOnline => connectivityProvider.isOnline;
ProblemRepository({
required this.localDatabase,
required this.httpProvider,
required this.connectivityProvider,
});
/// 更新本地数据库中的一个问题。
/// 如果问题存在则更新,如果不存在则插入。
Future<void> updateProblem(Problem problem) async {
// 检查问题是否存在,通常通过ID判断
final existingProblem = await localDatabase.getProblemById(problem.id!);
if (existingProblem != null) {
// 问题已存在,执行更新操作
await localDatabase.updateProblem(problem);
} else {
// 问题不存在,执行插入操作
await localDatabase.insertProblem(problem);
}
}
/// 通用查询方法,根据可选的筛选条件获取问题列表。
/// - `startDate`/`endDate`:筛选创建时间范围。
/// - `uploadStatus`:筛选上传状态('已上传', '未上传', '全部')。
/// - `bindStatus`:筛选绑定状态('已绑定', '未绑定', '全部')。
Future getProblems({
DateTime? startDate,
DateTime? endDate,
String uploadStatus = '全部',
String bindStatus = '全部',
}) async {
return await localDatabase.getProblems(
startDate: startDate,
endDate: endDate,
uploadStatus: uploadStatus,
bindStatus: bindStatus,
);
}
Future<void> insertProblem(Problem problem) async {
await localDatabase.insertProblem(problem);
}
Future<void> deleteProblem(String id) async {
await localDatabase.deleteProblem(id);
}
}