/// Project Submission Model /// /// Data model for project submission from API responses with Hive caching. /// Based on API response from building_material.building_material.api.project.get_list library; import 'package:hive_ce/hive.dart'; import 'package:worker/core/constants/storage_constants.dart'; import 'package:worker/features/projects/domain/entities/project_submission.dart'; part 'project_submission_model.g.dart'; /// Project Submission Model - Type ID: 14 @HiveType(typeId: HiveTypeIds.projectSubmissionModel) class ProjectSubmissionModel extends HiveObject { /// Unique submission identifier (API: name) @HiveField(0) final String submissionId; /// Project name/title (API: designed_area) @HiveField(1) final String designedArea; /// Design area value in square meters (API: design_area) @HiveField(2) final double designArea; /// Submission/request date (API: request_date) @HiveField(3) final DateTime requestDate; /// Status label - Vietnamese (API: status) @HiveField(4) final String status; /// Rejection reason if rejected (API: reason_for_rejection) @HiveField(5) final String? reasonForRejection; /// Status color indicator (API: status_color) @HiveField(6) final String statusColor; ProjectSubmissionModel({ required this.submissionId, required this.designedArea, required this.designArea, required this.requestDate, required this.status, this.reasonForRejection, required this.statusColor, }); /// Create from JSON (API response) factory ProjectSubmissionModel.fromJson(Map json) { return ProjectSubmissionModel( submissionId: json['name'] as String, designedArea: json['designed_area'] as String, designArea: (json['design_area'] as num).toDouble(), requestDate: DateTime.parse(json['request_date'] as String), status: json['status'] as String, reasonForRejection: json['reason_for_rejection'] as String?, statusColor: json['status_color'] as String, ); } /// Convert to JSON Map toJson() { return { 'name': submissionId, 'designed_area': designedArea, 'design_area': designArea, 'request_date': requestDate.toIso8601String(), 'status': status, 'reason_for_rejection': reasonForRejection, 'status_color': statusColor, }; } /// Convert to entity ProjectSubmission toEntity() { return ProjectSubmission( submissionId: submissionId, designedArea: designedArea, designArea: designArea, requestDate: requestDate, status: status, reasonForRejection: reasonForRejection, statusColor: statusColor, ); } /// Create from entity factory ProjectSubmissionModel.fromEntity(ProjectSubmission entity) { return ProjectSubmissionModel( submissionId: entity.submissionId, designedArea: entity.designedArea, designArea: entity.designArea, requestDate: entity.requestDate, status: entity.status, reasonForRejection: entity.reasonForRejection, statusColor: entity.statusColor, ); } }