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
4 years ago
|
use diesel::{
|
||
|
sqlite::SqliteConnection,
|
||
|
prelude::*
|
||
|
};
|
||
|
use dotenv::dotenv;
|
||
|
use std::{
|
||
|
env,
|
||
|
sync::{Arc, Mutex}
|
||
|
};
|
||
|
|
||
|
use crate::{
|
||
|
errors::USrvResult,
|
||
4 years ago
|
db::*
|
||
4 years ago
|
};
|
||
4 years ago
|
use u_db::schema;
|
||
4 years ago
|
|
||
|
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(())
|
||
|
}
|
||
4 years ago
|
|
||
|
pub fn get_agents(&self) -> USrvResult<Vec<QAgent>> {
|
||
|
use schema::agents;
|
||
|
let result = agents::table
|
||
|
.load::<QAgent>(&self.conn)?;
|
||
|
Ok(result)
|
||
|
}
|
||
4 years ago
|
}
|