mod.rs 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. mod database_migration;
  2. mod database_view_migration;
  3. use crate::entities::DatabaseLayoutPB;
  4. use crate::manager::DatabaseUser;
  5. use crate::services::persistence::database_ref::DatabaseRefs;
  6. use crate::services::persistence::migration::database_migration::{
  7. is_database_rev_migrated, migration_database_rev_struct,
  8. };
  9. use crate::services::persistence::migration::database_view_migration::{
  10. is_database_view_migrated, migrate_database_view,
  11. };
  12. use database_model::LayoutRevision;
  13. use flowy_error::FlowyResult;
  14. use lib_infra::future::Fut;
  15. use std::sync::Arc;
  16. pub(crate) struct DatabaseMigration {
  17. #[allow(dead_code)]
  18. user: Arc<dyn DatabaseUser>,
  19. database_refs: Arc<DatabaseRefs>,
  20. }
  21. impl DatabaseMigration {
  22. pub fn new(user: Arc<dyn DatabaseUser>, database_refs: Arc<DatabaseRefs>) -> Self {
  23. Self {
  24. user,
  25. database_refs,
  26. }
  27. }
  28. pub async fn run(
  29. &self,
  30. user_id: i64,
  31. get_views_fn: Fut<Vec<(String, String, DatabaseLayoutPB)>>,
  32. ) -> FlowyResult<()> {
  33. let pool = self.user.db_pool()?;
  34. if !is_database_view_migrated(user_id) || !is_database_rev_migrated(user_id) {
  35. let migrated_databases = get_views_fn
  36. .await
  37. .into_iter()
  38. .map(|(view_id, name, layout)| MigratedDatabase {
  39. view_id,
  40. name,
  41. layout: layout.into(),
  42. })
  43. .collect::<Vec<_>>();
  44. migration_database_rev_struct(user_id, &migrated_databases, pool.clone()).await?;
  45. let _ = migrate_database_view(
  46. user_id,
  47. self.database_refs.clone(),
  48. &migrated_databases,
  49. pool.clone(),
  50. )
  51. .await;
  52. }
  53. Ok(())
  54. }
  55. }
  56. #[derive(Debug, Clone)]
  57. pub(crate) struct MigratedDatabase {
  58. pub(crate) view_id: String,
  59. pub(crate) name: String,
  60. pub(crate) layout: LayoutRevision,
  61. }