Browse Source

refactor : 同步结果,数据差异重构

dev
徐振升 6 hours ago
parent
commit
7d54be4805
  1. 13
      lib/app/core/domain/entities/data_conflict.dart
  2. 6
      lib/app/core/domain/entities/sync_result.dart
  3. 8
      lib/app/features/enterprise/data/repositories_impl/enterprise_repository_impl.dart
  4. 16
      lib/app/features/enterprise/domain/entities/enterprise_conflict.dart
  5. 9
      lib/app/features/enterprise/domain/repositories/enterprise_repository.dart
  6. 3
      lib/app/features/enterprise/domain/usecases/sync_enterprises_usecase.dart
  7. 2
      lib/app/features/enterprise/presentation/controllers/enterprise_list_controller.dart

13
lib/app/core/domain/entities/data_conflict.dart

@ -0,0 +1,13 @@
import 'package:equatable/equatable.dart';
///
/// [T] ( Enterprise, ProblemEntity)
class DataConflict<T> extends Equatable {
final T localVersion;
final T serverVersion;
const DataConflict({required this.localVersion, required this.serverVersion});
@override
List<Object?> get props => [localVersion, serverVersion];
}

6
lib/app/features/enterprise/domain/entities/sync_result.dart → lib/app/core/domain/entities/sync_result.dart

@ -1,12 +1,12 @@
import 'package:equatable/equatable.dart'; import 'package:equatable/equatable.dart';
import 'enterprise_conflict.dart'; import 'package:problem_check_system/app/core/domain/entities/data_conflict.dart';
class SyncResult extends Equatable { class SyncResult<T> extends Equatable {
/// ///
final int newItemsFromServer; final int newItemsFromServer;
/// ///
final List<EnterpriseConflict> conflicts; final List<DataConflict<T>> conflicts;
const SyncResult({this.newItemsFromServer = 0, this.conflicts = const []}); const SyncResult({this.newItemsFromServer = 0, this.conflicts = const []});

8
lib/app/features/enterprise/data/repositories_impl/enterprise_repository_impl.dart

@ -5,9 +5,9 @@ import 'package:problem_check_system/app/features/enterprise/data/datasources/en
import 'package:problem_check_system/app/features/enterprise/data/model/enterprise_dto.dart'; import 'package:problem_check_system/app/features/enterprise/data/model/enterprise_dto.dart';
import 'package:problem_check_system/app/features/enterprise/data/model/enterprise_model.dart'; import 'package:problem_check_system/app/features/enterprise/data/model/enterprise_model.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise.dart'; import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_conflict.dart'; import 'package:problem_check_system/app/core/domain/entities/data_conflict.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_list_item.dart'; import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_list_item.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/sync_result.dart'; import 'package:problem_check_system/app/core/domain/entities/sync_result.dart';
import 'package:problem_check_system/app/features/enterprise/domain/repositories/enterprise_repository.dart'; import 'package:problem_check_system/app/features/enterprise/domain/repositories/enterprise_repository.dart';
import 'package:uuid/uuid.dart'; import 'package:uuid/uuid.dart';
@ -128,10 +128,10 @@ class EnterpriseRepositoryImpl implements EnterpriseRepository {
// [] // []
@override @override
Future<SyncResult> syncWithServer() async { Future<EnterpriseSyncResult> syncWithServer() async {
if (!networkStatusService.isOnline.value) { if (!networkStatusService.isOnline.value) {
// 线 // 线
return const SyncResult(); return const EnterpriseSyncResult();
} }
// 1. // 1.

16
lib/app/features/enterprise/domain/entities/enterprise_conflict.dart

@ -1,16 +0,0 @@
import 'package:equatable/equatable.dart';
import 'enterprise.dart'; // Enterprise
///
class EnterpriseConflict extends Equatable {
final Enterprise localVersion;
final Enterprise serverVersion;
const EnterpriseConflict({
required this.localVersion,
required this.serverVersion,
});
@override
List<Object?> get props => [localVersion, serverVersion];
}

9
lib/app/features/enterprise/domain/repositories/enterprise_repository.dart

@ -1,9 +1,12 @@
import 'package:problem_check_system/app/core/domain/entities/data_conflict.dart';
import 'package:problem_check_system/app/core/domain/entities/sync_status.dart'; import 'package:problem_check_system/app/core/domain/entities/sync_status.dart';
import 'package:problem_check_system/app/core/repositories/syncable_repository.dart'; import 'package:problem_check_system/app/core/repositories/syncable_repository.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_list_item.dart'; import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_list_item.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/sync_result.dart'; import 'package:problem_check_system/app/core/domain/entities/sync_result.dart';
import '../entities/enterprise.dart'; typedef EnterpriseSyncResult = SyncResult<Enterprise>;
typedef EnterpriseConflict = DataConflict<Enterprise>;
abstract class EnterpriseRepository implements SyncableRepository<Enterprise> { abstract class EnterpriseRepository implements SyncableRepository<Enterprise> {
/// ///
@ -26,7 +29,7 @@ abstract class EnterpriseRepository implements SyncableRepository<Enterprise> {
Future<void> updateEnterpriseSyncStatus(String id, SyncStatus synced); Future<void> updateEnterpriseSyncStatus(String id, SyncStatus synced);
// [] // []
Future<SyncResult> syncWithServer(); Future<EnterpriseSyncResult> syncWithServer();
// [] // []
Future<void> resolveConflictAndUpdate(Enterprise chosenEnterprise); Future<void> resolveConflictAndUpdate(Enterprise chosenEnterprise);
// //

3
lib/app/features/enterprise/domain/usecases/sync_enterprises_usecase.dart

@ -1,4 +1,3 @@
import '../entities/sync_result.dart';
import '../repositories/enterprise_repository.dart'; import '../repositories/enterprise_repository.dart';
class SyncEnterprisesUsecase { class SyncEnterprisesUsecase {
@ -6,7 +5,7 @@ class SyncEnterprisesUsecase {
SyncEnterprisesUsecase({required this.repository}); SyncEnterprisesUsecase({required this.repository});
Future<SyncResult> call() async { Future<EnterpriseSyncResult> call() async {
return repository.syncWithServer(); return repository.syncWithServer();
} }
} }

2
lib/app/features/enterprise/presentation/controllers/enterprise_list_controller.dart

@ -7,8 +7,8 @@ import 'package:problem_check_system/app/core/models/company_enum.dart';
import 'package:problem_check_system/app/core/models/form_mode.dart'; import 'package:problem_check_system/app/core/models/form_mode.dart';
import 'package:problem_check_system/app/core/routes/app_routes.dart'; import 'package:problem_check_system/app/core/routes/app_routes.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise.dart'; import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_conflict.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_list_item.dart'; import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise_list_item.dart';
import 'package:problem_check_system/app/features/enterprise/domain/repositories/enterprise_repository.dart';
import 'package:problem_check_system/app/features/enterprise/domain/usecases/get_enterprise_list_usecase.dart'; import 'package:problem_check_system/app/features/enterprise/domain/usecases/get_enterprise_list_usecase.dart';
import 'package:problem_check_system/app/features/enterprise/domain/usecases/resolve_conflict_usecase.dart'; import 'package:problem_check_system/app/features/enterprise/domain/usecases/resolve_conflict_usecase.dart';
import 'package:problem_check_system/app/features/enterprise/domain/usecases/sync_enterprises_usecase.dart'; import 'package:problem_check_system/app/features/enterprise/domain/usecases/sync_enterprises_usecase.dart';

Loading…
Cancel
Save