v2_impl.rs 7.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234
  1. use crate::services::{
  2. folder_editor::ClientFolderEditor,
  3. persistence::{AppChangeset, FolderPersistenceTransaction, ViewChangeset, WorkspaceChangeset},
  4. };
  5. use flowy_error::{FlowyError, FlowyResult};
  6. use flowy_folder_data_model::entities::{
  7. app::App,
  8. trash::{RepeatedTrash, Trash},
  9. view::View,
  10. workspace::Workspace,
  11. };
  12. use std::sync::Arc;
  13. impl FolderPersistenceTransaction for ClientFolderEditor {
  14. fn create_workspace(&self, _user_id: &str, workspace: Workspace) -> FlowyResult<()> {
  15. if let Some(change) = self.folder.write().create_workspace(workspace)? {
  16. let _ = self.apply_change(change)?;
  17. }
  18. Ok(())
  19. }
  20. fn read_workspaces(&self, _user_id: &str, workspace_id: Option<String>) -> FlowyResult<Vec<Workspace>> {
  21. let workspaces = self.folder.read().read_workspaces(workspace_id)?;
  22. Ok(workspaces)
  23. }
  24. fn update_workspace(&self, changeset: WorkspaceChangeset) -> FlowyResult<()> {
  25. if let Some(change) = self
  26. .folder
  27. .write()
  28. .update_workspace(&changeset.id, changeset.name, changeset.desc)?
  29. {
  30. let _ = self.apply_change(change)?;
  31. }
  32. Ok(())
  33. }
  34. fn delete_workspace(&self, workspace_id: &str) -> FlowyResult<()> {
  35. if let Some(change) = self.folder.write().delete_workspace(workspace_id)? {
  36. let _ = self.apply_change(change)?;
  37. }
  38. Ok(())
  39. }
  40. fn create_app(&self, app: App) -> FlowyResult<()> {
  41. if let Some(change) = self.folder.write().create_app(app)? {
  42. let _ = self.apply_change(change)?;
  43. }
  44. Ok(())
  45. }
  46. fn update_app(&self, changeset: AppChangeset) -> FlowyResult<()> {
  47. if let Some(change) = self
  48. .folder
  49. .write()
  50. .update_app(&changeset.id, changeset.name, changeset.desc)?
  51. {
  52. let _ = self.apply_change(change)?;
  53. }
  54. Ok(())
  55. }
  56. fn read_app(&self, app_id: &str) -> FlowyResult<App> {
  57. let app = self.folder.read().read_app(app_id)?;
  58. Ok(app)
  59. }
  60. fn read_workspace_apps(&self, workspace_id: &str) -> FlowyResult<Vec<App>> {
  61. let workspaces = self.folder.read().read_workspaces(Some(workspace_id.to_owned()))?;
  62. match workspaces.first() {
  63. None => {
  64. Err(FlowyError::record_not_found().context(format!("can't find workspace with id {}", workspace_id)))
  65. }
  66. Some(workspace) => Ok(workspace.apps.clone().take_items()),
  67. }
  68. }
  69. fn delete_app(&self, app_id: &str) -> FlowyResult<App> {
  70. let app = self.folder.read().read_app(app_id)?;
  71. if let Some(change) = self.folder.write().delete_app(app_id)? {
  72. let _ = self.apply_change(change)?;
  73. }
  74. Ok(app)
  75. }
  76. fn move_app(&self, app_id: &str, from: usize, to: usize) -> FlowyResult<()> {
  77. if let Some(change) = self.folder.write().move_app(app_id, from, to)? {
  78. let _ = self.apply_change(change)?;
  79. }
  80. Ok(())
  81. }
  82. fn create_view(&self, view: View) -> FlowyResult<()> {
  83. if let Some(change) = self.folder.write().create_view(view)? {
  84. let _ = self.apply_change(change)?;
  85. }
  86. Ok(())
  87. }
  88. fn read_view(&self, view_id: &str) -> FlowyResult<View> {
  89. let view = self.folder.read().read_view(view_id)?;
  90. Ok(view)
  91. }
  92. fn read_views(&self, belong_to_id: &str) -> FlowyResult<Vec<View>> {
  93. let views = self.folder.read().read_views(belong_to_id)?;
  94. Ok(views)
  95. }
  96. fn update_view(&self, changeset: ViewChangeset) -> FlowyResult<()> {
  97. if let Some(change) =
  98. self.folder
  99. .write()
  100. .update_view(&changeset.id, changeset.name, changeset.desc, changeset.modified_time)?
  101. {
  102. let _ = self.apply_change(change)?;
  103. }
  104. Ok(())
  105. }
  106. fn delete_view(&self, view_id: &str) -> FlowyResult<()> {
  107. if let Some(change) = self.folder.write().delete_view(view_id)? {
  108. let _ = self.apply_change(change)?;
  109. }
  110. Ok(())
  111. }
  112. fn move_view(&self, view_id: &str, from: usize, to: usize) -> FlowyResult<()> {
  113. if let Some(change) = self.folder.write().move_view(view_id, from, to)? {
  114. let _ = self.apply_change(change)?;
  115. }
  116. Ok(())
  117. }
  118. fn create_trash(&self, trashes: Vec<Trash>) -> FlowyResult<()> {
  119. if let Some(change) = self.folder.write().create_trash(trashes)? {
  120. let _ = self.apply_change(change)?;
  121. }
  122. Ok(())
  123. }
  124. fn read_trash(&self, trash_id: Option<String>) -> FlowyResult<RepeatedTrash> {
  125. let trash = self.folder.read().read_trash(trash_id)?;
  126. Ok(RepeatedTrash { items: trash })
  127. }
  128. fn delete_trash(&self, trash_ids: Option<Vec<String>>) -> FlowyResult<()> {
  129. if let Some(change) = self.folder.write().delete_trash(trash_ids)? {
  130. let _ = self.apply_change(change)?;
  131. }
  132. Ok(())
  133. }
  134. }
  135. impl<T> FolderPersistenceTransaction for Arc<T>
  136. where
  137. T: FolderPersistenceTransaction + ?Sized,
  138. {
  139. fn create_workspace(&self, user_id: &str, workspace: Workspace) -> FlowyResult<()> {
  140. (**self).create_workspace(user_id, workspace)
  141. }
  142. fn read_workspaces(&self, user_id: &str, workspace_id: Option<String>) -> FlowyResult<Vec<Workspace>> {
  143. (**self).read_workspaces(user_id, workspace_id)
  144. }
  145. fn update_workspace(&self, changeset: WorkspaceChangeset) -> FlowyResult<()> {
  146. (**self).update_workspace(changeset)
  147. }
  148. fn delete_workspace(&self, workspace_id: &str) -> FlowyResult<()> {
  149. (**self).delete_workspace(workspace_id)
  150. }
  151. fn create_app(&self, app: App) -> FlowyResult<()> {
  152. (**self).create_app(app)
  153. }
  154. fn update_app(&self, changeset: AppChangeset) -> FlowyResult<()> {
  155. (**self).update_app(changeset)
  156. }
  157. fn read_app(&self, app_id: &str) -> FlowyResult<App> {
  158. (**self).read_app(app_id)
  159. }
  160. fn read_workspace_apps(&self, workspace_id: &str) -> FlowyResult<Vec<App>> {
  161. (**self).read_workspace_apps(workspace_id)
  162. }
  163. fn delete_app(&self, app_id: &str) -> FlowyResult<App> {
  164. (**self).delete_app(app_id)
  165. }
  166. fn move_app(&self, app_id: &str, from: usize, to: usize) -> FlowyResult<()> {
  167. (**self).move_app(app_id, from, to)
  168. }
  169. fn create_view(&self, view: View) -> FlowyResult<()> {
  170. (**self).create_view(view)
  171. }
  172. fn read_view(&self, view_id: &str) -> FlowyResult<View> {
  173. (**self).read_view(view_id)
  174. }
  175. fn read_views(&self, belong_to_id: &str) -> FlowyResult<Vec<View>> {
  176. (**self).read_views(belong_to_id)
  177. }
  178. fn update_view(&self, changeset: ViewChangeset) -> FlowyResult<()> {
  179. (**self).update_view(changeset)
  180. }
  181. fn delete_view(&self, view_id: &str) -> FlowyResult<()> {
  182. (**self).delete_view(view_id)
  183. }
  184. fn move_view(&self, view_id: &str, from: usize, to: usize) -> FlowyResult<()> {
  185. (**self).move_view(view_id, from, to)
  186. }
  187. fn create_trash(&self, trashes: Vec<Trash>) -> FlowyResult<()> {
  188. (**self).create_trash(trashes)
  189. }
  190. fn read_trash(&self, trash_id: Option<String>) -> FlowyResult<RepeatedTrash> {
  191. (**self).read_trash(trash_id)
  192. }
  193. fn delete_trash(&self, trash_ids: Option<Vec<String>>) -> FlowyResult<()> {
  194. (**self).delete_trash(trash_ids)
  195. }
  196. }