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::db::{DbController, DbJunctionRelaySchedule, DbRelay, DbTag};
|
||||||
use emgauwa_common::errors::{DatabaseError, EmgauwaError};
|
use emgauwa_common::errors::{DatabaseError, EmgauwaError};
|
||||||
use emgauwa_common::models::{convert_db_list, FromDbModel, Relay};
|
use emgauwa_common::models::{convert_db_list, FromDbModel, Relay};
|
||||||
use emgauwa_common::types::{
|
use emgauwa_common::types::{ControllerWsAction, EmgauwaUid, RequestRelayPulse, RequestRelayUpdate};
|
||||||
ControllerWsAction, EmgauwaUid, RequestRelayPulse, RequestRelayUpdate,
|
|
||||||
};
|
|
||||||
use sqlx::{Pool, Sqlite};
|
use sqlx::{Pool, Sqlite};
|
||||||
|
|
||||||
use crate::app_state;
|
use crate::app_state;
|
||||||
use crate::app_state::AppState;
|
use crate::app_state::AppState;
|
||||||
use crate::handlers::EmgauwaMessage;
|
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")]
|
#[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 mut pool_conn = pool.acquire().await?;
|
||||||
|
|
||||||
let db_relays = DbRelay::get_all(&mut pool_conn).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))
|
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}")]
|
#[get("/relays/tag/{tag}")]
|
||||||
pub async fn tagged(
|
pub async fn tagged(
|
||||||
pool: web::Data<Pool<Sqlite>>,
|
pool: web::Data<Pool<Sqlite>>,
|
||||||
|
app_state: web::Data<Addr<AppState>>,
|
||||||
path: web::Path<(String,)>,
|
path: web::Path<(String,)>,
|
||||||
) -> Result<HttpResponse, EmgauwaError> {
|
) -> Result<HttpResponse, EmgauwaError> {
|
||||||
let mut pool_conn = pool.acquire().await?;
|
let mut pool_conn = pool.acquire().await?;
|
||||||
|
@ -36,7 +55,9 @@ pub async fn tagged(
|
||||||
.ok_or(DatabaseError::NotFound)?;
|
.ok_or(DatabaseError::NotFound)?;
|
||||||
|
|
||||||
let db_relays = DbRelay::get_by_tag(&mut pool_conn, &tag_db).await?;
|
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))
|
Ok(HttpResponse::Ok().json(relays))
|
||||||
}
|
}
|
||||||
|
@ -44,6 +65,7 @@ pub async fn tagged(
|
||||||
#[get("/controllers/{controller_id}/relays")]
|
#[get("/controllers/{controller_id}/relays")]
|
||||||
pub async fn index_for_controller(
|
pub async fn index_for_controller(
|
||||||
pool: web::Data<Pool<Sqlite>>,
|
pool: web::Data<Pool<Sqlite>>,
|
||||||
|
app_state: web::Data<Addr<AppState>>,
|
||||||
path: web::Path<(String,)>,
|
path: web::Path<(String,)>,
|
||||||
) -> Result<HttpResponse, EmgauwaError> {
|
) -> Result<HttpResponse, EmgauwaError> {
|
||||||
let mut pool_conn = pool.acquire().await?;
|
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 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))
|
Ok(HttpResponse::Ok().json(relays))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/controllers/{controller_id}/relays/{relay_num}")]
|
#[get("/controllers/{controller_id}/relays/{relay_num}")]
|
||||||
pub async fn show_for_controller(
|
pub async fn show_for_controller(
|
||||||
pool: web::Data<Pool<Sqlite>>,
|
pool: web::Data<Pool<Sqlite>>,
|
||||||
|
app_state: web::Data<Addr<AppState>>,
|
||||||
path: web::Path<(String, i64)>,
|
path: web::Path<(String, i64)>,
|
||||||
) -> Result<HttpResponse, EmgauwaError> {
|
) -> Result<HttpResponse, EmgauwaError> {
|
||||||
let mut pool_conn = pool.acquire().await?;
|
let mut pool_conn = pool.acquire().await?;
|
||||||
|
@ -75,12 +100,14 @@ pub async fn show_for_controller(
|
||||||
.await?
|
.await?
|
||||||
.ok_or(DatabaseError::NotFound)?;
|
.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?
|
.await?
|
||||||
.ok_or(DatabaseError::NotFound)?;
|
.ok_or(DatabaseError::NotFound)?;
|
||||||
|
|
||||||
let return_relay = Relay::from_db_model(&mut pool_conn, relay)?;
|
let mut relay = Relay::from_db_model(&mut pool_conn, db_relay)?;
|
||||||
Ok(HttpResponse::Ok().json(return_relay))
|
load_state_for_relay(&mut relay, &app_state).await?;
|
||||||
|
|
||||||
|
Ok(HttpResponse::Ok().json(relay))
|
||||||
}
|
}
|
||||||
|
|
||||||
#[put("/controllers/{controller_id}/relays/{relay_num}")]
|
#[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)?;
|
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 {
|
match &data.override_schedule {
|
||||||
Some(Some(s_uid)) => { // We want to set an override schedule
|
Some(Some(s_uid)) => { // We want to set an override schedule
|
||||||
let schedule = s_uid.get_schedule(&mut pool_conn).await?;
|
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
|
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;
|
return_relay.override_schedule = None;
|
||||||
}
|
}
|
||||||
|
None => {} // We want to keep the override schedule as is
|
||||||
}
|
}
|
||||||
|
|
||||||
app_state
|
app_state
|
||||||
|
|
Loading…
Reference in a new issue