view.rs 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. use crate::{
  2. entities::view::{CreateViewParams, View, ViewTypeIdentifier},
  3. impl_sql_integer_expression,
  4. sql_tables::app::AppTable,
  5. };
  6. use diesel::sql_types::Integer;
  7. use flowy_database::schema::{view_table, view_table::dsl};
  8. use flowy_infra::{timestamp, uuid};
  9. #[derive(PartialEq, Clone, Debug, Queryable, Identifiable, Insertable, Associations)]
  10. #[belongs_to(AppTable, foreign_key = "app_id")]
  11. #[table_name = "view_table"]
  12. pub(crate) struct ViewTable {
  13. pub id: String,
  14. pub app_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: ViewType,
  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. app_id: params.app_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. ViewType::Docs => ViewTypeIdentifier::Docs,
  44. };
  45. View {
  46. id: self.id,
  47. app_id: self.app_id,
  48. name: self.name,
  49. desc: self.desc,
  50. view_type,
  51. }
  52. }
  53. }
  54. #[derive(AsChangeset, Identifiable, Clone, Default, Debug)]
  55. #[table_name = "view_table"]
  56. pub struct ViewTableChangeset {
  57. pub id: String,
  58. pub name: Option<String>,
  59. pub desc: Option<String>,
  60. pub modified_time: i64,
  61. }
  62. impl ViewTableChangeset {
  63. pub fn new(id: &str) -> Self {
  64. ViewTableChangeset {
  65. id: id.to_string(),
  66. name: None,
  67. desc: None,
  68. modified_time: timestamp(),
  69. }
  70. }
  71. }
  72. #[derive(Clone, Copy, PartialEq, Eq, Debug, Hash, FromSqlRow, AsExpression)]
  73. #[repr(i32)]
  74. #[sql_type = "Integer"]
  75. pub enum ViewType {
  76. Docs = 0,
  77. }
  78. impl std::default::Default for ViewType {
  79. fn default() -> Self { ViewType::Docs }
  80. }
  81. impl std::convert::From<i32> for ViewType {
  82. fn from(value: i32) -> Self {
  83. match value {
  84. 0 => ViewType::Docs,
  85. o => {
  86. log::error!("Unsupported view type {}, fallback to ViewType::Docs", o);
  87. ViewType::Docs
  88. },
  89. }
  90. }
  91. }
  92. impl ViewType {
  93. pub fn value(&self) -> i32 { *self as i32 }
  94. }
  95. impl_sql_integer_expression!(ViewType);