user_default.rs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172
  1. use crate::{
  2. service::{
  3. app::sql_builder::NewAppSqlBuilder as AppBuilder,
  4. view::create_view,
  5. workspace::sql_builder::NewWorkspaceBuilder as WorkspaceBuilder,
  6. },
  7. sqlx_ext::{map_sqlx_error, DBTransaction},
  8. };
  9. use flowy_document::services::doc::doc_initial_string;
  10. use flowy_net::errors::ServerError;
  11. use flowy_workspace::protobuf::{App, CreateViewParams, View, ViewType, Workspace};
  12. pub async fn create_default_workspace(
  13. transaction: &mut DBTransaction<'_>,
  14. user_id: &str,
  15. ) -> Result<Workspace, ServerError> {
  16. let workspace = create_workspace(transaction, user_id).await?;
  17. let app = create_app(transaction, user_id, &workspace).await?;
  18. let _ = create_default_view(transaction, &app).await?;
  19. Ok(workspace)
  20. }
  21. async fn create_workspace(transaction: &mut DBTransaction<'_>, user_id: &str) -> Result<Workspace, ServerError> {
  22. let (sql, args, workspace) = WorkspaceBuilder::new(user_id.as_ref())
  23. .name("DefaultWorkspace")
  24. .desc("Workspace created by AppFlowy")
  25. .build()?;
  26. let _ = sqlx::query_with(&sql, args)
  27. .execute(transaction)
  28. .await
  29. .map_err(map_sqlx_error)?;
  30. Ok(workspace)
  31. }
  32. async fn create_app(
  33. transaction: &mut DBTransaction<'_>,
  34. user_id: &str,
  35. workspace: &Workspace,
  36. ) -> Result<App, ServerError> {
  37. let (sql, args, app) = AppBuilder::new(user_id, &workspace.id)
  38. .name("DefaultApp")
  39. .desc("App created by AppFlowy")
  40. .build()?;
  41. let _ = sqlx::query_with(&sql, args)
  42. .execute(transaction)
  43. .await
  44. .map_err(map_sqlx_error)?;
  45. Ok(app)
  46. }
  47. async fn create_default_view(transaction: &mut DBTransaction<'_>, app: &App) -> Result<View, ServerError> {
  48. let params = CreateViewParams {
  49. belong_to_id: app.id.clone(),
  50. name: "DefaultView".to_string(),
  51. desc: "View created by AppFlowy".to_string(),
  52. thumbnail: "123.png".to_string(),
  53. view_type: ViewType::Doc,
  54. data: doc_initial_string(),
  55. unknown_fields: Default::default(),
  56. cached_size: Default::default(),
  57. };
  58. let view = create_view(transaction, params).await?;
  59. Ok(view)
  60. }