Move most db stuff to database module
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
8c2f76ddd2
commit
10f1003b56
@ -3,3 +3,51 @@ mod migrations;
|
||||
|
||||
pub use migration::*;
|
||||
pub use migrations::create_migrations;
|
||||
|
||||
pub use rusqlite::Connection as DbConn;
|
||||
|
||||
use eyre::Result;
|
||||
|
||||
use crate::model::{Program, Programs, Section, Sections};
|
||||
use rusqlite::NO_PARAMS;
|
||||
|
||||
pub fn setup_db() -> Result<DbConn> {
|
||||
// let conn = DbConn::open_in_memory()?;
|
||||
let mut conn = DbConn::open("test.db")?;
|
||||
|
||||
let migs = create_migrations();
|
||||
migs.apply(&mut conn)?;
|
||||
|
||||
Ok(conn)
|
||||
}
|
||||
|
||||
pub fn query_sections(conn: &DbConn) -> Result<Sections> {
|
||||
let mut statement = conn.prepare_cached(
|
||||
"SELECT s.id, s.name, s.interface_id \
|
||||
FROM sections AS s;",
|
||||
)?;
|
||||
let rows = statement.query_map(NO_PARAMS, Section::from_sql)?;
|
||||
let mut sections = Sections::new();
|
||||
for row in rows {
|
||||
let section = row?;
|
||||
sections.insert(section.id, section.into());
|
||||
}
|
||||
Ok(sections)
|
||||
}
|
||||
|
||||
pub fn query_programs(conn: &DbConn) -> Result<Programs> {
|
||||
let mut statement = conn.prepare_cached(
|
||||
"
|
||||
SELECT p.id, p.name, ps.sequence, p.enabled, p.schedule
|
||||
FROM programs AS p
|
||||
INNER JOIN program_sequences AS ps
|
||||
ON ps.program_id = p.id;",
|
||||
)?;
|
||||
let rows = statement.query_map(NO_PARAMS, Program::from_sql)?;
|
||||
let mut programs = Programs::new();
|
||||
for row in rows {
|
||||
let program = row?;
|
||||
programs.insert(program.id, program.into());
|
||||
}
|
||||
Ok(programs)
|
||||
}
|
||||
|
69
src/main.rs
69
src/main.rs
@ -1,12 +1,6 @@
|
||||
#![warn(clippy::all)]
|
||||
#![warn(clippy::print_stdout)]
|
||||
|
||||
use color_eyre::eyre::Result;
|
||||
use rusqlite::Connection as DbConnection;
|
||||
use rusqlite::NO_PARAMS;
|
||||
use tracing::info;
|
||||
use tracing_subscriber::EnvFilter;
|
||||
|
||||
mod database;
|
||||
mod model;
|
||||
mod option_future;
|
||||
@ -17,49 +11,10 @@ mod section_runner;
|
||||
#[cfg(test)]
|
||||
mod trace_listeners;
|
||||
|
||||
use model::{Program, Programs, Section, Sections};
|
||||
use color_eyre::eyre::Result;
|
||||
use std::sync::Arc;
|
||||
|
||||
fn setup_db() -> Result<DbConnection> {
|
||||
// let conn = DbConnection::open_in_memory()?;
|
||||
let mut conn = DbConnection::open("test.db")?;
|
||||
|
||||
let migs = database::create_migrations();
|
||||
migs.apply(&mut conn)?;
|
||||
|
||||
Ok(conn)
|
||||
}
|
||||
|
||||
fn query_sections(conn: &DbConnection) -> Result<Sections> {
|
||||
let mut statement = conn.prepare_cached(
|
||||
"SELECT s.id, s.name, s.interface_id \
|
||||
FROM sections AS s;",
|
||||
)?;
|
||||
let rows = statement.query_map(NO_PARAMS, Section::from_sql)?;
|
||||
let mut sections = Sections::new();
|
||||
for row in rows {
|
||||
let section = row?;
|
||||
sections.insert(section.id, section.into());
|
||||
}
|
||||
Ok(sections)
|
||||
}
|
||||
|
||||
fn query_programs(conn: &DbConnection) -> Result<Programs> {
|
||||
let mut statement = conn.prepare_cached(
|
||||
"
|
||||
SELECT p.id, p.name, ps.sequence, p.enabled, p.schedule
|
||||
FROM programs AS p
|
||||
INNER JOIN program_sequences AS ps
|
||||
ON ps.program_id = p.id;",
|
||||
)?;
|
||||
let rows = statement.query_map(NO_PARAMS, Program::from_sql)?;
|
||||
let mut programs = Programs::new();
|
||||
for row in rows {
|
||||
let program = row?;
|
||||
programs.insert(program.id, program.into());
|
||||
}
|
||||
Ok(programs)
|
||||
}
|
||||
use tracing::info;
|
||||
use tracing_subscriber::EnvFilter;
|
||||
|
||||
#[tokio::main]
|
||||
async fn main() -> Result<()> {
|
||||
@ -71,9 +26,9 @@ async fn main() -> Result<()> {
|
||||
.init();
|
||||
color_eyre::install()?;
|
||||
|
||||
let conn = setup_db()?;
|
||||
let conn = database::setup_db()?;
|
||||
|
||||
let sections = query_sections(&conn)?;
|
||||
let sections = database::query_sections(&conn)?;
|
||||
for sec in sections.values() {
|
||||
info!(section = debug(&sec), "read section");
|
||||
}
|
||||
@ -83,7 +38,19 @@ async fn main() -> Result<()> {
|
||||
let mut section_runner = section_runner::SectionRunner::new(section_interface);
|
||||
let mut program_runner = program_runner::ProgramRunner::new(section_runner.clone());
|
||||
|
||||
let programs = query_programs(&conn)?;
|
||||
let mut programs = database::query_programs(&conn)?;
|
||||
|
||||
// TEMP: just so the program runs right away
|
||||
if let Some(prog) = programs.get_mut(&1) {
|
||||
let prog_mut = Arc::make_mut(prog);
|
||||
if let Some(first_time) = prog_mut.schedule.times.get_mut(0) {
|
||||
*first_time = chrono::Local::now().time() + chrono::Duration::seconds(5);
|
||||
}
|
||||
}
|
||||
|
||||
for prog in programs.values() {
|
||||
info!(program = debug(&prog), "read program");
|
||||
}
|
||||
|
||||
program_runner.update_sections(sections.clone()).await?;
|
||||
program_runner.update_programs(programs.clone()).await?;
|
||||
|
Loading…
x
Reference in New Issue
Block a user