diff --git a/api.v1.json b/api.v1.json index 6e5218c..a5cbecb 100644 --- a/api.v1.json +++ b/api.v1.json @@ -6,7 +6,7 @@ "url": "https://git.serguzim.me/emgauwa/" }, "title": "Emgauwa API v1", - "version": "0.5.1", + "version": "0.6.0", "description": "Server API to manage an Emgauwa system." }, "tags": [ @@ -524,8 +524,10 @@ "name": { "type": "string" }, - "active_schedule": { + "override_schedule": { "type": "object", + "nullable": true, + "description": "NULL will remove the override schedule, missing field will not change the override schedule", "properties": { "id": { "$ref": "#/components/schemas/schedule_id" @@ -1118,6 +1120,14 @@ "active_schedule": { "$ref": "#/components/schemas/schedule_simple" }, + "override_schedule": { + "nullable": true, + "allOf": [ + { + "$ref": "#/components/schemas/schedule_simple" + } + ] + }, "schedules": { "type": "array", "maxItems": 7, diff --git a/src/handlers/v1/relays.rs b/src/handlers/v1/relays.rs index 5c032b4..199fa20 100644 --- a/src/handlers/v1/relays.rs +++ b/src/handlers/v1/relays.rs @@ -6,7 +6,6 @@ use emgauwa_common::models::{convert_db_list, FromDbModel, Relay}; use emgauwa_common::types::{ ControllerWsAction, EmgauwaUid, RequestRelayPulse, RequestRelayUpdate, }; -use emgauwa_common::utils; use sqlx::{Pool, Sqlite}; use crate::app_state; @@ -124,24 +123,26 @@ pub async fn update_for_controller( } } - if let Some(s_uid) = &data.active_schedule { - let schedule = s_uid.get_schedule(&mut pool_conn).await?; - DbJunctionRelaySchedule::set_schedule( - &mut pool_conn, - &relay, - &schedule, - utils::get_weekday(), - ) - .await?; - } - if let Some(tags) = &data.tags { relay.set_tags(&mut pool_conn, tags.as_slice()).await?; } let relay = relay.reload(&mut pool_conn).await?; - let return_relay = Relay::from_db_model(&mut pool_conn, relay)?; + let mut return_relay = Relay::from_db_model(&mut pool_conn, relay)?; + + 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)); + } + 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; + } + } app_state .send(app_state::Action {