Browse Source

feature : 企业创建id,最后修改id

dev
徐振升 1 week ago
parent
commit
08463ac679
  1. 3
      lib/app/core/models/sync_status.dart
  2. 23
      lib/app/features/enterprise/data/datasources/enterprise_remote_data_source.dart
  3. 66
      lib/app/features/enterprise/data/model/enterprise_dto.dart
  4. 10
      lib/app/features/enterprise/data/model/enterprise_model.dart
  5. 9
      lib/app/features/enterprise/domain/entities/enterprise.dart
  6. 10
      lib/app/features/enterprise/domain/usecases/add_enterprise_usecase.dart
  7. 9
      lib/app/features/enterprise/domain/usecases/editor_enterprise_usecase.dart
  8. 11
      lib/app/features/enterprise/presentation/bindings/enterprise_form_binding.dart

3
lib/app/core/models/sync_status.dart

@ -62,5 +62,6 @@ extension SyncStatusExtension on SyncStatus {
abstract class SyncableEntity {
String get id;
SyncStatus get syncStatus;
DateTime get lastModifiedTime; //
DateTime get lastModifiedTime;
String get lastModifierId;
}

23
lib/app/features/enterprise/data/datasources/enterprise_remote_data_source.dart

@ -5,16 +5,17 @@ import 'package:problem_check_system/app/features/enterprise/data/model/enterpri
///
/// API
abstract class EnterpriseRemoteDataSource {
/// API
///
/// ( DioException)
///
Future<void> createEnterprise(EnterpriseModel enterprise);
/// API
///
Future<void> updateEnterprise(EnterpriseModel enterprise);
/// API
///
Future<void> deleteEnterprise(String enterpriseId);
///
Future<List<EnterpriseDto>> getEnterprises();
}
class EnterpriseRemoteDataSourceImpl implements EnterpriseRemoteDataSource {
@ -53,4 +54,16 @@ class EnterpriseRemoteDataSourceImpl implements EnterpriseRemoteDataSource {
rethrow;
}
}
@override
Future<List<EnterpriseDto>> getEnterprises() async {
try {
final response = await http.get(enterprisesEndpoint);
return (response.data as List)
.map((json) => EnterpriseDto.fromJson(json))
.toList();
} catch (e) {
rethrow;
}
}
}

66
lib/app/features/enterprise/data/model/enterprise_dto.dart

