73 lines
1.8 KiB
Rust
73 lines
1.8 KiB
Rust
use std::env;
|
|
|
|
use crate::db::errors::DatabaseError;
|
|
use crate::db::model_utils::Period;
|
|
use crate::db::models::{NewSchedule, Periods};
|
|
use crate::types::EmgauwaUid;
|
|
use diesel::prelude::*;
|
|
use diesel_migrations::{embed_migrations, EmbeddedMigrations, MigrationHarness};
|
|
use dotenv::dotenv;
|
|
use log::{info, trace};
|
|
|
|
pub mod errors;
|
|
pub mod models;
|
|
pub mod schedules;
|
|
pub mod schema;
|
|
pub mod tag;
|
|
|
|
mod model_utils;
|
|
|
|
pub const MIGRATIONS: EmbeddedMigrations = embed_migrations!("migrations");
|
|
|
|
fn get_connection() -> SqliteConnection {
|
|
dotenv().ok();
|
|
|
|
let database_url = env::var("DATABASE_URL").expect("DATABASE_URL must be set");
|
|
SqliteConnection::establish(&database_url)
|
|
.unwrap_or_else(|_| panic!("Error connecting to {}", database_url))
|
|
}
|
|
|
|
pub fn run_migrations() {
|
|
info!("Running migrations");
|
|
let mut connection = get_connection();
|
|
connection
|
|
.run_pending_migrations(MIGRATIONS)
|
|
.expect("Failed to run migrations.");
|
|
}
|
|
|
|
fn init_schedule(schedule: &NewSchedule) -> Result<(), DatabaseError> {
|
|
trace!("Initializing schedule {:?}", schedule.name);
|
|
match schedules::get_schedule_by_uid(schedule.uid.clone()) {
|
|
Ok(_) => Ok(()),
|
|
Err(err) => match err {
|
|
DatabaseError::NotFound => {
|
|
trace!("Schedule {:?} not found, inserting", schedule.name);
|
|
let mut connection = get_connection();
|
|
diesel::insert_into(schema::schedules::table)
|
|
.values(schedule)
|
|
.execute(&mut connection)
|
|
.map(|_| ())
|
|
.map_err(DatabaseError::InsertError)
|
|
}
|
|
_ => Err(err),
|
|
},
|
|
}
|
|
}
|
|
|
|
pub fn init(db: &str) {
|
|
run_migrations();
|
|
|
|
init_schedule(&NewSchedule {
|
|
uid: &EmgauwaUid::Off,
|
|
name: "Off",
|
|
periods: &Periods(vec![]),
|
|
})
|
|
.expect("Error initializing schedule Off");
|
|
|
|
init_schedule(&NewSchedule {
|
|
uid: &EmgauwaUid::On,
|
|
name: "On",
|
|
periods: &Periods(vec![Period::new_on()]),
|
|
})
|
|
.expect("Error initializing schedule On");
|
|
}
|