diff --git a/lib/pages/analytics/models/device_energy_data_model.dart b/lib/pages/analytics/models/device_energy_data_model.dart index cfcb897d..2bbb2a85 100644 --- a/lib/pages/analytics/models/device_energy_data_model.dart +++ b/lib/pages/analytics/models/device_energy_data_model.dart @@ -3,7 +3,7 @@ import 'package:flutter/widgets.dart'; import 'package:syncrow_web/pages/analytics/models/energy_data_model.dart'; class DeviceEnergyDataModel extends Equatable { - const DeviceEnergyDataModel( { + const DeviceEnergyDataModel({ required this.energy, required this.deviceName, required this.deviceId, @@ -17,4 +17,16 @@ class DeviceEnergyDataModel extends Equatable { @override List get props => [energy, deviceName, deviceId]; + + factory DeviceEnergyDataModel.fromJson(Map json) { + final energy = (json['energy'] as List? ?? []) + .map((e) => EnergyDataModel.fromJson(e)) + .toList(); + return DeviceEnergyDataModel( + energy: energy, + deviceName: json['device_name'] as String? ?? '', + deviceId: json['device_id'] as String? ?? '', + color: Color(int.parse(json['color'] as String? ?? '0xFF000000')), + ); + } } diff --git a/lib/pages/analytics/models/energy_data_model.dart b/lib/pages/analytics/models/energy_data_model.dart index d9ee8faa..f1a7ff66 100644 --- a/lib/pages/analytics/models/energy_data_model.dart +++ b/lib/pages/analytics/models/energy_data_model.dart @@ -9,6 +9,13 @@ class EnergyDataModel extends Equatable { final DateTime date; final double value; + factory EnergyDataModel.fromJson(Map json) { + return EnergyDataModel( + date: DateTime.parse(json['date'] as String), + value: (json['value'] as num).toDouble(), + ); + } + @override List get props => [date, value]; } diff --git a/lib/pages/analytics/models/phases_energy_consumption.dart b/lib/pages/analytics/models/phases_energy_consumption.dart index 73f1ba4c..f986c3ad 100644 --- a/lib/pages/analytics/models/phases_energy_consumption.dart +++ b/lib/pages/analytics/models/phases_energy_consumption.dart @@ -15,4 +15,13 @@ class PhasesEnergyConsumption extends Equatable { @override List get props => [month, phaseA, phaseB, phaseC]; + + factory PhasesEnergyConsumption.fromJson(Map json) { + return PhasesEnergyConsumption( + month: json['month'] as int, + phaseA: (json['phaseA'] as num).toDouble(), + phaseB: (json['phaseB'] as num).toDouble(), + phaseC: (json['phaseC'] as num).toDouble(), + ); + } } diff --git a/lib/pages/analytics/services/energy_consumption_by_phases/remote_energy_consumption_by_phases_service.dart b/lib/pages/analytics/services/energy_consumption_by_phases/remote_energy_consumption_by_phases_service.dart new file mode 100644 index 00000000..f0ac31ed --- /dev/null +++ b/lib/pages/analytics/services/energy_consumption_by_phases/remote_energy_consumption_by_phases_service.dart @@ -0,0 +1,34 @@ +import 'package:syncrow_web/pages/analytics/models/phases_energy_consumption.dart'; +import 'package:syncrow_web/pages/analytics/params/get_energy_consumption_by_phases_param.dart'; +import 'package:syncrow_web/pages/analytics/services/energy_consumption_by_phases/energy_consumption_by_phases_service.dart'; +import 'package:syncrow_web/services/api/http_service.dart'; + +final class RemoteEnergyConsumptionByPhasesService + implements EnergyConsumptionByPhasesService { + const RemoteEnergyConsumptionByPhasesService(this._httpService); + + final HTTPService _httpService; + + @override + Future> load( + GetEnergyConsumptionByPhasesParam param, + ) async { + try { + final response = await _httpService.get( + path: 'endpoint', + showServerMessage: true, + expectedResponseModel: (data) { + final json = data as Map? ?? {}; + final mappedData = json['data'] as List? ?? []; + return mappedData.map((e) { + final jsonData = e as Map; + return PhasesEnergyConsumption.fromJson(jsonData); + }).toList(); + }, + ); + return response; + } catch (e) { + throw Exception('Failed to load energy consumption per device: $e'); + } + } +} diff --git a/lib/pages/analytics/services/energy_consumption_per_device/remote_energy_consumption_per_device_service.dart b/lib/pages/analytics/services/energy_consumption_per_device/remote_energy_consumption_per_device_service.dart new file mode 100644 index 00000000..2c43bb23 --- /dev/null +++ b/lib/pages/analytics/services/energy_consumption_per_device/remote_energy_consumption_per_device_service.dart @@ -0,0 +1,34 @@ +import 'package:syncrow_web/pages/analytics/models/device_energy_data_model.dart'; +import 'package:syncrow_web/pages/analytics/params/get_energy_consumption_per_device_param.dart'; +import 'package:syncrow_web/pages/analytics/services/energy_consumption_per_device/energy_consumption_per_device_service.dart'; +import 'package:syncrow_web/services/api/http_service.dart'; + +class RemoteEnergyConsumptionPerDeviceService + implements EnergyConsumptionPerDeviceService { + const RemoteEnergyConsumptionPerDeviceService(this._httpService); + + final HTTPService _httpService; + + @override + Future> load( + GetEnergyConsumptionPerDeviceParam param, + ) async { + try { + final response = await _httpService.get( + path: 'endpoint', + showServerMessage: true, + expectedResponseModel: (data) { + final json = data as Map? ?? {}; + final mappedData = json['data'] as List? ?? []; + return mappedData.map((e) { + final jsonData = e as Map; + return DeviceEnergyDataModel.fromJson(jsonData); + }).toList(); + }, + ); + return response; + } catch (e) { + throw Exception('Failed to load energy consumption per device: $e'); + } + } +} diff --git a/lib/pages/analytics/services/total_energy_consumption/remote_total_energy_consumption_service.dart b/lib/pages/analytics/services/total_energy_consumption/remote_total_energy_consumption_service.dart new file mode 100644 index 00000000..193404ca --- /dev/null +++ b/lib/pages/analytics/services/total_energy_consumption/remote_total_energy_consumption_service.dart @@ -0,0 +1,33 @@ +import 'package:syncrow_web/pages/analytics/models/energy_data_model.dart'; +import 'package:syncrow_web/pages/analytics/params/get_total_energy_consumption_param.dart'; +import 'package:syncrow_web/pages/analytics/services/total_energy_consumption/total_energy_consumption_service.dart'; +import 'package:syncrow_web/services/api/http_service.dart'; + +class RemoteTotalEnergyConsumptionService implements TotalEnergyConsumptionService { + const RemoteTotalEnergyConsumptionService(this._httpService); + + final HTTPService _httpService; + + @override + Future> load( + GetTotalEnergyConsumptionParam param, + ) async { + try { + final response = await _httpService.get( + path: 'endpoint', + showServerMessage: true, + expectedResponseModel: (data) { + final json = data as Map? ?? {}; + final mappedData = json['data'] as List? ?? []; + return mappedData.map((e) { + final jsonData = e as Map; + return EnergyDataModel.fromJson(jsonData); + }).toList(); + }, + ); + return response; + } catch (e) { + throw Exception('Failed to load total energy consumption: $e'); + } + } +}