view_controller.rs 2.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263
  1. use crate::{
  2. entities::view::{CreateViewParams, DeleteViewParams, QueryViewParams, UpdateViewParams, View},
  3. errors::WorkspaceError,
  4. module::WorkspaceDatabase,
  5. observable::{send_observable, WorkspaceObservable},
  6. services::server::Server,
  7. sql_tables::view::{ViewTable, ViewTableChangeset, ViewTableSql},
  8. };
  9. use flowy_net::request::HttpRequestBuilder;
  10. use std::sync::Arc;
  11. pub(crate) struct ViewController {
  12. sql: Arc<ViewTableSql>,
  13. server: Server,
  14. }
  15. impl ViewController {
  16. pub(crate) fn new(database: Arc<dyn WorkspaceDatabase>, server: Server) -> Self {
  17. let sql = Arc::new(ViewTableSql { database });
  18. Self { sql, server }
  19. }
  20. pub(crate) async fn create_view(&self, params: CreateViewParams) -> Result<View, WorkspaceError> {
  21. let view_table = ViewTable::new(params);
  22. let view: View = view_table.clone().into();
  23. let _ = self.sql.create_view(view_table)?;
  24. send_observable(&view.belong_to_id, WorkspaceObservable::AppCreateView);
  25. Ok(view)
  26. }
  27. pub(crate) async fn read_view(&self, view_id: &str, is_trash: bool) -> Result<View, WorkspaceError> {
  28. let view_table = self.sql.read_view(view_id, is_trash)?;
  29. let view: View = view_table.into();
  30. Ok(view)
  31. }
  32. pub(crate) async fn delete_view(&self, view_id: &str) -> Result<(), WorkspaceError> {
  33. let view = self.sql.delete_view(view_id)?;
  34. send_observable(&view.belong_to_id, WorkspaceObservable::AppDeleteView);
  35. Ok(())
  36. }
  37. pub(crate) async fn read_views_belong_to(&self, belong_to_id: &str) -> Result<Vec<View>, WorkspaceError> {
  38. let views = self
  39. .sql
  40. .read_views_belong_to(belong_to_id)?
  41. .into_iter()
  42. .map(|view_table| view_table.into())
  43. .collect::<Vec<View>>();
  44. Ok(views)
  45. }
  46. pub(crate) async fn update_view(&self, params: UpdateViewParams) -> Result<(), WorkspaceError> {
  47. let changeset = ViewTableChangeset::new(params);
  48. let view_id = changeset.id.clone();
  49. let _ = self.sql.update_view(changeset)?;
  50. send_observable(&view_id, WorkspaceObservable::ViewUpdated);
  51. Ok(())
  52. }
  53. }