view_table.rs 2.8 KB

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