2021-03-31 04:12:26 +00:00
|
|
|
use std::io;
|
|
|
|
|
2021-03-13 10:34:57 +00:00
|
|
|
use chrono::prelude::*;
|
2021-03-31 04:12:26 +00:00
|
|
|
use fcpv2::types::{traits::{FcpRequest, FcpParser}, SSK};
|
|
|
|
use rusqlite::{
|
|
|
|
types::{FromSql, FromSqlError, FromSqlResult, ToSqlOutput, ValueRef},
|
|
|
|
Result, ToSql,
|
|
|
|
};
|
|
|
|
use serde_derive::{Deserialize, Serialize};
|
|
|
|
use uuid::Uuid;
|
2021-03-13 10:34:57 +00:00
|
|
|
|
2021-03-29 08:44:26 +00:00
|
|
|
use crate::api::response::User as JsonableUser;
|
2021-03-13 10:34:57 +00:00
|
|
|
|
|
|
|
pub const DB_PATH: &str = "hole.db";
|
2021-04-05 16:39:36 +00:00
|
|
|
pub type Time = chrono::DateTime<chrono::Local>;
|
2021-03-13 10:34:57 +00:00
|
|
|
|
2021-03-18 04:44:53 +00:00
|
|
|
pub type SignKey = String;
|
|
|
|
pub type InsertKey = SSK;
|
2021-04-21 17:11:57 +00:00
|
|
|
#[derive(Debug, Deserialize, Serialize, PartialEq, Clone)]
|
2021-03-31 04:12:26 +00:00
|
|
|
pub struct Id(pub uuid::Uuid);
|
2021-03-13 10:34:57 +00:00
|
|
|
|
2021-04-21 20:07:28 +00:00
|
|
|
#[derive(Debug, Deserialize, Serialize, Clone)]
|
2021-03-13 10:34:57 +00:00
|
|
|
pub struct User {
|
2021-03-31 04:12:26 +00:00
|
|
|
pub id: Id,
|
2021-03-13 10:34:57 +00:00
|
|
|
pub name: String,
|
|
|
|
pub sign_key: SignKey,
|
|
|
|
pub insert_key: InsertKey,
|
|
|
|
pub messages_count: u32,
|
2021-04-22 15:28:07 +00:00
|
|
|
pub my_messages_count: u32,
|
2021-03-13 10:34:57 +00:00
|
|
|
}
|
|
|
|
|
2021-03-31 04:12:26 +00:00
|
|
|
/// converting SSK to rusqlite type
|
|
|
|
impl ToSql for Id {
|
|
|
|
fn to_sql(&self) -> Result<ToSqlOutput<'_>> {
|
|
|
|
Ok(ToSqlOutput::from(self.0.to_string()))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
/// converting from rusqlite type to SSK
|
|
|
|
impl FromSql for Id {
|
|
|
|
fn column_result(value: ValueRef<'_>) -> FromSqlResult<Id> {
|
|
|
|
let id = Uuid::parse_str(&(value.as_str()?)[..]).unwrap();
|
|
|
|
Ok(Id(id))
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl User {
|
|
|
|
pub fn to_jsonable(self) -> JsonableUser {
|
|
|
|
JsonableUser {
|
|
|
|
id: self.id.0.to_string(),
|
2021-03-29 08:44:26 +00:00
|
|
|
name: self.name,
|
|
|
|
sign_key: self.sign_key,
|
|
|
|
insert_key: SSK::convert(&self.insert_key),
|
2021-03-31 04:12:26 +00:00
|
|
|
messages_count: self.messages_count,
|
2021-04-22 15:28:07 +00:00
|
|
|
my_messages_count: self.my_messages_count,
|
2021-03-29 08:44:26 +00:00
|
|
|
}
|
|
|
|
}
|
2021-03-31 04:12:26 +00:00
|
|
|
pub fn from_jsonable(json: JsonableUser) -> io::Result<User> {
|
|
|
|
Ok(User {
|
|
|
|
id: Id(Uuid::parse_str(&json.id[..]).unwrap()),
|
|
|
|
name: json.name,
|
|
|
|
sign_key: json.sign_key,
|
|
|
|
insert_key: SSK::parse(&json.insert_key[..]).unwrap(),
|
|
|
|
messages_count: json.messages_count,
|
2021-04-22 15:28:07 +00:00
|
|
|
my_messages_count: json.my_messages_count,
|
2021-03-31 04:12:26 +00:00
|
|
|
})
|
|
|
|
}
|
2021-03-29 08:44:26 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Debug, Deserialize, Serialize)]
|
2021-03-13 10:34:57 +00:00
|
|
|
pub struct Message {
|
|
|
|
pub id: u32,
|
2021-04-05 16:39:36 +00:00
|
|
|
pub date: Time,
|
|
|
|
pub user_id: Id,
|
2021-03-13 10:34:57 +00:00
|
|
|
pub message: String,
|
2021-04-05 16:39:36 +00:00
|
|
|
pub from_me: bool,
|
2021-03-13 10:34:57 +00:00
|
|
|
}
|