use crate::accounts::{Account,AccountHandler};
use finql::data_handler::DataError;
#[derive(Debug)]
pub struct User {
pub id: Option<usize>,
pub name: String,
pub display: Option<String>,
pub salt_hash: String,
pub is_admin: bool,
}
pub trait UserHandler: AccountHandler {
fn clean_users(&mut self) -> Result<(), DataError>;
fn init_users(&mut self) -> Result<(), DataError>;
fn insert_user(&mut self, user: &mut User, password: &str) -> Result<usize, DataError>;
fn get_user_by_credentials(&mut self, name: &str, password: &str) -> Option<User>;
fn get_user_by_id(&mut self, user_id: usize) -> Option<User>;
fn get_user_id(&mut self, name: &str) -> Option<usize>;
fn get_admin_id(&mut self, name: &str) -> Option<usize>;
fn get_user_id_by_credentials(&mut self, name: &str, password: &str) -> Option<usize>;
fn update_user(&mut self, user: &User) -> Result<(), DataError>;
fn update_password(&mut self, user: &mut User, password: &str) -> Result<(), DataError>;
fn delete_user(&mut self, user_id: usize) -> Result<(), DataError>;
fn add_account_right(&mut self, user_id: usize, account_id: usize) -> Result<usize, DataError>;
fn remove_account_right(&mut self, user_id: usize, account_id: usize) -> Result<(), DataError>;
fn get_user_accounts(&mut self, user_id: usize) -> Result<Vec<Account>, DataError>;
fn valid_accounts(&mut self, user_id: usize, ids: &Vec<usize>) -> Result<Vec<usize>, DataError> {
let user_accounts = self.get_user_accounts(user_id)?;
let mut valid_ids = Vec::new();
for id in ids {
for account in &user_accounts {
if account.id.unwrap() == *id {
valid_ids.push(*id);
continue;
}
};
}
Ok(valid_ids)
}
fn get_transaction_account_if_valid(&mut self, trans_id: usize, user_id: usize) -> Result<Account, DataError>;
fn remove_transaction(&mut self, trans_id: usize, user_id: usize)-> Result<(), DataError>;
}