diff --git a/Cargo.lock b/Cargo.lock index 0287e79..4e8ad54 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -27,7 +27,7 @@ dependencies = [ "getrandom", "once_cell", "version_check", - "zerocopy 0.7.35", + "zerocopy", ] [[package]] @@ -562,9 +562,9 @@ checksum = "1fd0f2584146f6f2ef48085050886acf353beff7305ebd1ae69500e27c67f64b" [[package]] name = "bytes" -version = "1.7.0" +version = "1.7.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fca2be1d5c43812bae364ee3f30b3afcb7877cf59f4aeb94c66f313a41d2fac9" +checksum = "8318a53db07bb3f8dca91a600466bdb3f2eaadeedfdbcf02e1accbad9271ba50" [[package]] name = "cc" @@ -1099,9 +1099,9 @@ checksum = "9fc0510504f03c51ada170672ac806f1f105a88aa97a5281117e1ddc3368e51a" [[package]] name = "flate2" -version = "1.0.30" +version = "1.0.31" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5f54427cfd1c7829e2a139fcefea601bf088ebca651d2bf53ebc600eac295dae" +checksum = "7f211bbe8e69bbd0cfdea405084f128ae8b4aaa6b0b522fc8f2b009084797920" dependencies = [ "crc32fast", "miniz_oxide", @@ -2325,11 +2325,11 @@ checksum = "439ee305def115ba05938db6eb1644ff94165c5ab5e9420d1c1bcedbba909391" [[package]] name = "ppv-lite86" -version = "0.2.18" +version = "0.2.20" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "dee4364d9f3b902ef14fab8a1ddffb783a1cb6b4bba3bfc1fa3922732c7de97f" +checksum = "77957b295656769bb8ad2b6a6b09d897d94f05c41b069aede1fcdaa675eaea04" dependencies = [ - "zerocopy 0.6.6", + "zerocopy", ] [[package]] @@ -2421,9 +2421,9 @@ dependencies = [ [[package]] name = "quinn" -version = "0.11.2" +version = "0.11.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ceeeeabace7857413798eb1ffa1e9c905a9946a57d81fb69b4b71c4d8eb3ad" +checksum = "b22d8e7369034b9a7132bc2008cac12f2013c8132b45e0554e6e20e2617f2156" dependencies = [ "bytes", "pin-project-lite", @@ -2431,6 +2431,7 @@ dependencies = [ "quinn-udp", "rustc-hash", "rustls 0.23.12", + "socket2 0.5.7", "thiserror", "tokio", "tracing", @@ -2438,9 +2439,9 @@ dependencies = [ [[package]] name = "quinn-proto" -version = "0.11.3" +version = "0.11.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ddf517c03a109db8100448a4be38d498df8a210a99fe0e1b9eaf39e78c640efe" +checksum = "ba92fb39ec7ad06ca2582c0ca834dfeadcaf06ddfc8e635c80aa7e1c05315fdd" dependencies = [ "bytes", "rand", @@ -2462,6 +2463,7 @@ dependencies = [ "libc", "once_cell", "socket2 0.5.7", + "tracing", "windows-sys 0.52.0", ] @@ -2524,9 +2526,9 @@ dependencies = [ [[package]] name = "regex" -version = "1.10.5" +version = "1.10.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b91213439dad192326a0d7c6ee3955910425f441d7038e0d6933b0aec5c4517f" +checksum = "4219d74c6b67a3654a9fbebc4b419e22126d13d2f3c4a07ee0cb61ff79a79619" dependencies = [ "aho-corasick", "memchr", @@ -2592,7 +2594,7 @@ dependencies = [ "pin-project-lite", "quinn", "rustls 0.23.12", - "rustls-pemfile 2.1.2", + "rustls-pemfile 2.1.3", "rustls-pki-types", "serde", "serde_json", @@ -2686,9 +2688,9 @@ checksum = "719b953e2095829ee67db738b3bfa9fa368c94900df327b3f07fe6e794d2fe1f" [[package]] name = "rustc-hash" -version = "1.1.0" +version = "2.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08d43f7aa6b08d49f382cde6a7982047c3426db949b1424bc4b7ec9ae12c6ce2" +checksum = "583034fd73374156e66797ed8e5b0d5690409c9226b22d87cb7f19821c05d152" [[package]] name = "rustix" @@ -2753,9 +2755,9 @@ dependencies = [ [[package]] name = "rustls-pemfile" -version = "2.1.2" +version = "2.1.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29993a25686778eb88d4189742cd713c9bce943bc54251a33509dc63cbacf73d" +checksum = "196fe16b00e106300d3e45ecfcb764fa292a535d7326a29a5875c579c7417425" dependencies = [ "base64 0.22.1", "rustls-pki-types", @@ -2850,9 +2852,9 @@ dependencies = [ [[package]] name = "sea-orm" -version = "1.0.0-rc.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c0181d6247d8d8a916c16c08ba530e05010c73cab140c2fd07e252bca9c423f9" +checksum = "f9d4ec1cdd8bdd3553d3c946079f58efa33fedc477f32603652652abcef96fe6" dependencies = [ "async-stream", "async-trait", @@ -2872,9 +2874,9 @@ dependencies = [ [[package]] name = "sea-orm-cli" -version = "1.0.0-rc.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76cf2bfe983fad4c67500ef7c9da9b65c94efbbe40293b5cc21936c66aa7f3fe" +checksum = "d525eee597817631f800857b0c2fe8645ec9c65b4304176a44bf14b93366009e" dependencies = [ "chrono", "clap", @@ -2889,9 +2891,9 @@ dependencies = [ [[package]] name = "sea-orm-macros" -version = "1.0.0-rc.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2e35a73940be69d0b1574773fef989e15bb3e8e5bfd2ac54c5e31b0650775d21" +checksum = "f363ead48b625a6f8f905322a820464f728fa4fe4f1c222bed5234ccf8fb8555" dependencies = [ "heck 0.4.1", "proc-macro2", @@ -2903,9 +2905,9 @@ dependencies = [ [[package]] name = "sea-orm-migration" -version = "1.0.0-rc.7" +version = "1.0.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "db7a1850f21ecb01eaa913e8e62bdacd233fab5ee8cad07bd872a8b87262fb0f" +checksum = "5df62369752f91b9295f8d71c146d84f818301a9ae7295106ebe8bbaa989a072" dependencies = [ "async-trait", "clap", @@ -2920,9 +2922,9 @@ dependencies = [ [[package]] name = "sea-query" -version = "0.31.0-rc.9" +version = "0.31.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2ad45af4aedefa04c296d623ffb7e409a24d4bfc0b5599b43f5726d88cc7ff2a" +checksum = "7e5073b2cfed767511a57d18115f3b3d8bcb5690bf8c89518caec6cb22c0cd74" dependencies = [ "educe", "inherent", @@ -2932,9 +2934,9 @@ dependencies = [ [[package]] name = "sea-query-binder" -version = "0.6.0-rc.4" +version = "0.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9891be9fd1ba58a710274f0387ca1ed2bd0c883a98458cdf706fc35009dae171" +checksum = "754965d4aee6145bec25d0898e5c931e6c22859789ce62fd85a42a15ed5a8ce3" dependencies = [ "sea-query", "sqlx", @@ -2955,9 +2957,9 @@ dependencies = [ [[package]] name = "sea-schema" -version = "0.15.0-rc.7" +version = "0.15.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3d26463bcf02ab6fe334ca814d8ec06bc2a8c69e190890a25b109fa5c50c7018" +checksum = "ad52149fc81836ea7424c3425d8f6ed8ad448dd16d2e4f6a3907ba46f3f2fd78" dependencies = [ "futures", "sea-query", @@ -2966,14 +2968,14 @@ dependencies = [ [[package]] name = "sea-schema-derive" -version = "0.2.0" +version = "0.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c6f686050f76bffc4f635cda8aea6df5548666b830b52387e8bc7de11056d11e" +checksum = "debdc8729c37fdbf88472f97fd470393089f997a909e535ff67c544d18cfccf0" dependencies = [ "heck 0.4.1", "proc-macro2", "quote", - "syn 1.0.109", + "syn 2.0.72", ] [[package]] @@ -3007,9 +3009,9 @@ dependencies = [ [[package]] name = "serde_json" -version = "1.0.121" +version = "1.0.122" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ab380d7d9f22ef3f21ad3e6c1ebe8e4fc7a2000ccba2e4d71fc96f15b2cb609" +checksum = "784b6203951c57ff748476b126ccb5e8e2959a5c19e5c617ab1956be3dbc68da" dependencies = [ "itoa", "memchr", @@ -3603,12 +3605,13 @@ checksum = "a7065abeca94b6a8a577f9bd45aa0867a2238b74e8eb67cf10d492bc39351394" [[package]] name = "tempfile" -version = "3.10.1" +version = "3.11.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "85b77fafb263dd9d05cbeac119526425676db3784113aa9295c88498cbf8bff1" +checksum = "b8fcd239983515c23a32fb82099f97d0b11b8c72f654ed659363a95c3dad7a53" dependencies = [ "cfg-if", "fastrand 2.1.0", + "once_cell", "rustix 0.38.34", "windows-sys 0.52.0", ] @@ -4397,11 +4400,11 @@ checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6" [[package]] name = "winapi-util" -version = "0.1.8" +version = "0.1.9" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4d4cc384e1e73b93bafa6fb4f1df8c41695c8a91cf9c4c64358067d15a7b6c6b" +checksum = "cf221c93e13a30d793f7645a0e7762c55d169dbb0a49671918a2319d289b10bb" dependencies = [ - "windows-sys 0.52.0", + "windows-sys 0.59.0", ] [[package]] @@ -4437,6 +4440,15 @@ dependencies = [ "windows-targets 0.52.6", ] +[[package]] +name = "windows-sys" +version = "0.59.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "1e38bc4d79ed67fd075bcc251a1c39b32a1776bbe92e5bef1f0bf1f8c531853b" +dependencies = [ + "windows-targets 0.52.6", +] + [[package]] name = "windows-targets" version = "0.48.5" @@ -4577,34 +4589,14 @@ dependencies = [ "windows-sys 0.48.0", ] -[[package]] -name = "zerocopy" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "854e949ac82d619ee9a14c66a1b674ac730422372ccb759ce0c39cabcf2bf8e6" -dependencies = [ - "byteorder", - "zerocopy-derive 0.6.6", -] - [[package]] name = "zerocopy" version = "0.7.35" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1b9b4fd18abc82b8136838da5d50bae7bdea537c574d8dc1a34ed098d6c166f0" dependencies = [ - "zerocopy-derive 0.7.35", -] - -[[package]] -name = "zerocopy-derive" -version = "0.6.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "125139de3f6b9d625c39e2efdd73d41bdac468ccd556556440e322be0e1bbd91" -dependencies = [ - "proc-macro2", - "quote", - "syn 2.0.72", + "byteorder", + "zerocopy-derive", ] [[package]] diff --git a/Cargo.toml b/Cargo.toml index db634e4..93e42af 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -16,7 +16,7 @@ members = ["api", "app", "doc", "models", "migration", "utils"] [workspace.dependencies] axum = { version = "0.7.5", default-features = false } tower = { version = "0.4.13", default-features = false } -sea-orm = { version = "1.0.0-rc.7", default-features = false } +sea-orm = { version = "1.0.0", default-features = false } serde = { version = "1", features = ["derive"] } serde_json = { version = "1", default-features = false } tracing = "0.1.40" diff --git a/README.md b/README.md index 5f6c5de..5f3707e 100644 --- a/README.md +++ b/README.md @@ -10,7 +10,7 @@ Refer to [this post](https://kigawas.me/posts/rustacean-clean-architecture-appro - [Axum](https://github.com/tokio-rs/axum) framework - [SeaORM](https://github.com/SeaQL/sea-orm) domain models -- Completely separated API routers and DB-related logic (named "services") +- Completely separated API routers and DB-related logic (named "persistence" layer) - Completely separated input parameters, queries and output schemas - OpenAPI documentation ([Swagger UI](https://clean-axum.shuttleapp.rs/docs) and [Scalar](https://clean-axum.shuttleapp.rs/scalar)) powered by [Utoipa](https://github.com/juhaku/utoipa) - Error handling with [Anyhow](https://github.com/dtolnay/anyhow) @@ -41,7 +41,7 @@ Main concept: Web framework is replaceable. All modules here should not include any specific API web framework logic. -- `app::services`: DB manipulation (CRUD) functions +- `app::persistence`: DB manipulation (CRUD) functions - `app::config`: DB or API server configuration - `app::state`: APP state, e.g. DB connection - `app::error`: APP errors used by `api::error`. e.g. "User not found" @@ -61,7 +61,7 @@ Except `models::domains` and `migration`, all modules are ORM library agnostic. ### Unit and integration tests - `tests::api`: API integration tests. Hierarchy is the same as `api::routers` -- `tests::app`: DB/ORM-related unit tests. Hierarchy is the same as `app::services` +- `tests::app::persistence`: DB/ORM-related unit tests. Hierarchy is the same as `app::persistence` ### Others diff --git a/api/src/routers/user.rs b/api/src/routers/user.rs index 48083ff..d7eb982 100644 --- a/api/src/routers/user.rs +++ b/api/src/routers/user.rs @@ -8,7 +8,7 @@ use axum::{ use sea_orm::TryIntoModel; use app::error::UserError; -use app::services::user::{create_user, get_user, search_users}; +use app::persistence::user::{create_user, get_user, search_users}; use app::state::AppState; use models::params::user::CreateUserParams; use models::queries::user::UserQuery; diff --git a/app/src/lib.rs b/app/src/lib.rs index 26bb28d..51294a8 100644 --- a/app/src/lib.rs +++ b/app/src/lib.rs @@ -1,4 +1,4 @@ pub mod config; pub mod error; -pub mod services; +pub mod persistence; pub mod state; diff --git a/app/src/services/mod.rs b/app/src/persistence/mod.rs similarity index 100% rename from app/src/services/mod.rs rename to app/src/persistence/mod.rs diff --git a/app/src/services/user.rs b/app/src/persistence/user.rs similarity index 100% rename from app/src/services/user.rs rename to app/src/persistence/user.rs diff --git a/migration/Cargo.toml b/migration/Cargo.toml index be9f823..77d3243 100644 --- a/migration/Cargo.toml +++ b/migration/Cargo.toml @@ -12,4 +12,4 @@ path = "src/lib.rs" models = { path = "../models" } async-std = { version = "1", features = ["attributes", "tokio1"] } -sea-orm-migration = { version = "1.0.0-rc.7" } +sea-orm-migration = { version = "1.0.0" } diff --git a/tests/app/mod.rs b/tests/app/mod.rs index 35d60ea..7c4e38d 100644 --- a/tests/app/mod.rs +++ b/tests/app/mod.rs @@ -1,13 +1 @@ -use utils::testing::setup_test_db; - -mod user; -use user::test_user; - -#[tokio::test] -async fn main() { - let db = setup_test_db("sqlite::memory:") - .await - .expect("Set up db failed!"); - - test_user(&db).await; -} +mod persistence; diff --git a/tests/app/persistence/mod.rs b/tests/app/persistence/mod.rs new file mode 100644 index 0000000..df8dfdc --- /dev/null +++ b/tests/app/persistence/mod.rs @@ -0,0 +1,13 @@ +use utils::testing::setup_test_db; + +mod user; +use user::test_user; + +#[tokio::test] +async fn user_main() { + let db = setup_test_db("sqlite::memory:") + .await + .expect("Set up db failed!"); + + test_user(&db).await; +} diff --git a/tests/app/user.rs b/tests/app/persistence/user.rs similarity index 92% rename from tests/app/user.rs rename to tests/app/persistence/user.rs index 79bda6e..421e3b4 100644 --- a/tests/app/user.rs +++ b/tests/app/persistence/user.rs @@ -1,6 +1,6 @@ use sea_orm::{DatabaseConnection, Unchanged}; -use app::services::user::create_user; +use app::persistence::user::create_user; use models::domains::user; use models::params::user::CreateUserParams;