elseware/src/login/dataaccess.rs
2019-08-23 23:01:36 -07:00

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 {
}*/