You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
49 lines
1.0 KiB
49 lines
1.0 KiB
use diesel::{ |
|
sqlite::SqliteConnection, |
|
prelude::* |
|
}; |
|
use dotenv::dotenv; |
|
use std::{ |
|
env, |
|
sync::{Arc, Mutex} |
|
}; |
|
|
|
use crate::{ |
|
errors::USrvResult, |
|
db::* |
|
}; |
|
use u_db::schema; |
|
|
|
pub type Storage = Arc<Mutex<UDB>>; |
|
|
|
pub struct UDB { |
|
conn: SqliteConnection |
|
} |
|
|
|
impl UDB { |
|
pub fn new() -> USrvResult<Storage> { |
|
dotenv()?; |
|
let db_path = env::var("DATABASE_URL")?; |
|
let conn = SqliteConnection::establish(&db_path)?; |
|
conn.execute("PRAGMA foreign_keys = ON;")?; |
|
let instance = UDB { |
|
conn |
|
}; |
|
Ok(Arc::new(Mutex::new(instance))) |
|
} |
|
|
|
pub fn new_agent(&self, agent: IAgent) -> USrvResult<()> { |
|
use schema::agents; |
|
diesel::insert_into(agents::table) |
|
.values(agent) |
|
.execute(&self.conn)?; |
|
Ok(()) |
|
} |
|
|
|
pub fn get_agents(&self) -> USrvResult<Vec<QAgent>> { |
|
use schema::agents; |
|
let result = agents::table |
|
.load::<QAgent>(&self.conn)?; |
|
Ok(result) |
|
} |
|
} |