From af877d78396e86358ce2e357c604acc9b27f4fbe Mon Sep 17 00:00:00 2001 From: Faris Armoush Date: Mon, 5 May 2025 10:15:35 +0300 Subject: [PATCH] Created `EnergyConsumptionPerDeviceService` and a fake implementation for it. --- .../models/device_energy_data_model.dart | 20 +++++++++ ...t_energy_consumption_per_device_param.dart | 3 ++ ...energy_consumption_per_device_service.dart | 8 ++++ ...energy_consumption_per_device_service.dart | 44 +++++++++++++++++++ 4 files changed, 75 insertions(+) create mode 100644 lib/pages/analytics/models/device_energy_data_model.dart create mode 100644 lib/pages/analytics/params/get_energy_consumption_per_device_param.dart create mode 100644 lib/pages/analytics/services/energy_consumption_per_device/energy_consumption_per_device_service.dart create mode 100644 lib/pages/analytics/services/energy_consumption_per_device/fake_energy_consumption_per_device_service.dart diff --git a/lib/pages/analytics/models/device_energy_data_model.dart b/lib/pages/analytics/models/device_energy_data_model.dart new file mode 100644 index 00000000..cfcb897d --- /dev/null +++ b/lib/pages/analytics/models/device_energy_data_model.dart @@ -0,0 +1,20 @@ +import 'package:equatable/equatable.dart'; +import 'package:flutter/widgets.dart'; +import 'package:syncrow_web/pages/analytics/models/energy_data_model.dart'; + +class DeviceEnergyDataModel extends Equatable { + const DeviceEnergyDataModel( { + required this.energy, + required this.deviceName, + required this.deviceId, + required this.color, + }); + + final List energy; + final String deviceName; + final String deviceId; + final Color color; + + @override + List get props => [energy, deviceName, deviceId]; +} diff --git a/lib/pages/analytics/params/get_energy_consumption_per_device_param.dart b/lib/pages/analytics/params/get_energy_consumption_per_device_param.dart new file mode 100644 index 00000000..4995b843 --- /dev/null +++ b/lib/pages/analytics/params/get_energy_consumption_per_device_param.dart @@ -0,0 +1,3 @@ +class GetEnergyConsumptionPerDeviceParam { + const GetEnergyConsumptionPerDeviceParam(); +} diff --git a/lib/pages/analytics/services/energy_consumption_per_device/energy_consumption_per_device_service.dart b/lib/pages/analytics/services/energy_consumption_per_device/energy_consumption_per_device_service.dart new file mode 100644 index 00000000..63dde8dc --- /dev/null +++ b/lib/pages/analytics/services/energy_consumption_per_device/energy_consumption_per_device_service.dart @@ -0,0 +1,8 @@ +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'; + +abstract interface class EnergyConsumptionPerDeviceService { + Future> load( + GetEnergyConsumptionPerDeviceParam param, + ); +} diff --git a/lib/pages/analytics/services/energy_consumption_per_device/fake_energy_consumption_per_device_service.dart b/lib/pages/analytics/services/energy_consumption_per_device/fake_energy_consumption_per_device_service.dart new file mode 100644 index 00000000..edb290b1 --- /dev/null +++ b/lib/pages/analytics/services/energy_consumption_per_device/fake_energy_consumption_per_device_service.dart @@ -0,0 +1,44 @@ +import 'package:flutter/material.dart'; +import 'package:syncrow_web/pages/analytics/models/device_energy_data_model.dart'; +import 'package:syncrow_web/pages/analytics/models/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'; + +class FakeEnergyConsumptionPerDeviceService + implements EnergyConsumptionPerDeviceService { + @override + Future> load( + GetEnergyConsumptionPerDeviceParam param, + ) { + return Future.delayed(const Duration(milliseconds: 500), () { + return [ + DeviceEnergyDataModel( + color: Colors.redAccent, + energy: List.generate(12, (i) => i) + .map( + (index) => EnergyDataModel( + date: DateTime.now().subtract(Duration(days: index)), + value: (index + 1) * 125, + ), + ) + .toList(), + deviceName: 'Device 1', + deviceId: 'device_!', + ), + DeviceEnergyDataModel( + color: Colors.blueAccent, + energy: List.generate(12, (i) => i) + .map( + (index) => EnergyDataModel( + date: DateTime.now().subtract(Duration(days: index)), + value: (index + 1) * 125, + ), + ) + .toList(), + deviceName: 'Device 2', + deviceId: 'device_2', + ), + ]; + }); + } +}