Can create a relay
This commit is contained in:
@ -166,7 +166,7 @@ pub async fn secure_server(energy_actor: EnergyActorAddr) -> anyhow::Result<()>
|
||||
web::get().to(relays_controller::get_list),
|
||||
)
|
||||
.route(
|
||||
"/web_api/relays/create",
|
||||
"/web_api/relay/create",
|
||||
web::post().to(relays_controller::create),
|
||||
)
|
||||
// Devices API
|
||||
|
@ -19,5 +19,33 @@ pub struct CreateDeviceRelayRequest {
|
||||
|
||||
/// Create a new relay
|
||||
pub async fn create(actor: WebEnergyActor, req: web::Json<CreateDeviceRelayRequest>) -> HttpResult {
|
||||
todo!()
|
||||
let list = actor.send(energy_actor::GetRelaysList).await?;
|
||||
|
||||
if let Some(e) = req.relay.error(&list) {
|
||||
log::error!("Invalid relay create query: {e}");
|
||||
return Ok(HttpResponse::BadRequest().json(e));
|
||||
}
|
||||
|
||||
let Some(device) = actor
|
||||
.send(energy_actor::GetSingleDevice(req.device_id.clone()))
|
||||
.await?
|
||||
else {
|
||||
log::error!("Invalid relay create query: specified device does not exists!");
|
||||
return Ok(HttpResponse::NotFound().json("Linked device not found!"));
|
||||
};
|
||||
|
||||
if device.relays.len() >= device.info.max_relays {
|
||||
log::error!("Invalid relay create query: too many relay for the target device!");
|
||||
return Ok(HttpResponse::BadRequest().json("Too many relays for the target device!"));
|
||||
}
|
||||
|
||||
// Create the device
|
||||
actor
|
||||
.send(energy_actor::CreateDeviceRelay(
|
||||
req.device_id.clone(),
|
||||
req.relay.clone(),
|
||||
))
|
||||
.await??;
|
||||
|
||||
Ok(HttpResponse::Accepted().finish())
|
||||
}
|
||||
|
Reference in New Issue
Block a user