2021-09-27 14:49:05 +08:00
|
|
|
use crate::{
|
|
|
|
entities::doc::{RevType, Revision},
|
|
|
|
services::util::md5,
|
|
|
|
};
|
2021-09-23 13:15:35 +08:00
|
|
|
use diesel::sql_types::Integer;
|
2021-09-26 16:39:57 +08:00
|
|
|
use flowy_database::schema::rev_table;
|
2021-09-23 13:15:35 +08:00
|
|
|
|
|
|
|
#[derive(PartialEq, Clone, Debug, Queryable, Identifiable, Insertable, Associations)]
|
2021-09-26 16:39:57 +08:00
|
|
|
#[table_name = "rev_table"]
|
|
|
|
pub(crate) struct RevTable {
|
2021-09-27 14:49:05 +08:00
|
|
|
id: i32,
|
2021-09-25 21:47:02 +08:00
|
|
|
pub(crate) doc_id: String,
|
2021-09-23 15:49:10 +08:00
|
|
|
pub(crate) base_rev_id: i64,
|
|
|
|
pub(crate) rev_id: i64,
|
2021-09-23 13:15:35 +08:00
|
|
|
pub(crate) data: Vec<u8>,
|
2021-09-26 16:39:57 +08:00
|
|
|
pub(crate) state: RevState,
|
|
|
|
pub(crate) ty: RevTableType,
|
2021-09-23 13:15:35 +08:00
|
|
|
}
|
|
|
|
|
|
|
|
#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash, FromSqlRow, AsExpression)]
|
|
|
|
#[repr(i32)]
|
|
|
|
#[sql_type = "Integer"]
|
2021-09-26 16:39:57 +08:00
|
|
|
pub enum RevState {
|
2021-09-25 21:47:02 +08:00
|
|
|
Local = 0,
|
|
|
|
Acked = 1,
|
2021-09-23 13:15:35 +08:00
|
|
|
}
|
|
|
|
|
2021-09-26 16:39:57 +08:00
|
|
|
impl std::default::Default for RevState {
|
|
|
|
fn default() -> Self { RevState::Local }
|
2021-09-23 13:15:35 +08:00
|
|
|
}
|
|
|
|
|
2021-09-26 16:39:57 +08:00
|
|
|
impl std::convert::From<i32> for RevState {
|
2021-09-23 13:15:35 +08:00
|
|
|
fn from(value: i32) -> Self {
|
|
|
|
match value {
|
2021-09-26 16:39:57 +08:00
|
|
|
0 => RevState::Local,
|
|
|
|
1 => RevState::Acked,
|
2021-09-23 13:15:35 +08:00
|
|
|
o => {
|
2021-09-26 16:39:57 +08:00
|
|
|
log::error!("Unsupported rev state {}, fallback to RevState::Local", o);
|
|
|
|
RevState::Local
|
2021-09-23 13:15:35 +08:00
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
2021-09-26 16:39:57 +08:00
|
|
|
impl RevState {
|
2021-09-23 13:15:35 +08:00
|
|
|
pub fn value(&self) -> i32 { *self as i32 }
|
|
|
|
}
|
2021-09-26 16:39:57 +08:00
|
|
|
impl_sql_integer_expression!(RevState);
|
|
|
|
|
2021-09-27 14:49:05 +08:00
|
|
|
impl std::convert::Into<Revision> for RevTable {
|
|
|
|
fn into(self) -> Revision {
|
|
|
|
let md5 = md5(&self.data);
|
|
|
|
Revision {
|
|
|
|
base_rev_id: self.base_rev_id,
|
|
|
|
rev_id: self.rev_id,
|
2021-09-29 17:40:34 +08:00
|
|
|
delta_data: self.data,
|
2021-09-27 14:49:05 +08:00
|
|
|
md5,
|
|
|
|
doc_id: self.doc_id,
|
|
|
|
ty: self.ty.into(),
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl std::convert::Into<RevTableType> for RevType {
|
|
|
|
fn into(self) -> RevTableType {
|
|
|
|
match self {
|
|
|
|
RevType::Local => RevTableType::Local,
|
|
|
|
RevType::Remote => RevTableType::Remote,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
impl std::convert::From<RevTableType> for RevType {
|
|
|
|
fn from(ty: RevTableType) -> Self {
|
|
|
|
match ty {
|
|
|
|
RevTableType::Local => RevType::Local,
|
|
|
|
RevTableType::Remote => RevType::Remote,
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2021-09-26 16:39:57 +08:00
|
|
|
#[derive(Clone, Copy, PartialEq, Eq, Debug, Hash, FromSqlRow, AsExpression)]
|
|
|
|
#[repr(i32)]
|
|
|
|
#[sql_type = "Integer"]
|
|
|
|
pub enum RevTableType {
|
|
|
|
Local = 0,
|
|
|
|
Remote = 1,
|
|
|
|
}
|
|
|
|
|
|
|
|
impl std::default::Default for RevTableType {
|
|
|
|
fn default() -> Self { RevTableType::Local }
|
|
|
|
}
|
2021-09-23 13:15:35 +08:00
|
|
|
|
2021-09-26 16:39:57 +08:00
|
|
|
impl std::convert::From<i32> for RevTableType {
|
|
|
|
fn from(value: i32) -> Self {
|
|
|
|
match value {
|
|
|
|
0 => RevTableType::Local,
|
|
|
|
1 => RevTableType::Remote,
|
|
|
|
o => {
|
|
|
|
log::error!("Unsupported rev type {}, fallback to RevTableType::Local", o);
|
|
|
|
RevTableType::Local
|
|
|
|
},
|
|
|
|
}
|
|
|
|
}
|
|
|
|
}
|
|
|
|
impl RevTableType {
|
|
|
|
pub fn value(&self) -> i32 { *self as i32 }
|
|
|
|
}
|
|
|
|
impl_sql_integer_expression!(RevTableType);
|
2021-09-23 13:15:35 +08:00
|
|
|
|
2021-10-01 20:58:13 +08:00
|
|
|
#[allow(dead_code)]
|
2021-09-26 16:39:57 +08:00
|
|
|
pub(crate) struct RevChangeset {
|
2021-09-25 21:47:02 +08:00
|
|
|
pub(crate) doc_id: String,
|
2021-09-23 15:49:10 +08:00
|
|
|
pub(crate) rev_id: i64,
|
2021-09-27 14:49:05 +08:00
|
|
|
pub(crate) state: RevState,
|
2021-09-26 16:39:57 +08:00
|
|
|
}
|