59 lines
1.6 KiB
Rust
59 lines
1.6 KiB
Rust
use diesel::prelude::*;
|
|
use std::collections::HashMap;
|
|
use diesel::insert_into;
|
|
|
|
use crate::schema::*;
|
|
use crate::schema::userinfo::dsl as userinfo_dsl;
|
|
use crate::Db;
|
|
use crate::error::{ManifoldError, ManifoldResult};
|
|
|
|
#[derive(Identifiable, Insertable, AsChangeset, Selectable, Debug, Queryable, Serialize, Clone)]
|
|
#[diesel(primary_key(user_id))]
|
|
#[diesel(table_name = userinfo)]
|
|
pub struct UserInfo {
|
|
pub(crate) user_id: i64,
|
|
pub username: String,
|
|
pub weather_location: Option<String>,
|
|
pub weather_units: Option<String>,
|
|
pub timezone: Option<String>,
|
|
pub last_seen: Option<i64>,
|
|
}
|
|
|
|
pub type ManifoldUserInfo = HashMap<u64, UserInfo>;
|
|
|
|
impl UserInfo {
|
|
pub fn load(conn: &Db) -> ManifoldResult<ManifoldUserInfo> {
|
|
let data = userinfo_dsl::userinfo
|
|
.get_results::<Self>(&mut conn.get()?);
|
|
|
|
debug!("{:?}", data);
|
|
|
|
let mut loaded_userinfo = ManifoldUserInfo::new();
|
|
|
|
match data {
|
|
Ok(d) => {
|
|
for user in d {
|
|
loaded_userinfo.insert(user.user_id as u64, user.clone());
|
|
};
|
|
}
|
|
Err(e) => {
|
|
error!("Couldn't load user data! {:?}", e);
|
|
Err("Couldn't load user data")?
|
|
}
|
|
};
|
|
|
|
Ok(loaded_userinfo)
|
|
}
|
|
|
|
pub fn insert(&self, conn: &Db) -> ManifoldResult<usize> {
|
|
insert_into(userinfo_dsl::userinfo)
|
|
.values(self)
|
|
.on_conflict(userinfo_dsl::user_id)
|
|
.do_update()
|
|
.set(self)
|
|
.execute(&mut conn.get()?)
|
|
.map_err(|e| ManifoldError::from(e))
|
|
}
|
|
|
|
}
|