49 lines
1.1 KiB
Rust
49 lines
1.1 KiB
Rust
use diesel::r2d2;
|
|
use diesel::prelude::*;
|
|
use diesel::pg::PgConnection;
|
|
|
|
use crate::models::*;
|
|
|
|
type ConnectionPool = r2d2::Pool<r2d2::ConnectionManager<PgConnection>>;
|
|
|
|
pub trait DataAccess {
|
|
fn get_user_by_id(&self, id: u32) -> Option<UserAccount> {
|
|
unimplemented!();
|
|
}
|
|
|
|
fn get_user_by_name(&self, username: String) -> Option<UserAccount> {
|
|
unimplemented!();
|
|
}
|
|
}
|
|
|
|
#[derive(Clone)]
|
|
pub struct DBAccess {
|
|
connection_pool: ConnectionPool,
|
|
}
|
|
|
|
impl DBAccess {
|
|
pub fn new(pool: ConnectionPool) -> DBAccess {
|
|
DBAccess {
|
|
connection_pool: pool,
|
|
}
|
|
}
|
|
}
|
|
|
|
|
|
impl DataAccess for DBAccess {
|
|
fn get_user_by_name(&self, name: String) -> Option<UserAccount> {
|
|
use elseware::schema::user_accounts::dsl::{user_accounts, username};
|
|
self.connection_pool.get()
|
|
.map(|conn| {
|
|
user_accounts.filter(username.eq(name)).load::<UserAccount>(&conn)
|
|
.map(|mut user| user.pop()).unwrap_or(None)
|
|
})
|
|
.unwrap_or(None)
|
|
}
|
|
}
|
|
|
|
|
|
/*impl DataAccess for DatabaseAccess {
|
|
}*/
|
|
|