Files
feature-next-arch/lib/features/v2/home/data/models/home_data_model.dart
2026-05-19 08:46:35 +08:00

120 lines
3.5 KiB
Dart

import 'package:maibu_satabot_v2/features/v2/home/domain/entities/home_entity.dart';
class HomeDataModel extends HomeEntity {
const HomeDataModel({
required super.plantName,
required super.realTimePower,
required super.todayGeneration,
required super.equivalentHours,
required super.pendingWorkOrders,
required super.weather,
required super.alarmCount,
required super.workOrderStats,
required super.powerTrendData,
required super.plantOverview,
});
factory HomeDataModel.fromJson(Map<String, dynamic> json) {
return HomeDataModel(
plantName: json['plantName'] as String,
realTimePower: (json['realTimePower'] as num).toDouble(),
todayGeneration: (json['todayGeneration'] as num).toDouble(),
equivalentHours: (json['equivalentHours'] as num).toDouble(),
pendingWorkOrders: json['pendingWorkOrders'] as int,
weather: WeatherInfo.fromJson(json['weather']),
alarmCount: json['alarmCount'] as int,
workOrderStats: WorkOrderStats.fromJson(json['workOrderStats']),
powerTrendData: (json['powerTrendData'] as List)
.map((e) => PowerTrendPoint.fromJson(e))
.toList(),
plantOverview: PlantOverview.fromJson(json['plantOverview']),
);
}
Map<String, dynamic> toJson() {
return {
'plantName': plantName,
'realTimePower': realTimePower,
'todayGeneration': todayGeneration,
'equivalentHours': equivalentHours,
'pendingWorkOrders': pendingWorkOrders,
'weather': weather.toJson(),
'alarmCount': alarmCount,
'workOrderStats': workOrderStats.toJson(),
'powerTrendData': powerTrendData.map((e) => e.toJson()).toList(),
'plantOverview': plantOverview.toJson(),
};
}
HomeEntity toEntity() {
return HomeEntity(
plantName: plantName,
realTimePower: realTimePower,
todayGeneration: todayGeneration,
equivalentHours: equivalentHours,
pendingWorkOrders: pendingWorkOrders,
weather: weather,
alarmCount: alarmCount,
workOrderStats: workOrderStats,
powerTrendData: powerTrendData,
plantOverview: plantOverview,
);
}
factory HomeDataModel.fromEntity(HomeEntity entity) {
return HomeDataModel(
plantName: entity.plantName,
realTimePower: entity.realTimePower,
todayGeneration: entity.todayGeneration,
equivalentHours: entity.equivalentHours,
pendingWorkOrders: entity.pendingWorkOrders,
weather: entity.weather,
alarmCount: entity.alarmCount,
workOrderStats: entity.workOrderStats,
powerTrendData: entity.powerTrendData,
plantOverview: entity.plantOverview,
);
}
}
extension WeatherInfoModelX on WeatherInfo {
Map<String, dynamic> toJson() {
return {
'condition': condition,
'tempMin': tempMin,
'tempMax': tempMax,
'windDirection': windDirection,
'windLevel': windLevel,
};
}
}
extension WorkOrderStatsModelX on WorkOrderStats {
Map<String, dynamic> toJson() {
return {
'pending': pending,
'processing': processing,
'pendingAcceptance': pendingAcceptance,
};
}
}
extension PlantOverviewModelX on PlantOverview {
Map<String, dynamic> toJson() {
return {
'installedCapacity': installedCapacity,
'commissionDate': commissionDate,
'backgroundImage': backgroundImage,
};
}
}
extension PowerTrendPointModelX on PowerTrendPoint {
Map<String, dynamic> toJson() {
return {
'time': time,
'power': power,
};
}
}