v1_impl.rs 6.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205
  1. use crate::services::persistence::{
  2. version_1::{
  3. app_sql::{AppChangeset, AppTableSql},
  4. view_sql::{ViewChangeset, ViewTableSql},
  5. workspace_sql::{WorkspaceChangeset, WorkspaceTableSql},
  6. },
  7. FolderPersistenceTransaction, TrashTableSql,
  8. };
  9. use flowy_database::DBConnection;
  10. use flowy_error::FlowyResult;
  11. use folder_rev_model::{AppRevision, TrashRevision, ViewRevision, WorkspaceRevision};
  12. /// V1Transaction is deprecated since version 0.0.2 version
  13. pub struct V1Transaction<'a>(pub &'a DBConnection);
  14. impl<'a> FolderPersistenceTransaction for V1Transaction<'a> {
  15. fn create_workspace(&self, user_id: &str, workspace_rev: WorkspaceRevision) -> FlowyResult<()> {
  16. WorkspaceTableSql::create_workspace(user_id, workspace_rev, self.0)?;
  17. Ok(())
  18. }
  19. fn read_workspaces(&self, user_id: &str, workspace_id: Option<String>) -> FlowyResult<Vec<WorkspaceRevision>> {
  20. let tables = WorkspaceTableSql::read_workspaces(user_id, workspace_id, self.0)?;
  21. let workspaces = tables.into_iter().map(WorkspaceRevision::from).collect::<Vec<_>>();
  22. Ok(workspaces)
  23. }
  24. fn update_workspace(&self, changeset: WorkspaceChangeset) -> FlowyResult<()> {
  25. WorkspaceTableSql::update_workspace(changeset, self.0)
  26. }
  27. fn delete_workspace(&self, workspace_id: &str) -> FlowyResult<()> {
  28. WorkspaceTableSql::delete_workspace(workspace_id, self.0)
  29. }
  30. fn create_app(&self, app_rev: AppRevision) -> FlowyResult<()> {
  31. AppTableSql::create_app(app_rev, self.0)?;
  32. Ok(())
  33. }
  34. fn update_app(&self, changeset: AppChangeset) -> FlowyResult<()> {
  35. AppTableSql::update_app(changeset, self.0)?;
  36. Ok(())
  37. }
  38. fn read_app(&self, app_id: &str) -> FlowyResult<AppRevision> {
  39. let app_revision: AppRevision = AppTableSql::read_app(app_id, self.0)?.into();
  40. Ok(app_revision)
  41. }
  42. fn read_workspace_apps(&self, workspace_id: &str) -> FlowyResult<Vec<AppRevision>> {
  43. let tables = AppTableSql::read_workspace_apps(workspace_id, self.0)?;
  44. let apps = tables.into_iter().map(AppRevision::from).collect::<Vec<_>>();
  45. Ok(apps)
  46. }
  47. fn delete_app(&self, app_id: &str) -> FlowyResult<AppRevision> {
  48. let app_revision: AppRevision = AppTableSql::delete_app(app_id, self.0)?.into();
  49. Ok(app_revision)
  50. }
  51. fn move_app(&self, _app_id: &str, _from: usize, _to: usize) -> FlowyResult<()> {
  52. Ok(())
  53. }
  54. fn create_view(&self, view_rev: ViewRevision) -> FlowyResult<()> {
  55. ViewTableSql::create_view(view_rev, self.0)?;
  56. Ok(())
  57. }
  58. fn read_view(&self, view_id: &str) -> FlowyResult<ViewRevision> {
  59. let view_revision: ViewRevision = ViewTableSql::read_view(view_id, self.0)?.into();
  60. Ok(view_revision)
  61. }
  62. fn read_views(&self, belong_to_id: &str) -> FlowyResult<Vec<ViewRevision>> {
  63. let tables = ViewTableSql::read_views(belong_to_id, self.0)?;
  64. let views = tables.into_iter().map(ViewRevision::from).collect::<Vec<_>>();
  65. Ok(views)
  66. }
  67. fn update_view(&self, changeset: ViewChangeset) -> FlowyResult<()> {
  68. ViewTableSql::update_view(changeset, self.0)?;
  69. Ok(())
  70. }
  71. fn delete_view(&self, view_id: &str) -> FlowyResult<ViewRevision> {
  72. let view_revision: ViewRevision = ViewTableSql::read_view(view_id, self.0)?.into();
  73. ViewTableSql::delete_view(view_id, self.0)?;
  74. Ok(view_revision)
  75. }
  76. fn move_view(&self, _view_id: &str, _from: usize, _to: usize) -> FlowyResult<()> {
  77. Ok(())
  78. }
  79. fn create_trash(&self, trashes: Vec<TrashRevision>) -> FlowyResult<()> {
  80. TrashTableSql::create_trash(trashes, self.0)?;
  81. Ok(())
  82. }
  83. fn read_trash(&self, trash_id: Option<String>) -> FlowyResult<Vec<TrashRevision>> {
  84. match trash_id {
  85. None => TrashTableSql::read_all(self.0),
  86. Some(trash_id) => {
  87. let trash_revision: TrashRevision = TrashTableSql::read(&trash_id, self.0)?.into();
  88. Ok(vec![trash_revision])
  89. }
  90. }
  91. }
  92. fn delete_trash(&self, trash_ids: Option<Vec<String>>) -> FlowyResult<()> {
  93. match trash_ids {
  94. None => TrashTableSql::delete_all(self.0),
  95. Some(trash_ids) => {
  96. for trash_id in &trash_ids {
  97. TrashTableSql::delete_trash(trash_id, self.0)?;
  98. }
  99. Ok(())
  100. }
  101. }
  102. }
  103. }
  104. // https://www.reddit.com/r/rust/comments/droxdg/why_arent_traits_impld_for_boxdyn_trait/
  105. impl<T> FolderPersistenceTransaction for Box<T>
  106. where
  107. T: FolderPersistenceTransaction + ?Sized,
  108. {
  109. fn create_workspace(&self, user_id: &str, workspace_rev: WorkspaceRevision) -> FlowyResult<()> {
  110. (**self).create_workspace(user_id, workspace_rev)
  111. }
  112. fn read_workspaces(&self, user_id: &str, workspace_id: Option<String>) -> FlowyResult<Vec<WorkspaceRevision>> {
  113. (**self).read_workspaces(user_id, workspace_id)
  114. }
  115. fn update_workspace(&self, changeset: WorkspaceChangeset) -> FlowyResult<()> {
  116. (**self).update_workspace(changeset)
  117. }
  118. fn delete_workspace(&self, workspace_id: &str) -> FlowyResult<()> {
  119. (**self).delete_workspace(workspace_id)
  120. }
  121. fn create_app(&self, app_rev: AppRevision) -> FlowyResult<()> {
  122. (**self).create_app(app_rev)
  123. }
  124. fn update_app(&self, changeset: AppChangeset) -> FlowyResult<()> {
  125. (**self).update_app(changeset)
  126. }
  127. fn read_app(&self, app_id: &str) -> FlowyResult<AppRevision> {
  128. (**self).read_app(app_id)
  129. }
  130. fn read_workspace_apps(&self, workspace_id: &str) -> FlowyResult<Vec<AppRevision>> {
  131. (**self).read_workspace_apps(workspace_id)
  132. }
  133. fn delete_app(&self, app_id: &str) -> FlowyResult<AppRevision> {
  134. (**self).delete_app(app_id)
  135. }
  136. fn move_app(&self, _app_id: &str, _from: usize, _to: usize) -> FlowyResult<()> {
  137. Ok(())
  138. }
  139. fn create_view(&self, view_rev: ViewRevision) -> FlowyResult<()> {
  140. (**self).create_view(view_rev)
  141. }
  142. fn read_view(&self, view_id: &str) -> FlowyResult<ViewRevision> {
  143. (**self).read_view(view_id)
  144. }
  145. fn read_views(&self, belong_to_id: &str) -> FlowyResult<Vec<ViewRevision>> {
  146. (**self).read_views(belong_to_id)
  147. }
  148. fn update_view(&self, changeset: ViewChangeset) -> FlowyResult<()> {
  149. (**self).update_view(changeset)
  150. }
  151. fn delete_view(&self, view_id: &str) -> FlowyResult<ViewRevision> {
  152. (**self).delete_view(view_id)
  153. }
  154. fn move_view(&self, _view_id: &str, _from: usize, _to: usize) -> FlowyResult<()> {
  155. Ok(())
  156. }
  157. fn create_trash(&self, trashes: Vec<TrashRevision>) -> FlowyResult<()> {
  158. (**self).create_trash(trashes)
  159. }
  160. fn read_trash(&self, trash_id: Option<String>) -> FlowyResult<Vec<TrashRevision>> {
  161. (**self).read_trash(trash_id)
  162. }
  163. fn delete_trash(&self, trash_ids: Option<Vec<String>>) -> FlowyResult<()> {
  164. (**self).delete_trash(trash_ids)
  165. }
  166. }