Add function to update schedules for relays WsAction
This commit is contained in:
		
							parent
							
								
									dd850766fd
								
							
						
					
					
						commit
						97d9222a39
					
				
					 1 changed files with 17 additions and 6 deletions
				
			
		| 
						 | 
					@ -1,6 +1,6 @@
 | 
				
			||||||
use actix::Addr;
 | 
					use actix::Addr;
 | 
				
			||||||
use emgauwa_lib::constants::WEBSOCKET_RETRY_TIMEOUT;
 | 
					use emgauwa_lib::constants::WEBSOCKET_RETRY_TIMEOUT;
 | 
				
			||||||
use emgauwa_lib::db::{DbController, DbRelay, DbSchedule};
 | 
					use emgauwa_lib::db::{DbController, DbJunctionRelaySchedule, DbRelay, DbSchedule};
 | 
				
			||||||
use emgauwa_lib::errors::{DatabaseError, EmgauwaError};
 | 
					use emgauwa_lib::errors::{DatabaseError, EmgauwaError};
 | 
				
			||||||
use emgauwa_lib::models::{Controller, Relay};
 | 
					use emgauwa_lib::models::{Controller, Relay};
 | 
				
			||||||
use emgauwa_lib::types::{ControllerWsAction, ScheduleUid};
 | 
					use emgauwa_lib::types::{ControllerWsAction, ScheduleUid};
 | 
				
			||||||
| 
						 | 
					@ -192,13 +192,24 @@ async fn handle_relays(
 | 
				
			||||||
				"Controller UID mismatch during relay update",
 | 
									"Controller UID mismatch during relay update",
 | 
				
			||||||
			)));
 | 
								)));
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		DbRelay::get_by_controller_and_num(conn, &this.c, relay.r.number)
 | 
							let db_relay = DbRelay::get_by_controller_and_num(conn, &this.c, relay.r.number)
 | 
				
			||||||
			.await?
 | 
								.await?
 | 
				
			||||||
			.ok_or(DatabaseError::NotFound)?
 | 
								.ok_or(DatabaseError::NotFound)?;
 | 
				
			||||||
			.update(conn, relay.r.name.as_str())
 | 
					 | 
				
			||||||
			.await?;
 | 
					 | 
				
			||||||
 | 
					
 | 
				
			||||||
		handle_schedules(conn, app_state, relay.schedules).await?;
 | 
							db_relay.update(conn, relay.r.name.as_str()).await?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							handle_schedules(conn, app_state, relay.schedules.clone()).await?;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							let mut schedules = Vec::new(); // We need to get the schedules from the database to have the right IDs
 | 
				
			||||||
 | 
							for schedule in relay.schedules {
 | 
				
			||||||
 | 
								schedules.push(
 | 
				
			||||||
 | 
									DbSchedule::get_by_uid(conn, &schedule.uid)
 | 
				
			||||||
 | 
										.await?
 | 
				
			||||||
 | 
										.ok_or(DatabaseError::NotFound)?,
 | 
				
			||||||
 | 
								);
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							DbJunctionRelaySchedule::set_schedules(conn, &db_relay, schedules.iter().collect()).await?;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	app_state.send(app_state::Reload {}).await??;
 | 
						app_state.send(app_state::Reload {}).await??;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue