Improve handling of override_schedule
This commit is contained in:
parent
470b9c905b
commit
45409168d6
1 changed files with 40 additions and 14 deletions
|
@ -3,22 +3,40 @@ use actix_web::{get, post, put, web, HttpResponse};
|
|||
use emgauwa_common::db::{DbController, DbJunctionRelaySchedule, DbRelay, DbTag};
|
||||
use emgauwa_common::errors::{DatabaseError, EmgauwaError};
|
||||
use emgauwa_common::models::{convert_db_list, FromDbModel, Relay};
|
||||
use emgauwa_common::types::{
|
||||
ControllerWsAction, EmgauwaUid, RequestRelayPulse, RequestRelayUpdate,
|
||||
};
|
||||
use emgauwa_common::types::{ControllerWsAction, EmgauwaUid, RequestRelayPulse, RequestRelayUpdate};
|
||||
use sqlx::{Pool, Sqlite};
|
||||
|
||||
use crate::app_state;
|
||||
use crate::app_state::AppState;
|
||||
use crate::handlers::EmgauwaMessage;
|
||||
|
||||
pub async fn get_stated_relays(app_state: &Addr<AppState>) -> Result<Vec<Relay>, EmgauwaError> {
|
||||
app_state.send(app_state::GetRelays {}).await?
|
||||
}
|
||||
|
||||
pub async fn load_state_for_relay(relay: &mut Relay, app_state: &Addr<AppState>) -> Result<(), EmgauwaError>{
|
||||
let stated_relays = get_stated_relays(app_state).await?;
|
||||
relay.find_and_apply_state(&stated_relays);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
pub async fn load_state_for_relays(relays: &mut Vec<Relay>, app_state: &Addr<AppState>) -> Result<(), EmgauwaError>{
|
||||
let stated_relays = get_stated_relays(app_state).await?;
|
||||
relays.iter_mut().for_each(|r| r.find_and_apply_state(&stated_relays));
|
||||
Ok(())
|
||||
}
|
||||
|
||||
#[get("/relays")]
|
||||
pub async fn index(pool: web::Data<Pool<Sqlite>>) -> Result<HttpResponse, EmgauwaError> {
|
||||
pub async fn index(
|
||||
pool: web::Data<Pool<Sqlite>>,
|
||||
app_state: web::Data<Addr<AppState>>,
|
||||
) -> Result<HttpResponse, EmgauwaError> {
|
||||
let mut pool_conn = pool.acquire().await?;
|
||||
|
||||
let db_relays = DbRelay::get_all(&mut pool_conn).await?;
|
||||
|
||||
let relays: Vec<Relay> = convert_db_list(&mut pool_conn, db_relays)?;
|
||||
let mut relays: Vec<Relay> = convert_db_list(&mut pool_conn, db_relays)?;
|
||||
load_state_for_relays(&mut relays, &app_state).await?;
|
||||
|
||||
Ok(HttpResponse::Ok().json(relays))
|
||||
}
|
||||
|
@ -26,6 +44,7 @@ pub async fn index(pool: web::Data<Pool<Sqlite>>) -> Result<HttpResponse, Emgauw
|
|||
#[get("/relays/tag/{tag}")]
|
||||
pub async fn tagged(
|
||||
pool: web::Data<Pool<Sqlite>>,
|
||||
app_state: web::Data<Addr<AppState>>,
|
||||
path: web::Path<(String,)>,
|
||||
) -> Result<HttpResponse, EmgauwaError> {
|
||||
let mut pool_conn = pool.acquire().await?;
|
||||
|
@ -36,7 +55,9 @@ pub async fn tagged(
|
|||
.ok_or(DatabaseError::NotFound)?;
|
||||
|
||||
let db_relays = DbRelay::get_by_tag(&mut pool_conn, &tag_db).await?;
|
||||
let relays: Vec<Relay> = convert_db_list(&mut pool_conn, db_relays)?;
|
||||
|
||||
let mut relays: Vec<Relay> = convert_db_list(&mut pool_conn, db_relays)?;
|
||||
load_state_for_relays(&mut relays, &app_state).await?;
|
||||
|
||||
Ok(HttpResponse::Ok().json(relays))
|
||||
}
|
||||
|
@ -44,6 +65,7 @@ pub async fn tagged(
|
|||
#[get("/controllers/{controller_id}/relays")]
|
||||
pub async fn index_for_controller(
|
||||
pool: web::Data<Pool<Sqlite>>,
|
||||
app_state: web::Data<Addr<AppState>>,
|
||||
path: web::Path<(String,)>,
|
||||
) -> Result<HttpResponse, EmgauwaError> {
|
||||
let mut pool_conn = pool.acquire().await?;
|
||||
|
@ -57,13 +79,16 @@ pub async fn index_for_controller(
|
|||
|
||||
let db_relays = controller.get_relays(&mut pool_conn).await?;
|
||||
|
||||
let relays: Vec<Relay> = convert_db_list(&mut pool_conn, db_relays)?;
|
||||
let mut relays: Vec<Relay> = convert_db_list(&mut pool_conn, db_relays)?;
|
||||
load_state_for_relays(&mut relays, &app_state).await?;
|
||||
|
||||
Ok(HttpResponse::Ok().json(relays))
|
||||
}
|
||||
|
||||
#[get("/controllers/{controller_id}/relays/{relay_num}")]
|
||||
pub async fn show_for_controller(
|
||||
pool: web::Data<Pool<Sqlite>>,
|
||||
app_state: web::Data<Addr<AppState>>,
|
||||
path: web::Path<(String, i64)>,
|
||||
) -> Result<HttpResponse, EmgauwaError> {
|
||||
let mut pool_conn = pool.acquire().await?;
|
||||
|
@ -75,12 +100,14 @@ pub async fn show_for_controller(
|
|||
.await?
|
||||
.ok_or(DatabaseError::NotFound)?;
|
||||
|
||||
let relay = DbRelay::get_by_controller_and_num(&mut pool_conn, &controller, relay_num)
|
||||
let db_relay = DbRelay::get_by_controller_and_num(&mut pool_conn, &controller, relay_num)
|
||||
.await?
|
||||
.ok_or(DatabaseError::NotFound)?;
|
||||
|
||||
let return_relay = Relay::from_db_model(&mut pool_conn, relay)?;
|
||||
Ok(HttpResponse::Ok().json(return_relay))
|
||||
let mut relay = Relay::from_db_model(&mut pool_conn, db_relay)?;
|
||||
load_state_for_relay(&mut relay, &app_state).await?;
|
||||
|
||||
Ok(HttpResponse::Ok().json(relay))
|
||||
}
|
||||
|
||||
#[put("/controllers/{controller_id}/relays/{relay_num}")]
|
||||
|
@ -131,17 +158,16 @@ pub async fn update_for_controller(
|
|||
|
||||
let mut return_relay = Relay::from_db_model(&mut pool_conn, relay)?;
|
||||
|
||||
load_state_for_relay(&mut return_relay, &app_state).await?;
|
||||
match &data.override_schedule {
|
||||
Some(Some(s_uid)) => { // We want to set an override schedule
|
||||
let schedule = s_uid.get_schedule(&mut pool_conn).await?;
|
||||
return_relay.override_schedule = Some(Some(schedule));
|
||||
return_relay.override_schedule = Some(schedule);
|
||||
}
|
||||
Some(None) => { // We want to unset the override schedule
|
||||
return_relay.override_schedule = Some(None);
|
||||
}
|
||||
None => { // We want to keep the override schedule as is
|
||||
return_relay.override_schedule = None;
|
||||
}
|
||||
None => {} // We want to keep the override schedule as is
|
||||
}
|
||||
|
||||
app_state
|
||||
|
|
Loading…
Reference in a new issue