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

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
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(())
}
4 years ago
pub fn get_agents(&self) -> USrvResult<Vec<QAgent>> {
use schema::agents;
let result = agents::table
.load::<QAgent>(&self.conn)?;
Ok(result)
}
}