@ -6,17 +6,27 @@ import 'package:problem_check_system/app/features/enterprise/data/model/enterpri
/// API
/// API JSON
class EnterpriseDto {
final String id;
final DateTime creationTime;
final String creatorId;
final DateTime lastModificationTime;
final String lastModifierId;
final String companyName;
final String companyType;
final String? companyScope;
final String? mainPrincipalName;
final String? mainPrincipalPhone;
final String? securityPrincipalName; // API
final String? securityPrincipalPhone; // API
final String? securityPrincipalName;
final String? securityPrincipalPhone;
final String? companyAddress;
final String? detail; // majorHazardsDescription
final String? detail;
const EnterpriseDto({
required this.id,
required this.creationTime,
required this.creatorId,
required this.lastModificationTime,
required this.lastModifierId,
required this.companyName,
required this.companyType,
this.companyScope,
@ -33,6 +43,11 @@ class EnterpriseDto {
///
factory EnterpriseDto.fromModel(EnterpriseModel model) {
return EnterpriseDto(
id: model.id,
creationTime: model.creationTime,
creatorId: "", //todo
lastModificationTime: model.lastModifiedTime,
lastModifierId: "", // todo需要在企业模型中添修改用户id
companyName: model.name,
companyType: model.type,
companyScope: model.scale,
@ -43,9 +58,48 @@ class EnterpriseDto {
);
}
/// DTO JSON (Map)
// =======================================================================
//
// =======================================================================
/// [] fromJson JSON Map EnterpriseDto
///
/// JSON Dart
factory EnterpriseDto.fromJson(Map<String, dynamic> json) {
return EnterpriseDto(
//
id: json['id'] as String,
creationTime: DateTime.parse(json['creationTime'] as String),
creatorId: json['creatorId'] as String,
lastModificationTime: DateTime.parse(
json['lastModificationTime'] as String,
),
lastModifierId: json['lastModifierId'] as String,
companyName: json['companyName'] as String,
companyType: json['companyType'] as String,
//
companyScope: json['companyScope'] as String?,
mainPrincipalName: json['mainPrincipalName'] as String?,
mainPrincipalPhone: json['mainPrincipalPhone'] as String?,
securityPrincipalName: json['securityPrincipalName'] as String?,
securityPrincipalPhone: json['securityPrincipalPhone'] as String?,
companyAddress: json['companyAddress'] as String?,
detail: json['detail'] as String?,
);
}
/// [] toJson EnterpriseDto JSON Map
///
/// JSON
Map<String, dynamic> toJson() {
final originalMap = {
final jsonMap = {
'id': id,
// 使 toIso8601String() DateTime
'creationTime': creationTime.toIso8601String(),
'creatorId': creatorId,
'lastModificationTime': lastModificationTime.toIso8601String(),
'lastModifierId': lastModifierId,
'companyName': companyName,
'companyType': companyType,
'companyScope': companyScope,
@ -56,6 +110,6 @@ class EnterpriseDto {
'companyAddress': companyAddress,
'detail': detail,
};
return originalMap.withoutNullOrEmptyValues;
return jsonMap.withoutNullOrEmptyValues;
}
}

10
lib/app/features/enterprise/data/model/enterprise_model.dart

@ -10,7 +10,9 @@ class EnterpriseModel extends Enterprise {
required super.id,
required super.syncStatus,
required super.lastModifiedTime,
required super.lastModifierId,
required super.creationTime,
required super.creatorId,
required super.name,
required super.type,
super.address,
@ -29,7 +31,9 @@ class EnterpriseModel extends Enterprise {
id: entity.id,
syncStatus: entity.syncStatus,
lastModifiedTime: entity.lastModifiedTime,
lastModifierId: entity.lastModifierId,
creationTime: entity.creationTime,
creatorId: entity.creatorId,
name: entity.name,
type: entity.type,
address: entity.address,
@ -54,10 +58,12 @@ class EnterpriseModel extends Enterprise {
map['lastModifiedTime'] as int,
isUtc: true,
),
lastModifierId: map['lastModifierId'] as String,
creationTime: DateTime.fromMillisecondsSinceEpoch(
map['creationTime'] as int,
isUtc: true,
),
creatorId: map['creatorId'] as String,
name: map['name'] as String,
type: map['type'] as String,
address: map['address'] as String?,
@ -79,7 +85,9 @@ class EnterpriseModel extends Enterprise {
'syncStatus': syncStatus.index,
// DateTime UTC
'lastModifiedTime': lastModifiedTime.toUtc().millisecondsSinceEpoch,
'lastModifierId': lastModifierId,
'creationTime': creationTime.toUtc().millisecondsSinceEpoch,
'creatorId': creatorId,
'name': name,
'type': type,
'address': address,
@ -97,7 +105,9 @@ class EnterpriseModel extends Enterprise {
id: id,
syncStatus: syncStatus,
lastModifiedTime: lastModifiedTime,
lastModifierId: lastModifierId,
creationTime: creationTime,
creatorId: creatorId,
name: name,
type: type,
address: address,

9
lib/app/features/enterprise/domain/entities/enterprise.dart

@ -10,6 +10,8 @@ class Enterprise extends Equatable implements SyncableEntity {
final SyncStatus syncStatus;
@override
final DateTime lastModifiedTime;
@override
final String lastModifierId;
final String name;
final String type;
final String? address;
@ -17,6 +19,7 @@ class Enterprise extends Equatable implements SyncableEntity {
final String? contactPerson;
final String? contactPhone;
final String? majorHazardsDescription;
final String creatorId;
final DateTime creationTime;
const Enterprise({
@ -29,7 +32,9 @@ class Enterprise extends Equatable implements SyncableEntity {
this.contactPhone,
this.majorHazardsDescription,
required this.lastModifiedTime,
required this.lastModifierId,
required this.creationTime,
required this.creatorId,
required this.syncStatus,
});
@ -37,6 +42,7 @@ class Enterprise extends Equatable implements SyncableEntity {
String? id,
SyncStatus? syncStatus,
DateTime? lastModifiedTime,
String? lastModifierId,
String? name,
String? type,
String? address,
@ -45,11 +51,13 @@ class Enterprise extends Equatable implements SyncableEntity {
String? contactPhone,
String? majorHazardsDescription,
DateTime? creationTime,
String? creatorId,
}) {
return Enterprise(
id: id ?? this.id,
syncStatus: syncStatus ?? this.syncStatus,
lastModifiedTime: lastModifiedTime ?? this.lastModifiedTime,
lastModifierId: lastModifierId ?? this.lastModifierId,
name: name ?? this.name,
type: type ?? this.type,
address: address ?? this.address,
@ -59,6 +67,7 @@ class Enterprise extends Equatable implements SyncableEntity {
majorHazardsDescription:
majorHazardsDescription ?? this.majorHazardsDescription,
creationTime: creationTime ?? this.creationTime,
creatorId: creatorId ?? this.creatorId,
);
}

10
lib/app/features/enterprise/domain/usecases/add_enterprise_usecase.dart

@ -1,13 +1,19 @@
import 'package:problem_check_system/app/core/models/sync_status.dart';
import 'package:problem_check_system/app/core/repositories/auth_repository.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise.dart';
import 'package:problem_check_system/app/features/enterprise/domain/repositories/enterprise_repository.dart';
import 'package:uuid/uuid.dart';
class AddEnterpriseUsecase {
final EnterpriseRepository repository;
final AuthRepository authRepository;
final Uuid uuid;
AddEnterpriseUsecase({required this.repository, required this.uuid});
AddEnterpriseUsecase({
required this.repository,
required this.authRepository,
required this.uuid,
});
Future<void> call({
required String name,
@ -28,7 +34,9 @@ class AddEnterpriseUsecase {
contactPhone: contactPhone,
majorHazardsDescription: majorHazardsDescription,
lastModifiedTime: DateTime.now(),
lastModifierId: authRepository.getUserId()!,
creationTime: DateTime.now(),
creatorId: authRepository.getUserId()!,
syncStatus: SyncStatus.pendingCreate,
);
await repository.addEnterprise(enterprise);

9
lib/app/features/enterprise/domain/usecases/editor_enterprise_usecase.dart

@ -1,11 +1,15 @@
import 'package:problem_check_system/app/core/models/sync_status.dart';
import 'package:problem_check_system/app/core/repositories/auth_repository.dart';
import 'package:problem_check_system/app/features/enterprise/domain/entities/enterprise.dart';
import 'package:problem_check_system/app/features/enterprise/domain/repositories/enterprise_repository.dart';
class EditEnterpriseUsecase {
final EnterpriseRepository repository;
EditEnterpriseUsecase({required this.repository});
final AuthRepository authRepository;
EditEnterpriseUsecase({
required this.repository,
required this.authRepository,
});
/// [] Usecase
/// Enterprise
@ -13,6 +17,7 @@ class EditEnterpriseUsecase {
// 1.
final enterpriseToSave = updatedEnterprise.copyWith(
lastModifiedTime: DateTime.now(),
lastModifierId: authRepository.getUserId(),
// 2.
//
syncStatus: updatedEnterprise.syncStatus == SyncStatus.pendingCreate

11
lib/app/features/enterprise/presentation/bindings/enterprise_form_binding.dart

@ -25,10 +25,17 @@ class EnterpriseFormBinding extends Bindings {
)),
);
Get.lazyPut<AddEnterpriseUsecase>(
() => AddEnterpriseUsecase(repository: Get.find(), uuid: Get.find()),
() => AddEnterpriseUsecase(
repository: Get.find(),
authRepository: Get.find(),
uuid: Get.find(),
),
);
Get.lazyPut<EditEnterpriseUsecase>(
() => EditEnterpriseUsecase(repository: Get.find()),
() => EditEnterpriseUsecase(
repository: Get.find(),
authRepository: Get.find(),
),
);
// 2. null Controller

Loading…
Cancel
Save