use utils::{WalletAddress, Amount, Address};
use std::collections::{BTreeSet, HashMap};
use chrono::{DateTime, UTC, NaiveDate};
use dto::{UserDTO, FromDTO, FromDTOError};
use std::result::Result as StdResult;
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
pub struct User {
id: u64,
username: String,
email: (String, bool),
first: Option<(String, bool)>,
last: Option<(String, bool)>,
device_count: u8,
wallet_addresses: BTreeSet<WalletAddress>,
checking_balance: Amount,
cold_balance: Amount,
bonds: HashMap<DateTime<UTC>, u64>,
birthday: Option<(NaiveDate, bool)>,
phone: Option<(String, bool)>,
image: Option<String>,
address: Option<(Address, bool)>,
sybil_score: i8,
trust_score: i8,
enabled: bool,
registered: DateTime<UTC>,
last_activty: DateTime<UTC>,
banned: Option<DateTime<UTC>>,
}
impl FromDTO<UserDTO> for User {
fn from_dto(dto: UserDTO) -> StdResult<User, FromDTOError> {
let first_opt = match dto.first {
Some(first) => Some((first, dto.first_confirmed)),
None => None,
};
let last_opt = match dto.last {
Some(last) => Some((last, dto.last_confirmed)),
None => None,
};
let birthday_opt = match dto.birthday {
Some(birthday) => Some((birthday, dto.birthday_confirmed)),
None => None,
};
let phone_opt = match dto.phone {
Some(phone) => Some((phone, dto.phone_confirmed)),
None => None,
};
let adress_opt = match dto.address {
Some(address) => Some((address, dto.address_confirmed)),
None => None,
};
Ok(User {
id: dto.id,
username: dto.username,
email: (dto.email, dto.email_confirmed),
first: first_opt,
last: last_opt,
device_count: dto.device_count,
wallet_addresses: dto.wallet_addresses,
checking_balance: dto.checking_balance,
cold_balance: dto.cold_balance,
bonds: dto.bonds,
birthday: birthday_opt,
phone: phone_opt,
image: dto.image,
address: adress_opt,
sybil_score: dto.sybil_score,
trust_score: dto.trust_score,
enabled: dto.enabled,
registered: dto.registered,
last_activty: dto.last_activty,
banned: dto.banned,
})
}
}
#[derive(Clone, RustcEncodable, RustcDecodable, Debug)]
pub struct Transaction {
id: u64,
origin_user: u64,
destination_user: u64,
destination: WalletAddress,
amount: Amount,
timestamp: DateTime<UTC>,
}
impl Transaction {
pub fn get_id(&self) -> u64 {
self.id
}
pub fn get_destination_user(&self) -> u64 {
self.destination_user
}
pub fn get_destination(&self) -> &WalletAddress {
&self.destination
}
pub fn get_origin_user(&self) -> u64 {
self.origin_user
}
pub fn get_amount(&self) -> Amount {
self.amount
}
pub fn get_timestamp(&self) -> &DateTime<UTC> {
&self.timestamp
}
}