view_table.rs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144
  1. use diesel::sql_types::Integer;
  2. use flowy_database::schema::view_table;
  3. use flowy_infra::timestamp;
  4. use crate::{
  5. entities::{
  6. trash::{Trash, TrashType},
  7. view::{RepeatedView, UpdateViewParams, View, ViewType},
  8. },
  9. sql_tables::app::AppTable,
  10. };
  11. #[derive(PartialEq, Clone, Debug, Queryable, Identifiable, Insertable, Associations)]
  12. #[belongs_to(AppTable, foreign_key = "belong_to_id")]
  13. #[table_name = "view_table"]
  14. pub(crate) struct ViewTable {
  15. pub id: String,
  16. pub belong_to_id: String,
  17. pub name: String,
  18. pub desc: String,
  19. pub modified_time: i64,
  20. pub create_time: i64,
  21. pub thumbnail: String,
  22. pub view_type: ViewTableType,
  23. pub version: i64,
  24. pub is_trash: bool,
  25. }
  26. impl ViewTable {
  27. pub fn new(view: View) -> Self {
  28. let view_type = match view.view_type {
  29. ViewType::Blank => ViewTableType::Docs,
  30. ViewType::Doc => ViewTableType::Docs,
  31. };
  32. ViewTable {
  33. id: view.id,
  34. belong_to_id: view.belong_to_id,
  35. name: view.name,
  36. desc: view.desc,
  37. modified_time: view.modified_time,
  38. create_time: view.create_time,
  39. // TODO: thumbnail
  40. thumbnail: "".to_owned(),
  41. view_type,
  42. version: 0,
  43. is_trash: false,
  44. }
  45. }
  46. }
  47. impl std::convert::Into<View> for ViewTable {
  48. fn into(self) -> View {
  49. let view_type = match self.view_type {
  50. ViewTableType::Docs => ViewType::Doc,
  51. };
  52. View {
  53. id: self.id,
  54. belong_to_id: self.belong_to_id,
  55. name: self.name,
  56. desc: self.desc,
  57. view_type,
  58. belongings: RepeatedView::default(),
  59. modified_time: self.modified_time,
  60. version: self.version,
  61. create_time: self.create_time,
  62. }
  63. }
  64. }
  65. impl std::convert::Into<Trash> for ViewTable {
  66. fn into(self) -> Trash {
  67. Trash {
  68. id: self.id,
  69. name: self.name,
  70. modified_time: self.modified_time,
  71. create_time: self.create_time,
  72. ty: TrashType::View,
  73. }
  74. }
  75. }
  76. #[derive(AsChangeset, Identifiable, Clone, Default, Debug)]
  77. #[table_name = "view_table"]
  78. pub(crate) struct ViewTableChangeset {
  79. pub id: String,
  80. pub name: Option<String>,
  81. pub desc: Option<String>,
  82. pub thumbnail: Option<String>,
  83. pub modified_time: i64,
  84. }
  85. impl ViewTableChangeset {
  86. pub(crate) fn new(params: UpdateViewParams) -> Self {
  87. ViewTableChangeset {
  88. id: params.view_id,
  89. name: params.name,
  90. desc: params.desc,
  91. thumbnail: params.thumbnail,
  92. modified_time: timestamp(),
  93. }
  94. }
  95. pub(crate) fn from_table(table: ViewTable) -> Self {
  96. ViewTableChangeset {
  97. id: table.id,
  98. name: Some(table.name),
  99. desc: Some(table.desc),
  100. thumbnail: Some(table.thumbnail),
  101. modified_time: table.modified_time,
  102. }
  103. }
  104. }
  105. #[derive(Clone, Copy, PartialEq, Eq, Debug, Hash, FromSqlRow, AsExpression)]
  106. #[repr(i32)]
  107. #[sql_type = "Integer"]
  108. pub enum ViewTableType {
  109. Docs = 0,
  110. }
  111. impl std::default::Default for ViewTableType {
  112. fn default() -> Self { ViewTableType::Docs }
  113. }
  114. impl std::convert::From<i32> for ViewTableType {
  115. fn from(value: i32) -> Self {
  116. match value {
  117. 0 => ViewTableType::Docs,
  118. o => {
  119. log::error!("Unsupported view type {}, fallback to ViewType::Docs", o);
  120. ViewTableType::Docs
  121. },
  122. }
  123. }
  124. }
  125. impl ViewTableType {
  126. pub fn value(&self) -> i32 { *self as i32 }
  127. }
  128. impl_sql_integer_expression!(ViewTableType);