diff --git a/Cargo.lock b/Cargo.lock index f4b6d220..4faecf14 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -457,6 +457,8 @@ dependencies = [ "collab-define", "collab-sync-protocol", "config", + "database", + "database-entity", "derive_more", "dotenv", "fancy-regex", @@ -483,8 +485,6 @@ dependencies = [ "shared_entity", "snowflake", "sqlx", - "storage", - "storage-entity", "tempfile", "thiserror", "token", @@ -838,6 +838,7 @@ dependencies = [ "collab", "collab-define", "collab-sync-protocol", + "database-entity", "futures-core", "futures-util", "gotrue", @@ -852,7 +853,6 @@ dependencies = [ "serde_json", "serde_repr", "shared_entity", - "storage-entity", "thiserror", "tokio", "tokio-retry", @@ -1114,6 +1114,39 @@ version = "2.4.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c2e66c9d817f1720209181c316d28635c050fa304f9c79e47a520882661b7308" +[[package]] +name = "database" +version = "0.1.0" +dependencies = [ + "anyhow", + "async-trait", + "chrono", + "collab", + "collab-define", + "database-entity", + "serde", + "serde_json", + "sqlx", + "thiserror", + "tokio", + "tracing", + "uuid", + "validator", +] + +[[package]] +name = "database-entity" +version = "0.1.0" +dependencies = [ + "chrono", + "collab-define", + "serde", + "serde_json", + "sqlx", + "uuid", + "validator", +] + [[package]] name = "der" version = "0.7.8" @@ -2796,6 +2829,8 @@ dependencies = [ "collab", "collab-define", "collab-sync-protocol", + "database", + "database-entity", "futures-util", "lib0", "once_cell", @@ -2805,8 +2840,6 @@ dependencies = [ "serde-aux", "serde_json", "serde_repr", - "storage", - "storage-entity", "tempfile", "thiserror", "tokio", @@ -3712,39 +3745,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f" -[[package]] -name = "storage" -version = "0.1.0" -dependencies = [ - "anyhow", - "async-trait", - "chrono", - "collab", - "collab-define", - "serde", - "serde_json", - "sqlx", - "storage-entity", - "thiserror", - "tokio", - "tracing", - "uuid", - "validator", -] - -[[package]] -name = "storage-entity" -version = "0.1.0" -dependencies = [ - "chrono", - "collab-define", - "serde", - "serde_json", - "sqlx", - "uuid", - "validator", -] - [[package]] name = "string_cache" version = "0.8.7" diff --git a/Cargo.toml b/Cargo.toml index 5ba6da0a..777fb61b 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -71,8 +71,8 @@ collab = { version = "0.1.0" } token = { path = "libs/token" } snowflake = { path = "libs/snowflake" } realtime = { path = "libs/realtime" } -storage = { path = "libs/storage" } -storage-entity = { path = "libs/storage-entity" } +database = { path = "libs/database" } +database-entity = { path = "libs/database-entity" } gotrue = { path = "libs/gotrue" } gotrue-entity = { path = "libs/gotrue-entity" } infra = { path = "libs/infra" } @@ -101,8 +101,8 @@ members = [ "libs/token", "libs/snowflake", "libs/realtime", - "libs/storage", - "libs/storage-entity", + "libs/database", + "libs/database-entity", "libs/client-api", "libs/infra", "libs/shared-entity", diff --git a/libs/client-api/Cargo.toml b/libs/client-api/Cargo.toml index 15742a20..910b7ac5 100644 --- a/libs/client-api/Cargo.toml +++ b/libs/client-api/Cargo.toml @@ -13,7 +13,7 @@ serde_repr = "0.1.16" gotrue = { path = "../gotrue" } gotrue-entity = { path = "../gotrue-entity" } shared_entity = { path = "../shared-entity" } -storage-entity = { path = "../storage-entity" } +database-entity = { path = "../database-entity" } opener = "0.6.1" url = "2.4.1" tokio-stream = { version = "0.1.14" } diff --git a/libs/client-api/src/http.rs b/libs/client-api/src/http.rs index b2e0bf9c..ca2b1b1e 100644 --- a/libs/client-api/src/http.rs +++ b/libs/client-api/src/http.rs @@ -20,17 +20,16 @@ use shared_entity::dto::UserUpdateParams; use shared_entity::dto::WorkspaceMembersParams; use std::sync::Arc; use std::time::SystemTime; -use storage_entity::AFWorkspaceMember; use gotrue_entity::{AccessTokenResponse, User}; use crate::notify::{ClientToken, TokenStateReceiver}; +use database_entity::{AFUserProfileView, AFWorkspaceMember, InsertCollabParams}; +use database_entity::{AFWorkspaces, QueryCollabParams}; +use database_entity::{DeleteCollabParams, RawData}; use shared_entity::error::AppError; use shared_entity::error_code::url_missing_param; use shared_entity::error_code::ErrorCode; -use storage_entity::{AFUserProfileView, InsertCollabParams}; -use storage_entity::{AFWorkspaces, QueryCollabParams}; -use storage_entity::{DeleteCollabParams, RawData}; pub struct Client { pub(crate) cloud_client: reqwest::Client, diff --git a/libs/client-api/src/lib.rs b/libs/client-api/src/lib.rs index fdeb9df1..7426ef37 100644 --- a/libs/client-api/src/lib.rs +++ b/libs/client-api/src/lib.rs @@ -14,7 +14,7 @@ pub mod error { } pub mod entity { + pub use database_entity::*; pub use gotrue_entity::*; pub use shared_entity::*; - pub use storage_entity::*; } diff --git a/libs/storage-entity/Cargo.toml b/libs/database-entity/Cargo.toml similarity index 95% rename from libs/storage-entity/Cargo.toml rename to libs/database-entity/Cargo.toml index f9982f6f..1308c2ee 100644 --- a/libs/storage-entity/Cargo.toml +++ b/libs/database-entity/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "storage-entity" +name = "database-entity" version = "0.1.0" edition = "2021" diff --git a/libs/storage-entity/src/lib.rs b/libs/database-entity/src/lib.rs similarity index 100% rename from libs/storage-entity/src/lib.rs rename to libs/database-entity/src/lib.rs diff --git a/libs/storage/Cargo.toml b/libs/database/Cargo.toml similarity index 91% rename from libs/storage/Cargo.toml rename to libs/database/Cargo.toml index a9d8e278..ed59ce1c 100644 --- a/libs/storage/Cargo.toml +++ b/libs/database/Cargo.toml @@ -1,5 +1,5 @@ [package] -name = "storage" +name = "database" version = "0.1.0" edition = "2021" @@ -9,7 +9,7 @@ edition = "2021" collab = { version = "0.1.0"} collab-define = { version = "0.1.0" } validator = { version = "0.16", features = ["validator_derive", "derive"] } -storage-entity = { path = "../storage-entity" } +database-entity = { path = "../database-entity" } tokio = { version = "1.26", features = ["sync"] } async-trait = "0.1.73" diff --git a/libs/storage/src/collab.rs b/libs/database/src/collab.rs similarity index 99% rename from libs/storage/src/collab.rs rename to libs/database/src/collab.rs index b8b7ca18..415fd09d 100644 --- a/libs/storage/src/collab.rs +++ b/libs/database/src/collab.rs @@ -3,15 +3,15 @@ use anyhow::Context; use async_trait::async_trait; use collab::core::collab::MutexCollab; use collab_define::CollabType; +use database_entity::{ + AFCollabSnapshot, AFCollabSnapshots, InsertCollabParams, InsertSnapshotParams, QueryCollabParams, + QueryObjectSnapshotParams, QuerySnapshotParams, RawData, +}; use sqlx::types::{chrono, Uuid}; use sqlx::{PgPool, Transaction}; use std::ops::DerefMut; use std::str::FromStr; use std::sync::Weak; -use storage_entity::{ - AFCollabSnapshot, AFCollabSnapshots, InsertCollabParams, InsertSnapshotParams, QueryCollabParams, - QueryObjectSnapshotParams, QuerySnapshotParams, RawData, -}; use tracing::trace; use validator::Validate; diff --git a/libs/storage/src/error.rs b/libs/database/src/error.rs similarity index 100% rename from libs/storage/src/error.rs rename to libs/database/src/error.rs diff --git a/libs/storage/src/file_storage.rs b/libs/database/src/file_storage.rs similarity index 97% rename from libs/storage/src/file_storage.rs rename to libs/database/src/file_storage.rs index 81ee7337..5e42263a 100644 --- a/libs/storage/src/file_storage.rs +++ b/libs/database/src/file_storage.rs @@ -1,5 +1,5 @@ +use database_entity::AFFileMetadata; use sqlx::{PgPool, Transaction}; -use storage_entity::AFFileMetadata; pub async fn insert_file_metadata( pg_pool: &PgPool, diff --git a/libs/storage/src/lib.rs b/libs/database/src/lib.rs similarity index 100% rename from libs/storage/src/lib.rs rename to libs/database/src/lib.rs diff --git a/libs/storage/src/user.rs b/libs/database/src/user.rs similarity index 100% rename from libs/storage/src/user.rs rename to libs/database/src/user.rs diff --git a/libs/storage/src/workspace.rs b/libs/database/src/workspace.rs similarity index 97% rename from libs/storage/src/workspace.rs rename to libs/database/src/workspace.rs index 07fde8af..b2893493 100644 --- a/libs/storage/src/workspace.rs +++ b/libs/database/src/workspace.rs @@ -3,7 +3,7 @@ use sqlx::{ PgPool, }; -use storage_entity::{AFRole, AFUserProfileView, AFWorkspace, AFWorkspaceMember}; +use database_entity::{AFRole, AFUserProfileView, AFWorkspace, AFWorkspaceMember}; pub async fn select_all_workspaces_owned( pool: &PgPool, diff --git a/libs/realtime/Cargo.toml b/libs/realtime/Cargo.toml index e10cdff6..f2d00e69 100644 --- a/libs/realtime/Cargo.toml +++ b/libs/realtime/Cargo.toml @@ -26,8 +26,8 @@ tokio-retry = "0.3.0" collab = { version = "0.1.0"} collab-sync-protocol = { version = "0.1.0" } collab-define = { version = "0.1.0" } -storage = { path = "../storage" } -storage-entity = { path = "../storage-entity" } +database = { path = "../database" } +database-entity = { path = "../database-entity" } y-sync = { version = "0.3.1" } yrs = "0.16.5" lib0 = "0.16.3" diff --git a/libs/realtime/src/client.rs b/libs/realtime/src/client.rs index bf045396..950ce402 100644 --- a/libs/realtime/src/client.rs +++ b/libs/realtime/src/client.rs @@ -14,8 +14,8 @@ use collab_sync_protocol::CollabMessage; use crate::collaborate::CollabServer; use crate::error::RealtimeError; +use database::collab::CollabStorage; use std::time::{Duration, Instant}; -use storage::collab::CollabStorage; use tracing::error; pub struct ClientWSSession { diff --git a/libs/realtime/src/collaborate/group.rs b/libs/realtime/src/collaborate/group.rs index 79e7aba7..334cea4d 100644 --- a/libs/realtime/src/collaborate/group.rs +++ b/libs/realtime/src/collaborate/group.rs @@ -12,10 +12,10 @@ use std::pin::Pin; use anyhow::Error; use collab_sync_protocol::CollabMessage; +use database::collab::CollabStorage; use parking_lot::Mutex; use std::sync::{Arc, Weak}; use std::time::Duration; -use storage::collab::CollabStorage; use tokio::sync::RwLock; use crate::entities::{ClientMessage, Editing, RealtimeUser}; diff --git a/libs/realtime/src/collaborate/plugin.rs b/libs/realtime/src/collaborate/plugin.rs index e78d4b58..fa29511c 100644 --- a/libs/realtime/src/collaborate/plugin.rs +++ b/libs/realtime/src/collaborate/plugin.rs @@ -9,9 +9,9 @@ use collab_define::CollabType; use std::sync::atomic::{AtomicBool, AtomicU32, Ordering}; use std::sync::Weak; -use storage::collab::CollabStorage; -use storage::error::StorageError; -use storage_entity::{InsertCollabParams, QueryCollabParams, RawData}; +use database::collab::CollabStorage; +use database::error::StorageError; +use database_entity::{InsertCollabParams, QueryCollabParams, RawData}; use crate::collaborate::group::CollabGroup; use crate::entities::RealtimeUser; diff --git a/libs/realtime/src/collaborate/server.rs b/libs/realtime/src/collaborate/server.rs index bb753027..302b592a 100644 --- a/libs/realtime/src/collaborate/server.rs +++ b/libs/realtime/src/collaborate/server.rs @@ -18,7 +18,7 @@ use tracing::{info, trace}; use crate::client::ClientWSSink; use crate::collaborate::group::{CollabGroupCache, SubscribeGroupIfNeedAction}; use crate::util::channel_ext::UnboundedSenderSink; -use storage::collab::CollabStorage; +use database::collab::CollabStorage; #[derive(Clone)] pub struct CollabServer { diff --git a/libs/realtime/src/error.rs b/libs/realtime/src/error.rs index 4b26b289..a4748be8 100644 --- a/libs/realtime/src/error.rs +++ b/libs/realtime/src/error.rs @@ -27,7 +27,7 @@ pub enum RealtimeError { CollabError(#[from] CollabError), #[error(transparent)] - StorageError(#[from] storage::error::StorageError), + StorageError(#[from] database::error::StorageError), #[error("Internal failure: {0}")] Internal(#[from] anyhow::Error), diff --git a/src/api/collaborate.rs b/src/api/collaborate.rs index f9b99a45..61c6a2cc 100644 --- a/src/api/collaborate.rs +++ b/src/api/collaborate.rs @@ -3,15 +3,15 @@ use crate::state::Storage; use actix_web::web::{Data, Json}; use actix_web::Result; use actix_web::{web, Scope}; -use shared_entity::data::AppResponse; -use shared_entity::error::AppError; -use shared_entity::error_code::ErrorCode; -use storage::collab::CollabStorage; -use storage::error::StorageError; -use storage_entity::{ +use database::collab::CollabStorage; +use database::error::StorageError; +use database_entity::{ AFCollabSnapshots, DeleteCollabParams, InsertCollabParams, QueryCollabParams, QueryObjectSnapshotParams, QuerySnapshotParams, RawData, }; +use shared_entity::data::AppResponse; +use shared_entity::error::AppError; +use shared_entity::error_code::ErrorCode; use tracing::{debug, instrument}; use validator::Validate; diff --git a/src/api/user.rs b/src/api/user.rs index 91a3238a..1dfa17c4 100644 --- a/src/api/user.rs +++ b/src/api/user.rs @@ -9,9 +9,9 @@ use crate::component::auth::{InputParamsError, LoginRequest}; use crate::component::token_state::SessionToken; use crate::domain::{UserEmail, UserName, UserPassword}; use crate::state::AppState; +use database_entity::AFUserProfileView; use shared_entity::data::{AppResponse, JsonAppResponse}; use shared_entity::dto::{SignInTokenResponse, UpdateUsernameParams}; -use storage_entity::AFUserProfileView; use crate::component::auth::jwt::{Authorization, UserUuid}; use actix_web::web::{Data, Json}; diff --git a/src/api/workspace.rs b/src/api/workspace.rs index b7f0f2cc..6a6ec87a 100644 --- a/src/api/workspace.rs +++ b/src/api/workspace.rs @@ -1,10 +1,10 @@ use crate::biz; use crate::state::AppState; +use database_entity::{AFWorkspaceMember, AFWorkspaces}; use shared_entity::data::{AppResponse, JsonAppResponse}; use shared_entity::dto::WorkspaceMembersParams; use shared_entity::error::AppError; use sqlx::types::uuid; -use storage_entity::{AFWorkspaceMember, AFWorkspaces}; use crate::component::auth::jwt::UserUuid; use actix_web::web::{Data, Json}; diff --git a/src/application.rs b/src/application.rs index 4bcd7980..c89e4581 100644 --- a/src/application.rs +++ b/src/application.rs @@ -22,9 +22,9 @@ use std::sync::Arc; use tokio::sync::RwLock; use crate::component::storage_proxy::CollabStorageProxy; +use database::collab::{CollabPostgresDBStorageImpl, CollabStorage}; use realtime::client::RealtimeUserImpl; use realtime::collaborate::CollabServer; -use storage::collab::{CollabPostgresDBStorageImpl, CollabStorage}; use tracing_actix_web::TracingLogger; pub struct Application { diff --git a/src/biz/file_storage.rs b/src/biz/file_storage.rs index 39859b48..f6b881d1 100644 --- a/src/biz/file_storage.rs +++ b/src/biz/file_storage.rs @@ -3,10 +3,10 @@ use std::pin::Pin; use futures_util::Stream; use bytes::Bytes; +use database::{file_storage, user::get_user_id}; use s3::request::{ResponseData, ResponseDataStream}; use shared_entity::{error::AppError, error_code::ErrorCode}; use sqlx::types::uuid; -use storage::{file_storage, user::get_user_id}; use tokio_stream::StreamExt; use super::utils::CountingReader; diff --git a/src/biz/user.rs b/src/biz/user.rs index 192e8be5..fd447200 100644 --- a/src/biz/user.rs +++ b/src/biz/user.rs @@ -1,11 +1,11 @@ use anyhow::Result; -use gotrue::api::Client; -use shared_entity::error::AppError; -use storage::{ +use database::{ user::{create_user_if_not_exists, update_user_name}, workspace::select_user_profile_view_by_uuid, }; -use storage_entity::AFUserProfileView; +use database_entity::AFUserProfileView; +use gotrue::api::Client; +use shared_entity::error::AppError; use sqlx::{types::uuid, PgPool}; diff --git a/src/biz/workspace.rs b/src/biz/workspace.rs index e6698a95..1bf7b44d 100644 --- a/src/biz/workspace.rs +++ b/src/biz/workspace.rs @@ -1,10 +1,10 @@ -use shared_entity::{error::AppError, error_code::ErrorCode}; -use sqlx::{types::uuid, PgPool}; -use storage::workspace::{ +use database::workspace::{ delete_workspace_members, insert_workspace_members, select_all_workspaces_owned, select_user_is_workspace_owner, select_workspace_members, }; -use storage_entity::{AFRole, AFWorkspaceMember, AFWorkspaces}; +use database_entity::{AFRole, AFWorkspaceMember, AFWorkspaces}; +use shared_entity::{error::AppError, error_code::ErrorCode}; +use sqlx::{types::uuid, PgPool}; pub async fn get_workspaces( pg_pool: &PgPool, diff --git a/src/component/storage_proxy.rs b/src/component/storage_proxy.rs index ea717413..61046682 100644 --- a/src/component/storage_proxy.rs +++ b/src/component/storage_proxy.rs @@ -1,12 +1,12 @@ use async_trait::async_trait; use collab::core::collab::MutexCollab; -use std::collections::HashMap; -use std::sync::{Arc, Weak}; -use storage::collab::{CollabPostgresDBStorageImpl, CollabStorage, StorageConfig}; -use storage_entity::{ +use database::collab::{CollabPostgresDBStorageImpl, CollabStorage, StorageConfig}; +use database_entity::{ AFCollabSnapshots, InsertCollabParams, InsertSnapshotParams, QueryCollabParams, QueryObjectSnapshotParams, QuerySnapshotParams, RawData, }; +use std::collections::HashMap; +use std::sync::{Arc, Weak}; use tokio::sync::RwLock; use tracing::info; @@ -44,11 +44,11 @@ impl CollabStorage for CollabStorageProxy { .insert(object_id.to_string(), collab); } - async fn insert_collab(&self, params: InsertCollabParams) -> storage::collab::Result<()> { + async fn insert_collab(&self, params: InsertCollabParams) -> database::collab::Result<()> { self.inner.insert_collab(params).await } - async fn get_collab(&self, params: QueryCollabParams) -> storage::collab::Result { + async fn get_collab(&self, params: QueryCollabParams) -> database::collab::Result { let collab = self .collab_by_object_id .read() @@ -65,25 +65,25 @@ impl CollabStorage for CollabStorageProxy { } } - async fn delete_collab(&self, object_id: &str) -> storage::collab::Result<()> { + async fn delete_collab(&self, object_id: &str) -> database::collab::Result<()> { self.inner.delete_collab(object_id).await } - async fn create_snapshot(&self, params: InsertSnapshotParams) -> storage::collab::Result<()> { + async fn create_snapshot(&self, params: InsertSnapshotParams) -> database::collab::Result<()> { self.inner.create_snapshot(params).await } async fn get_snapshot_data( &self, params: QuerySnapshotParams, - ) -> storage::collab::Result { + ) -> database::collab::Result { self.inner.get_snapshot_data(params).await } async fn get_all_snapshots( &self, params: QueryObjectSnapshotParams, - ) -> storage::collab::Result { + ) -> database::collab::Result { self.inner.get_all_snapshots(params).await } } diff --git a/tests/collab/storage_test.rs b/tests/collab/storage_test.rs index 1dd5ed16..566ad463 100644 --- a/tests/collab/storage_test.rs +++ b/tests/collab/storage_test.rs @@ -3,9 +3,9 @@ use crate::{ }; use collab_define::CollabType; +use database_entity::{DeleteCollabParams, InsertCollabParams, QueryCollabParams}; use shared_entity::error_code::ErrorCode; use sqlx::types::Uuid; -use storage_entity::{DeleteCollabParams, InsertCollabParams, QueryCollabParams}; #[tokio::test] async fn success_insert_collab_test() { diff --git a/tests/realtime/offline_edit_collab_test.rs b/tests/realtime/offline_edit_collab_test.rs index a65085e4..21502b53 100644 --- a/tests/realtime/offline_edit_collab_test.rs +++ b/tests/realtime/offline_edit_collab_test.rs @@ -6,7 +6,7 @@ use serde_json::json; use shared_entity::error_code::ErrorCode; use sqlx::types::uuid; -use storage_entity::QueryCollabParams; +use database_entity::QueryCollabParams; #[tokio::test] async fn ws_reconnect_sync_test() { diff --git a/tests/realtime/test_client.rs b/tests/realtime/test_client.rs index a7e9a069..2394e8ef 100644 --- a/tests/realtime/test_client.rs +++ b/tests/realtime/test_client.rs @@ -6,11 +6,11 @@ use collab::core::collab_state::SyncState; use collab::core::origin::{CollabClient, CollabOrigin}; use collab::preclude::Collab; use collab_define::CollabType; +use database_entity::QueryCollabParams; use serde_json::Value; use sqlx::types::Uuid; use std::collections::HashMap; use std::sync::{Arc, Once}; -use storage_entity::QueryCollabParams; use tokio::time::{timeout, Duration}; use tokio_stream::StreamExt; use tracing_subscriber::fmt::Subscriber;