From 73163e6e699ff0871f316876ab8f3d25653db323 Mon Sep 17 00:00:00 2001 From: Pierre HUBERT Date: Wed, 24 Jul 2024 23:35:58 +0200 Subject: [PATCH] Can get the full list of relays through the API --- central_backend/src/devices/devices_list.rs | 10 +++++++++- central_backend/src/energy/energy_actor.rs | 15 ++++++++++++++- central_backend/src/server/servers.rs | 9 +++++++++ central_backend/src/server/web_api/mod.rs | 1 + .../src/server/web_api/relays_controller.rs | 10 ++++++++++ 5 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 central_backend/src/server/web_api/relays_controller.rs diff --git a/central_backend/src/devices/devices_list.rs b/central_backend/src/devices/devices_list.rs index d9928d3..095f95f 100644 --- a/central_backend/src/devices/devices_list.rs +++ b/central_backend/src/devices/devices_list.rs @@ -1,6 +1,6 @@ use crate::app_config::AppConfig; use crate::crypto::pki; -use crate::devices::device::{Device, DeviceGeneralInfo, DeviceId, DeviceInfo}; +use crate::devices::device::{Device, DeviceGeneralInfo, DeviceId, DeviceInfo, DeviceRelay}; use crate::utils::time_utils::time_secs; use openssl::x509::{X509Req, X509}; use std::collections::HashMap; @@ -192,4 +192,12 @@ impl DevicesList { Ok(()) } + + /// Get the full list of relays + pub fn relays_list(&mut self) -> Vec { + self.0 + .iter() + .flat_map(|(_id, d)| d.relays.clone()) + .collect() + } } diff --git a/central_backend/src/energy/energy_actor.rs b/central_backend/src/energy/energy_actor.rs index 773ad30..91067d2 100644 --- a/central_backend/src/energy/energy_actor.rs +++ b/central_backend/src/energy/energy_actor.rs @@ -1,5 +1,5 @@ use crate::constants; -use crate::devices::device::{Device, DeviceGeneralInfo, DeviceId, DeviceInfo}; +use crate::devices::device::{Device, DeviceGeneralInfo, DeviceId, DeviceInfo, DeviceRelay}; use crate::devices::devices_list::DevicesList; use crate::energy::consumption; use crate::energy::consumption::EnergyConsumption; @@ -171,3 +171,16 @@ impl Handler for EnergyActor { self.devices.get_single(&msg.0) } } + +/// Get the full list of relays +#[derive(Message)] +#[rtype(result = "Vec")] +pub struct GetRelaysList; + +impl Handler for EnergyActor { + type Result = Vec; + + fn handle(&mut self, _msg: GetRelaysList, _ctx: &mut Context) -> Self::Result { + self.devices.relays_list() + } +} diff --git a/central_backend/src/server/servers.rs b/central_backend/src/server/servers.rs index 61a6230..704ac46 100644 --- a/central_backend/src/server/servers.rs +++ b/central_backend/src/server/servers.rs @@ -107,10 +107,12 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()> })) .route("/", web::get().to(server_controller::secure_home)) // Web API + // Server controller .route( "/web_api/server/config", web::get().to(server_controller::config), ) + // Auth controller .route( "/web_api/auth/password_auth", web::post().to(auth_controller::password_auth), @@ -123,6 +125,7 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()> "/web_api/auth/sign_out", web::get().to(auth_controller::sign_out), ) + // Energy controller .route( "/web_api/energy/curr_consumption", web::get().to(energy_controller::curr_consumption), @@ -131,6 +134,7 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()> "/web_api/energy/cached_consumption", web::get().to(energy_controller::cached_consumption), ) + // Devices controller .route( "/web_api/devices/list_pending", web::get().to(devices_controller::list_pending), @@ -155,6 +159,11 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()> "/web_api/device/{id}", web::delete().to(devices_controller::delete_device), ) + // Relays API + .route( + "/web_api/relays/list", + web::get().to(relays_controller::get_list), + ) // Devices API .route( "/devices_api/utils/time", diff --git a/central_backend/src/server/web_api/mod.rs b/central_backend/src/server/web_api/mod.rs index e4c75a5..eb48e75 100644 --- a/central_backend/src/server/web_api/mod.rs +++ b/central_backend/src/server/web_api/mod.rs @@ -1,4 +1,5 @@ pub mod auth_controller; pub mod devices_controller; pub mod energy_controller; +pub mod relays_controller; pub mod server_controller; diff --git a/central_backend/src/server/web_api/relays_controller.rs b/central_backend/src/server/web_api/relays_controller.rs new file mode 100644 index 0000000..45256f3 --- /dev/null +++ b/central_backend/src/server/web_api/relays_controller.rs @@ -0,0 +1,10 @@ +use crate::energy::energy_actor; +use crate::server::custom_error::HttpResult; +use crate::server::WebEnergyActor; +use actix_web::HttpResponse; + +/// Get the full list of relays +pub async fn get_list(actor: WebEnergyActor) -> HttpResult { + let list = actor.send(energy_actor::GetRelaysList).await?; + Ok(HttpResponse::Ok().json(list)) +}