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