From 9c3be7e4885a961dfd82ed6708aef40ddd615cd0 Mon Sep 17 00:00:00 2001 From: "Nathan.fooo" <86001920+appflowy@users.noreply.github.com> Date: Tue, 12 Mar 2024 10:59:52 +0800 Subject: [PATCH] fix: stuck when importing large csv file (#4878) * chore: fix import csv file * chore: update collab * chore: bump collab * chore: workaround for row creating * fix: test --- frontend/appflowy_tauri/src-tauri/Cargo.lock | 21 +++---- frontend/appflowy_tauri/src-tauri/Cargo.toml | 14 ++--- frontend/appflowy_web/wasm-libs/Cargo.toml | 14 ++--- frontend/rust-lib/Cargo.lock | 19 +++--- frontend/rust-lib/Cargo.toml | 14 ++--- .../event-integration/src/folder_event.rs | 24 +++++++- .../tests/asset/csv_10240r_15c.csv.zip | Bin 0 -> 80343 bytes .../tests/asset/csv_492r_17c.csv.zip | Bin 0 -> 3836 bytes .../tests/folder/local_test/import_test.rs | 55 ++++++++++++++++++ .../tests/folder/local_test/mod.rs | 1 + .../src/deps_resolve/folder_deps.rs | 7 ++- frontend/rust-lib/flowy-database2/Cargo.toml | 2 +- .../src/entities/database_entities.rs | 6 +- .../rust-lib/flowy-database2/src/manager.rs | 2 +- .../tests/database/share_test/export_test.rs | 3 + .../flowy-folder/src/entities/view.rs | 12 ++-- .../flowy-folder/src/event_handler.rs | 13 +++-- .../rust-lib/flowy-folder/src/event_map.rs | 2 +- frontend/rust-lib/flowy-folder/src/manager.rs | 6 +- .../flowy-folder/src/manager_observer.rs | 11 ++-- .../src/anon_user/migrate_anon_user_collab.rs | 8 +-- .../anon_user/sync_supabase_user_collab.rs | 10 ++-- .../data_import/appflowy_data_import.rs | 10 ++-- 23 files changed, 169 insertions(+), 85 deletions(-) create mode 100644 frontend/rust-lib/event-integration/tests/asset/csv_10240r_15c.csv.zip create mode 100644 frontend/rust-lib/event-integration/tests/asset/csv_492r_17c.csv.zip create mode 100644 frontend/rust-lib/event-integration/tests/folder/local_test/import_test.rs diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.lock b/frontend/appflowy_tauri/src-tauri/Cargo.lock index 221283296f..4b556d9825 100644 --- a/frontend/appflowy_tauri/src-tauri/Cargo.lock +++ b/frontend/appflowy_tauri/src-tauri/Cargo.lock @@ -818,7 +818,7 @@ dependencies = [ [[package]] name = "collab" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "async-trait", @@ -841,7 +841,7 @@ dependencies = [ [[package]] name = "collab-database" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "async-trait", @@ -855,6 +855,7 @@ dependencies = [ "lru", "nanoid", "parking_lot 0.12.1", + "rayon", "serde", "serde_json", "serde_repr", @@ -870,7 +871,7 @@ dependencies = [ [[package]] name = "collab-document" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "collab", @@ -889,7 +890,7 @@ dependencies = [ [[package]] name = "collab-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "bytes", @@ -904,7 +905,7 @@ dependencies = [ [[package]] name = "collab-folder" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "chrono", @@ -941,7 +942,7 @@ dependencies = [ [[package]] name = "collab-plugins" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "async-stream", @@ -980,7 +981,7 @@ dependencies = [ [[package]] name = "collab-user" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "collab", @@ -1203,7 +1204,7 @@ dependencies = [ "cssparser-macros", "dtoa-short", "itoa 1.0.6", - "phf 0.8.0", + "phf 0.11.2", "smallvec", ] @@ -4781,9 +4782,9 @@ checksum = "f2ff9a1f06a88b01621b7ae906ef0211290d1c8a168a15542486a8f61c0833b9" [[package]] name = "rayon" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +checksum = "e4963ed1bc86e4f3ee217022bd855b297cef07fb9eac5dfa1f788b220b49b3bd" dependencies = [ "either", "rayon-core", diff --git a/frontend/appflowy_tauri/src-tauri/Cargo.toml b/frontend/appflowy_tauri/src-tauri/Cargo.toml index 5afe966665..6ba93681f6 100644 --- a/frontend/appflowy_tauri/src-tauri/Cargo.toml +++ b/frontend/appflowy_tauri/src-tauri/Cargo.toml @@ -92,10 +92,10 @@ client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "0be # To switch to the local path, run: # scripts/tool/update_collab_source.sh # ⚠️⚠️⚠️️ -collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-user = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } +collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-user = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } diff --git a/frontend/appflowy_web/wasm-libs/Cargo.toml b/frontend/appflowy_web/wasm-libs/Cargo.toml index abd5e3752b..7be865bfab 100644 --- a/frontend/appflowy_web/wasm-libs/Cargo.toml +++ b/frontend/appflowy_web/wasm-libs/Cargo.toml @@ -65,10 +65,10 @@ client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "0be # To switch to the local path, run: # scripts/tool/update_collab_source.sh # ⚠️⚠️⚠️️ -collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-user = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } +collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-user = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } diff --git a/frontend/rust-lib/Cargo.lock b/frontend/rust-lib/Cargo.lock index b43888daa0..992af39b56 100644 --- a/frontend/rust-lib/Cargo.lock +++ b/frontend/rust-lib/Cargo.lock @@ -746,7 +746,7 @@ dependencies = [ [[package]] name = "collab" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "async-trait", @@ -769,7 +769,7 @@ dependencies = [ [[package]] name = "collab-database" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "async-trait", @@ -783,6 +783,7 @@ dependencies = [ "lru", "nanoid", "parking_lot 0.12.1", + "rayon", "serde", "serde_json", "serde_repr", @@ -798,7 +799,7 @@ dependencies = [ [[package]] name = "collab-document" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "collab", @@ -817,7 +818,7 @@ dependencies = [ [[package]] name = "collab-entity" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "bytes", @@ -832,7 +833,7 @@ dependencies = [ [[package]] name = "collab-folder" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "chrono", @@ -869,7 +870,7 @@ dependencies = [ [[package]] name = "collab-plugins" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "async-stream", @@ -908,7 +909,7 @@ dependencies = [ [[package]] name = "collab-user" version = "0.1.0" -source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=9b189e7dc180ddc7fd79c49ed16f9c8a46216380#9b189e7dc180ddc7fd79c49ed16f9c8a46216380" +source = "git+https://github.com/AppFlowy-IO/AppFlowy-Collab?rev=3079e1cef184bf5ddfecbc6999a450ae9ac070a7#3079e1cef184bf5ddfecbc6999a450ae9ac070a7" dependencies = [ "anyhow", "collab", @@ -4290,9 +4291,9 @@ dependencies = [ [[package]] name = "rayon" -version = "1.8.1" +version = "1.9.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fa7237101a77a10773db45d62004a272517633fbcc3df19d96455ede1122e051" +checksum = "e4963ed1bc86e4f3ee217022bd855b297cef07fb9eac5dfa1f788b220b49b3bd" dependencies = [ "either", "rayon-core", diff --git a/frontend/rust-lib/Cargo.toml b/frontend/rust-lib/Cargo.toml index d098d11338..82b32f10d0 100644 --- a/frontend/rust-lib/Cargo.toml +++ b/frontend/rust-lib/Cargo.toml @@ -115,10 +115,10 @@ client-api = { git = "https://github.com/AppFlowy-IO/AppFlowy-Cloud", rev = "0be # To switch to the local path, run: # scripts/tool/update_collab_source.sh # ⚠️⚠️⚠️️ -collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-user = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } -collab-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "9b189e7dc180ddc7fd79c49ed16f9c8a46216380" } +collab = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-folder = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-document = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-database = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-plugins = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-user = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } +collab-entity = { git = "https://github.com/AppFlowy-IO/AppFlowy-Collab", rev = "3079e1cef184bf5ddfecbc6999a450ae9ac070a7" } diff --git a/frontend/rust-lib/event-integration/src/folder_event.rs b/frontend/rust-lib/event-integration/src/folder_event.rs index af426d1615..4f3d218e26 100644 --- a/frontend/rust-lib/event-integration/src/folder_event.rs +++ b/frontend/rust-lib/event-integration/src/folder_event.rs @@ -8,6 +8,7 @@ use flowy_user::entities::{ }; use flowy_user::errors::FlowyError; use flowy_user::event_map::UserEvent; +use tokio::time::sleep; use crate::event_builder::EventBuilder; use crate::EventIntegrationTest; @@ -134,6 +135,15 @@ impl EventIntegrationTest { .await .parse::() } + + pub async fn import_data(&self, data: ImportPB) -> ViewPB { + EventBuilder::new(self.clone()) + .event(FolderEvent::ImportData) + .payload(data) + .async_send() + .await + .parse::() + } } pub struct ViewTest { @@ -172,15 +182,23 @@ impl ViewTest { } pub async fn new_grid_view(sdk: &EventIntegrationTest, data: Vec) -> Self { - Self::new(sdk, ViewLayoutPB::Grid, data).await + // TODO(nathan): remove this sleep + // workaround for the rows that are created asynchronously + let this = Self::new(sdk, ViewLayoutPB::Grid, data).await; + sleep(tokio::time::Duration::from_secs(2)).await; + this } pub async fn new_board_view(sdk: &EventIntegrationTest, data: Vec) -> Self { - Self::new(sdk, ViewLayoutPB::Board, data).await + let this = Self::new(sdk, ViewLayoutPB::Board, data).await; + sleep(tokio::time::Duration::from_secs(2)).await; + this } pub async fn new_calendar_view(sdk: &EventIntegrationTest, data: Vec) -> Self { - Self::new(sdk, ViewLayoutPB::Calendar, data).await + let this = Self::new(sdk, ViewLayoutPB::Calendar, data).await; + sleep(tokio::time::Duration::from_secs(2)).await; + this } } diff --git a/frontend/rust-lib/event-integration/tests/asset/csv_10240r_15c.csv.zip b/frontend/rust-lib/event-integration/tests/asset/csv_10240r_15c.csv.zip new file mode 100644 index 0000000000000000000000000000000000000000..9d6b57efc3e266c3340476b5fdd3083eefe6b39c GIT binary patch literal 80343 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 z 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 P0^Iw7zo$TjNJ#$&{#LYJ literal 0 HcmV?d00001 diff --git a/frontend/rust-lib/event-integration/tests/asset/csv_492r_17c.csv.zip b/frontend/rust-lib/event-integration/tests/asset/csv_492r_17c.csv.zip new file mode 100644 index 0000000000000000000000000000000000000000..0d38422ac397e63bb31e96386a21670b92b1e187 GIT binary patch literal 3836 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 literal 0 HcmV?d00001 diff --git a/frontend/rust-lib/event-integration/tests/folder/local_test/import_test.rs b/frontend/rust-lib/event-integration/tests/folder/local_test/import_test.rs new file mode 100644 index 0000000000..7b812fc821 --- /dev/null +++ b/frontend/rust-lib/event-integration/tests/folder/local_test/import_test.rs @@ -0,0 +1,55 @@ +use crate::util::unzip_history_user_db; +use event_integration::EventIntegrationTest; +use flowy_core::DEFAULT_NAME; +use flowy_folder::entities::{ImportPB, ImportTypePB, ViewLayoutPB}; + +#[tokio::test] +async fn import_492_row_csv_file_test() { + // csv_500r_15c.csv is a file with 492 rows and 17 columns + let file_name = "csv_492r_17c.csv".to_string(); + let (cleaner, csv_file_path) = unzip_history_user_db("./tests/asset", &file_name).unwrap(); + + let csv_string = std::fs::read_to_string(csv_file_path).unwrap(); + let test = EventIntegrationTest::new_with_name(DEFAULT_NAME).await; + test.sign_up_as_guest().await; + + let workspace_id = test.get_current_workspace().await.id; + let import_data = gen_import_data(file_name, csv_string, workspace_id); + + let view = test.import_data(import_data).await; + let database = test.get_database(&view.id).await; + assert_eq!(database.rows.len(), 492); + drop(cleaner); +} + +#[tokio::test] +async fn import_10240_row_csv_file_test() { + // csv_22577r_15c.csv is a file with 10240 rows and 15 columns + let file_name = "csv_10240r_15c.csv".to_string(); + let (cleaner, csv_file_path) = unzip_history_user_db("./tests/asset", &file_name).unwrap(); + + let csv_string = std::fs::read_to_string(csv_file_path).unwrap(); + let test = EventIntegrationTest::new_with_name(DEFAULT_NAME).await; + test.sign_up_as_guest().await; + + let workspace_id = test.get_current_workspace().await.id; + let import_data = gen_import_data(file_name, csv_string, workspace_id); + + let view = test.import_data(import_data).await; + let database = test.get_database(&view.id).await; + assert_eq!(database.rows.len(), 10240); + + drop(cleaner); +} + +fn gen_import_data(file_name: String, csv_string: String, workspace_id: String) -> ImportPB { + let import_data = ImportPB { + parent_view_id: workspace_id.clone(), + name: file_name, + data: Some(csv_string.as_bytes().to_vec()), + file_path: None, + view_layout: ViewLayoutPB::Grid, + import_type: ImportTypePB::CSV, + }; + import_data +} diff --git a/frontend/rust-lib/event-integration/tests/folder/local_test/mod.rs b/frontend/rust-lib/event-integration/tests/folder/local_test/mod.rs index e13c3c1e76..aa58a02baf 100644 --- a/frontend/rust-lib/event-integration/tests/folder/local_test/mod.rs +++ b/frontend/rust-lib/event-integration/tests/folder/local_test/mod.rs @@ -1,4 +1,5 @@ mod folder_test; +mod import_test; mod script; mod subscription_test; mod test; diff --git a/frontend/rust-lib/flowy-core/src/deps_resolve/folder_deps.rs b/frontend/rust-lib/flowy-core/src/deps_resolve/folder_deps.rs index 4becb36241..d422478923 100644 --- a/frontend/rust-lib/flowy-core/src/deps_resolve/folder_deps.rs +++ b/frontend/rust-lib/flowy-core/src/deps_resolve/folder_deps.rs @@ -360,8 +360,11 @@ impl FolderOperationHandler for DatabaseFolderOperation { _ => CSVFormat::Original, }; FutureResult::new(async move { - let content = - String::from_utf8(bytes).map_err(|err| FlowyError::internal().with_context(err))?; + let content = tokio::task::spawn_blocking(move || { + String::from_utf8(bytes).map_err(|err| FlowyError::internal().with_context(err)) + }) + .await??; + database_manager .import_csv(view_id, content, format) .await?; diff --git a/frontend/rust-lib/flowy-database2/Cargo.toml b/frontend/rust-lib/flowy-database2/Cargo.toml index 2d6cc2ec97..930cad50d2 100644 --- a/frontend/rust-lib/flowy-database2/Cargo.toml +++ b/frontend/rust-lib/flowy-database2/Cargo.toml @@ -40,7 +40,7 @@ futures.workspace = true dashmap = "5" anyhow.workspace = true async-stream = "0.3.4" -rayon = "1.6.1" +rayon = "1.9.0" nanoid = "0.4.0" async-trait.workspace = true chrono-tz = "0.8.2" diff --git a/frontend/rust-lib/flowy-database2/src/entities/database_entities.rs b/frontend/rust-lib/flowy-database2/src/entities/database_entities.rs index 9002ca295e..2afcd41e05 100644 --- a/frontend/rust-lib/flowy-database2/src/entities/database_entities.rs +++ b/frontend/rust-lib/flowy-database2/src/entities/database_entities.rs @@ -1,6 +1,6 @@ use collab::core::collab_state::SyncState; use collab_database::rows::RowId; -use collab_database::user::DatabaseViewTracker; +use collab_database::user::DatabaseMeta; use collab_database::views::DatabaseLayout; use flowy_derive::ProtoBuf; @@ -208,8 +208,8 @@ pub struct DatabaseDescriptionPB { pub database_id: String, } -impl From for DatabaseDescriptionPB { - fn from(data: DatabaseViewTracker) -> Self { +impl From for DatabaseDescriptionPB { + fn from(data: DatabaseMeta) -> Self { Self { database_id: data.database_id, } diff --git a/frontend/rust-lib/flowy-database2/src/manager.rs b/frontend/rust-lib/flowy-database2/src/manager.rs index 7dc17d9e8d..5a21e3b18a 100644 --- a/frontend/rust-lib/flowy-database2/src/manager.rs +++ b/frontend/rust-lib/flowy-database2/src/manager.rs @@ -168,7 +168,7 @@ impl DatabaseManager { let mut items = vec![]; if let Ok(wdb) = self.get_workspace_database().await { items = wdb - .get_all_databases() + .get_all_database_meta() .into_iter() .map(DatabaseDescriptionPB::from) .collect(); diff --git a/frontend/rust-lib/flowy-database2/tests/database/share_test/export_test.rs b/frontend/rust-lib/flowy-database2/tests/database/share_test/export_test.rs index 34ef732f39..e7c227f26d 100644 --- a/frontend/rust-lib/flowy-database2/tests/database/share_test/export_test.rs +++ b/frontend/rust-lib/flowy-database2/tests/database/share_test/export_test.rs @@ -124,6 +124,9 @@ async fn history_database_import_test() { "{""data"":""AE"",""field_type"":0}","{""data"":""5"",""field_type"":1}","{""data"":""1671938394"",""field_type"":2}","{""data"":""wQpG"",""field_type"":3}","{""data"":"""",""field_type"":4}","{""data"":""Yes"",""field_type"":5}","{""data"":"""",""field_type"":6}","{""data"":"""",""field_type"":7}" "#; let result = test.import(csv.to_string(), format).await; + // TODO(nathan): remove this sleep + // workaround for the rows that are created asynchronously + tokio::time::sleep(tokio::time::Duration::from_secs(2)).await; let database = test.get_database(&result.database_id).await.unwrap(); let fields = database.get_fields(&result.view_id, None); diff --git a/frontend/rust-lib/flowy-folder/src/entities/view.rs b/frontend/rust-lib/flowy-folder/src/entities/view.rs index 7b756163a6..508d68989c 100644 --- a/frontend/rust-lib/flowy-folder/src/entities/view.rs +++ b/frontend/rust-lib/flowy-folder/src/entities/view.rs @@ -59,14 +59,14 @@ pub struct ViewPB { pub is_favorite: bool, } -pub fn view_pb_without_child_views(view: Arc) -> ViewPB { +pub fn view_pb_without_child_views(view: View) -> ViewPB { ViewPB { - id: view.id.clone(), - parent_view_id: view.parent_view_id.clone(), - name: view.name.clone(), + id: view.id, + parent_view_id: view.parent_view_id, + name: view.name, create_time: view.created_at, child_views: Default::default(), - layout: view.layout.clone().into(), + layout: view.layout.into(), icon: view.icon.clone().map(|icon| icon.into()), is_favorite: view.is_favorite, } @@ -81,7 +81,7 @@ pub fn view_pb_with_child_views(view: Arc, child_views: Vec>) -> create_time: view.created_at, child_views: child_views .into_iter() - .map(view_pb_without_child_views) + .map(|view| view_pb_without_child_views(view.as_ref().clone())) .collect(), layout: view.layout.clone().into(), icon: view.icon.clone().map(|icon| icon.into()), diff --git a/frontend/rust-lib/flowy-folder/src/event_handler.rs b/frontend/rust-lib/flowy-folder/src/event_handler.rs index a5412decc6..83530dc547 100644 --- a/frontend/rust-lib/flowy-folder/src/event_handler.rs +++ b/frontend/rust-lib/flowy-folder/src/event_handler.rs @@ -28,7 +28,7 @@ pub(crate) async fn create_workspace_handler( .get_views_belong_to(&workspace.id) .await? .into_iter() - .map(view_pb_without_child_views) + .map(|view| view_pb_without_child_views(view.as_ref().clone())) .collect::>(); data_result_ok(WorkspacePB { id: workspace.id, @@ -85,7 +85,7 @@ pub(crate) async fn create_view_handler( if set_as_current { let _ = folder.set_current_view(&view.id).await; } - data_result_ok(view_pb_without_child_views(Arc::new(view))) + data_result_ok(view_pb_without_child_views(view)) } pub(crate) async fn create_orphan_view_handler( @@ -99,7 +99,7 @@ pub(crate) async fn create_orphan_view_handler( if set_as_current { let _ = folder.set_current_view(&view.id).await; } - data_result_ok(view_pb_without_child_views(Arc::new(view))) + data_result_ok(view_pb_without_child_views(view)) } #[tracing::instrument(level = "debug", skip(data, folder), err)] @@ -313,11 +313,12 @@ pub(crate) async fn delete_all_trash_handler( pub(crate) async fn import_data_handler( data: AFPluginData, folder: AFPluginState>, -) -> Result<(), FlowyError> { +) -> DataResult { let folder = upgrade_folder(folder)?; let params: ImportParams = data.into_inner().try_into()?; - folder.import(params).await?; - Ok(()) + let view = folder.import(params).await?; + let view_pb = view_pb_without_child_views(view); + data_result_ok(view_pb) } #[tracing::instrument(level = "debug", skip(folder), err)] diff --git a/frontend/rust-lib/flowy-folder/src/event_map.rs b/frontend/rust-lib/flowy-folder/src/event_map.rs index 6a4d1faa20..a3f8d2b657 100644 --- a/frontend/rust-lib/flowy-folder/src/event_map.rs +++ b/frontend/rust-lib/flowy-folder/src/event_map.rs @@ -124,7 +124,7 @@ pub enum FolderEvent { #[event()] PermanentlyDeleteAllTrashItem = 27, - #[event(input = "ImportPB")] + #[event(input = "ImportPB", output = "ViewPB")] ImportData = 30, #[event(input = "WorkspaceIdPB", output = "RepeatedFolderSnapshotPB")] diff --git a/frontend/rust-lib/flowy-folder/src/manager.rs b/frontend/rust-lib/flowy-folder/src/manager.rs index 04c1b2b4fc..b4d480ea38 100644 --- a/frontend/rust-lib/flowy-folder/src/manager.rs +++ b/frontend/rust-lib/flowy-folder/src/manager.rs @@ -374,7 +374,7 @@ impl FolderManager { .views .get_views_belong_to(&workspace.id) .into_iter() - .map(view_pb_without_child_views) + .map(|view| view_pb_without_child_views(view.as_ref().clone())) .collect::>(); WorkspacePB { @@ -556,7 +556,7 @@ impl FolderManager { .send(); notify_child_views_changed( - view_pb_without_child_views(view), + view_pb_without_child_views(view.as_ref().clone()), ChildViewChangeReason::Delete, ); } @@ -573,7 +573,7 @@ impl FolderManager { let favorite_descendant_views: Vec = all_descendant_views .iter() .filter(|view| view.is_favorite) - .map(|view| view_pb_without_child_views(view.clone())) + .map(|view| view_pb_without_child_views(view.as_ref().clone())) .collect(); if !favorite_descendant_views.is_empty() { diff --git a/frontend/rust-lib/flowy-folder/src/manager_observer.rs b/frontend/rust-lib/flowy-folder/src/manager_observer.rs index e37f20f31b..ab08010613 100644 --- a/frontend/rust-lib/flowy-folder/src/manager_observer.rs +++ b/frontend/rust-lib/flowy-folder/src/manager_observer.rs @@ -32,7 +32,7 @@ pub(crate) fn subscribe_folder_view_changed( match value { ViewChange::DidCreateView { view } => { notify_child_views_changed( - view_pb_without_child_views(Arc::new(view.clone())), + view_pb_without_child_views(view.clone()), ChildViewChangeReason::Create, ); notify_parent_view_did_change(folder.clone(), vec![view.parent_view_id]); @@ -40,7 +40,7 @@ pub(crate) fn subscribe_folder_view_changed( ViewChange::DidDeleteView { views } => { for view in views { notify_child_views_changed( - view_pb_without_child_views(view), + view_pb_without_child_views(view.as_ref().clone()), ChildViewChangeReason::Delete, ); } @@ -48,7 +48,7 @@ pub(crate) fn subscribe_folder_view_changed( ViewChange::DidUpdate { view } => { notify_view_did_change(view.clone()); notify_child_views_changed( - view_pb_without_child_views(Arc::new(view.clone())), + view_pb_without_child_views(view.clone()), ChildViewChangeReason::Update, ); notify_parent_view_did_change(folder.clone(), vec![view.parent_view_id.clone()]); @@ -190,8 +190,9 @@ pub(crate) fn notify_did_update_workspace(workspace_id: &str, folder: &Folder) { } fn notify_view_did_change(view: View) -> Option<()> { - let view_pb = view_pb_without_child_views(Arc::new(view.clone())); - send_notification(&view.id, FolderNotification::DidUpdateView) + let view_id = view.id.clone(); + let view_pb = view_pb_without_child_views(view); + send_notification(&view_id, FolderNotification::DidUpdateView) .payload(view_pb) .send(); None diff --git a/frontend/rust-lib/flowy-user/src/anon_user/migrate_anon_user_collab.rs b/frontend/rust-lib/flowy-user/src/anon_user/migrate_anon_user_collab.rs index 18a5de7ff0..4761b55b73 100644 --- a/frontend/rust-lib/flowy-user/src/anon_user/migrate_anon_user_collab.rs +++ b/frontend/rust-lib/flowy-user/src/anon_user/migrate_anon_user_collab.rs @@ -10,7 +10,7 @@ use collab_database::database::{ is_database_collab, mut_database_views_with_collab, reset_inline_view_id, }; use collab_database::rows::{database_row_document_id_from_row_id, mut_row_with_collab, RowId}; -use collab_database::user::DatabaseViewTrackerList; +use collab_database::user::DatabaseMetaList; use collab_folder::{Folder, UserId}; use collab_plugins::local_storage::kv::KVTransactionDB; use parking_lot::{Mutex, RwLock}; @@ -163,9 +163,9 @@ where let new_uid = new_user_session.user_id; let new_object_id = &new_user_session.user_workspace.workspace_database_object_id; - let array = DatabaseViewTrackerList::from_collab(&database_with_views_collab); - for database_view_tracker in array.get_all_database_tracker() { - array.update_database(&database_view_tracker.database_id, |update| { + let array = DatabaseMetaList::from_collab(&database_with_views_collab); + for database_metas in array.get_all_database_meta() { + array.update_database(&database_metas.database_id, |update| { let new_linked_views = update .linked_views .iter() diff --git a/frontend/rust-lib/flowy-user/src/anon_user/sync_supabase_user_collab.rs b/frontend/rust-lib/flowy-user/src/anon_user/sync_supabase_user_collab.rs index 6387ec7ba5..5fb01aae5a 100644 --- a/frontend/rust-lib/flowy-user/src/anon_user/sync_supabase_user_collab.rs +++ b/frontend/rust-lib/flowy-user/src/anon_user/sync_supabase_user_collab.rs @@ -8,7 +8,7 @@ use collab::core::collab::MutexCollab; use collab::preclude::Collab; use collab_database::database::get_database_row_ids; use collab_database::rows::database_row_document_id_from_row_id; -use collab_database::user::{get_all_database_view_trackers, DatabaseViewTracker}; +use collab_database::user::{get_all_database_meta, DatabaseMeta}; use collab_entity::{CollabObject, CollabType}; use collab_folder::{Folder, View, ViewLayout}; use collab_plugins::local_storage::kv::KVTransactionDB; @@ -75,7 +75,7 @@ pub async fn sync_supabase_user_data_to_cloud( fn sync_view( uid: i64, folder: Arc, - database_records: Vec>, + database_records: Vec>, workspace_id: String, device_id: String, view: Arc, @@ -297,7 +297,7 @@ async fn sync_database_views( database_views_aggregate_id: &str, collab_db: &Arc, user_service: Arc, -) -> Vec> { +) -> Vec> { let collab_object = CollabObject::new( uid, database_views_aggregate_id.to_string(), @@ -317,7 +317,7 @@ async fn sync_database_views( }) .map(|_| { ( - get_all_database_view_trackers(&collab), + get_all_database_meta(&collab), collab.encode_collab_v1().doc_state, ) }) @@ -357,7 +357,7 @@ fn collab_type_from_view_layout(view_layout: &ViewLayout) -> CollabType { fn object_id_from_view( view: &Arc, - database_records: &[Arc], + database_records: &[Arc], ) -> Result { if view.layout.is_database() { match database_records diff --git a/frontend/rust-lib/flowy-user/src/services/data_import/appflowy_data_import.rs b/frontend/rust-lib/flowy-user/src/services/data_import/appflowy_data_import.rs index 6783a24b04..e48df18254 100644 --- a/frontend/rust-lib/flowy-user/src/services/data_import/appflowy_data_import.rs +++ b/frontend/rust-lib/flowy-user/src/services/data_import/appflowy_data_import.rs @@ -14,7 +14,7 @@ use collab_database::database::{ is_database_collab, mut_database_views_with_collab, reset_inline_view_id, }; use collab_database::rows::{database_row_document_id_from_row_id, mut_row_with_collab, RowId}; -use collab_database::user::DatabaseViewTrackerList; +use collab_database::user::DatabaseMetaList; use collab_document::document_data::default_document_collab_data; use collab_entity::CollabType; use collab_folder::{Folder, UserId, View, ViewIdentifier, ViewLayout}; @@ -280,11 +280,11 @@ where ) })?; - let array = DatabaseViewTrackerList::from_collab(&database_view_tracker_collab); - for database_view_tracker in array.get_all_database_tracker() { + let array = DatabaseMetaList::from_collab(&database_view_tracker_collab); + for database_metas in array.get_all_database_meta() { database_view_ids_by_database_id.insert( - old_to_new_id_map.renew_id(&database_view_tracker.database_id), - database_view_tracker + old_to_new_id_map.renew_id(&database_metas.database_id), + database_metas .linked_views .into_iter() .map(|view_id| old_to_new_id_map.renew_id(&view_id))