elseware/src/login/dataaccess.rs
2019-09-15 15:14:19 -07:00

76 lines
2.3 KiB
Rust

use crate::entities::*;
// TODO: should any of these be options? as in, what does failure look like
// TODO: determine best way to design this, current path will lead to 8493024039280x functions (probably?)
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!();
}
fn get_user_settings_by_user(&self, _user: &UserAccount) -> Option<UserSettings> {
unimplemented!();
}
fn create_user_settings_by_user(&self, _user: &UserAccount) -> UserSettings {
unimplemented!();
}
fn get_characters_by_user(&self, _user: &UserAccount) -> [Option<Character>; 4] {
unimplemented!();
}
fn get_guild_card_data_by_user(&self, _user: &UserAccount) -> GuildCardData {
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)
}
fn get_user_settings_by_user(&self, user: &UserAccount) -> Option<UserSettings> {
self.connection_pool.get()
.ok()
.and_then(|conn| {
UserSettings::belonging_to(user).first::<UserSettings>(&conn).ok()
})
}
fn create_user_settings_by_user(&self, user: &UserAccount) -> UserSettings {
use elseware::schema::user_settings::dsl::user_settings;
self.connection_pool.get()
.map(|conn| {
let new_settings = NewUserSettings {
user_id: user.id,
settings: EUserSettings(settings::UserSettings::default())
};
diesel::insert_into(user_settings).values(&new_settings).get_result(&conn).unwrap()
}).unwrap()
}
}
*/