From 5e097274bc310b14f173940e5ca449895156d726 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Adrian=20Wo=C5=BAniak?= Date: Thu, 17 Nov 2022 16:56:08 +0100 Subject: [PATCH] Remove old architecture --- Cargo.lock | 989 +----------------- Cargo.toml | 10 +- crates/account_manager/src/actions.rs | 119 ++- crates/account_manager/src/rpc.rs | 18 +- crates/api/Cargo.toml | 2 +- crates/api/src/main.rs | 2 - .../api/src/routes/admin/api_v1/accounts.rs | 23 +- crates/api/src/routes/admin/api_v1/mod.rs | 1 - crates/api/src/routes/admin/api_v1/orders.rs | 1 - .../api/src/routes/admin/api_v1/products.rs | 1 - crates/api/src/routes/admin/api_v1/stocks.rs | 1 - crates/api/src/routes/admin/api_v1/uploads.rs | 1 - .../src/routes/public/api_v1/restricted.rs | 1 - .../src/routes/public/api_v1/unrestricted.rs | 15 +- crates/channels/src/accounts.rs | 52 +- crates/database_manager/src/accounts.rs | 2 - crates/database_manager/src/lib.rs | 12 +- crates/database_manager/src/order_items.rs | 1 - crates/database_manager/src/products.rs | 1 - crates/db-seed/Cargo.toml | 9 +- crates/db-seed/src/accounts.rs | 7 +- crates/db-seed/src/main.rs | 2 +- crates/model/src/api.rs | 2 - crates/model/src/lib.rs | 25 +- .../migrations/202204131841_init.sql | 6 +- crates/stock_manager/src/actions/product.rs | 20 + .../stock_manager/src/db/product_variants.rs | 6 + crates/stock_manager/src/db/products.rs | 1 + crates/stock_manager/src/db/stocks.rs | 7 +- 29 files changed, 256 insertions(+), 1081 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index e86e109..4b2bae5 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -32,29 +32,6 @@ dependencies = [ "tracing-subscriber", ] -[[package]] -name = "actix" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3720d0064a0ce5c0de7bd93bdb0a6caebab2a9b5668746145d7b3b0c5da02914" -dependencies = [ - "actix-rt", - "bitflags", - "bytes", - "crossbeam-channel", - "futures-core", - "futures-sink", - "futures-task", - "futures-util", - "log", - "once_cell", - "parking_lot 0.11.2", - "pin-project-lite", - "smallvec", - "tokio", - "tokio-util 0.6.10", -] - [[package]] name = "actix" version = "0.13.0" @@ -72,22 +49,11 @@ dependencies = [ "futures-util", "log", "once_cell", - "parking_lot 0.12.1", + "parking_lot", "pin-project-lite", "smallvec", "tokio", - "tokio-util 0.7.4", -] - -[[package]] -name = "actix-broker" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e089b5c4d0cf02d72a9eca0b6c80aebff1ccd3d1e99c83d1f7b9baeff39dc5e9" -dependencies = [ - "actix 0.13.0", - "ahash", - "log", + "tokio-util", ] [[package]] @@ -104,45 +70,7 @@ dependencies = [ "memchr", "pin-project-lite", "tokio", - "tokio-util 0.7.4", -] - -[[package]] -name = "actix-cors" -version = "0.6.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b340e9cfa5b08690aae90fb61beb44e9b06f44fe3d0f93781aaa58cfba86245e" -dependencies = [ - "actix-utils", - "actix-web", - "derive_more", - "futures-util", - "log", - "once_cell", - "smallvec", -] - -[[package]] -name = "actix-files" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d832782fac6ca7369a70c9ee9a20554623c5e51c76e190ad151780ebea1cf689" -dependencies = [ - "actix-http", - "actix-service", - "actix-utils", - "actix-web", - "askama_escape", - "bitflags", - "bytes", - "derive_more", - "futures-core", - "http-range", - "log", - "mime", - "mime_guess", - "percent-encoding", - "pin-project-lite", + "tokio-util", ] [[package]] @@ -182,21 +110,6 @@ dependencies = [ "zstd", ] -[[package]] -name = "actix-identity" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "171fe3ed055b2dd50c61967911d253d47e76e1d4308acfbf99fc7affe5ec42aa" -dependencies = [ - "actix-service", - "actix-utils", - "actix-web", - "futures-util", - "serde", - "serde_json", - "time 0.3.16", -] - [[package]] name = "actix-macros" version = "0.2.3" @@ -207,45 +120,6 @@ dependencies = [ "syn", ] -[[package]] -name = "actix-multipart" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9edfb0e7663d7fe18c8d5b668c9c1bcf79176b1dcc9d4da9592503209a6bfb0" -dependencies = [ - "actix-utils", - "actix-web", - "bytes", - "derive_more", - "futures-core", - "httparse", - "local-waker", - "log", - "mime", - "twoway", -] - -[[package]] -name = "actix-redis" -version = "0.11.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5dde9fa8bde15d084d459eb59f766c08d00a6f550e7054187878fc9cbaa19115" -dependencies = [ - "actix 0.12.0", - "actix-rt", - "actix-service", - "actix-tls", - "actix-web", - "backoff", - "derive_more", - "futures-core", - "log", - "redis-async", - "time 0.3.16", - "tokio", - "tokio-util 0.6.10", -] - [[package]] name = "actix-router" version = "0.5.1" @@ -299,44 +173,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "actix-session" -version = "0.6.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0c9138a66462f1e65da829f9c0de81b44a96dfe193a4f19bfea32ee2be312368" -dependencies = [ - "actix 0.12.0", - "actix-redis", - "actix-service", - "actix-utils", - "actix-web", - "anyhow", - "async-trait", - "derive_more", - "futures-core", - "rand", - "serde", - "serde_json", - "time 0.3.16", - "tracing", -] - -[[package]] -name = "actix-tls" -version = "3.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fde0cf292f7cdc7f070803cb9a0d45c018441321a78b1042ffbbb81ec333297" -dependencies = [ - "actix-codec", - "actix-rt", - "actix-service", - "actix-utils", - "futures-core", - "log", - "pin-project-lite", - "tokio-util 0.7.4", -] - [[package]] name = "actix-utils" version = "3.0.1" @@ -400,35 +236,6 @@ dependencies = [ "syn", ] -[[package]] -name = "actix-web-httpauth" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "08c25a48b4684f90520183cd1a688e5f4f7e9905835fa75d02c0fe4f60fcdbe6" -dependencies = [ - "actix-service", - "actix-utils", - "actix-web", - "base64", - "futures-core", - "futures-util", - "pin-project-lite", -] - -[[package]] -name = "actix-web-opentelemetry" -version = "0.12.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "503ff1136a085f39fc9fd96818a5e9c7ab58ccd36682f3cfc32a001d01cc3a50" -dependencies = [ - "actix-http", - "actix-web", - "futures-util", - "opentelemetry 0.17.0", - "opentelemetry-semantic-conventions 0.9.0", - "serde", -] - [[package]] name = "actix_derive" version = "0.6.0" @@ -440,56 +247,12 @@ dependencies = [ "syn", ] -[[package]] -name = "addr2line" -version = "0.17.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b9ecd88a8c8378ca913a680cd98f0f13ac67383d35993f86c90a70e3f137816b" -dependencies = [ - "gimli", -] - [[package]] name = "adler" version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe" -[[package]] -name = "aead" -version = "0.5.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5c192eb8f11fc081b0fe4259ba5af04217d4e0faddd02417310a927911abd7c8" -dependencies = [ - "crypto-common", - "generic-array", -] - -[[package]] -name = "aes" -version = "0.8.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "433cfd6710c9986c576a25ca913c39d66a6474107b406f34f91d4a8923395241" -dependencies = [ - "cfg-if 1.0.0", - "cipher", - "cpufeatures", -] - -[[package]] -name = "aes-gcm" -version = "0.10.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "82e1366e0c69c9f927b1fa5ce2c7bf9eafc8f9268c0b9800729e8b267612447c" -dependencies = [ - "aead", - "aes", - "cipher", - "ctr", - "ghash", - "subtle", -] - [[package]] name = "ahash" version = "0.7.6" @@ -558,12 +321,6 @@ version = "0.7.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8da52d66c7071e2e3fa2a1e5c6d088fec47b593032b254f5e980de8ea54454d6" -[[package]] -name = "askama_escape" -version = "0.10.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "619743e34b5ba4e9703bba34deac3427c72507c7159f5fd030aea8cac0cfe341" - [[package]] name = "async-trait" version = "0.1.58" @@ -616,32 +373,6 @@ version = "1.1.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "d468802bab17cbc0cc575e9b053f41e72aa36bfa6b7f55e3529ffa43161b97fa" -[[package]] -name = "backoff" -version = "0.4.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b62ddb9cb1ec0a098ad4bbf9344d0713fa193ae1a80af55febcff2627b6a00c1" -dependencies = [ - "getrandom", - "instant", - "rand", -] - -[[package]] -name = "backtrace" -version = "0.3.66" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cab84319d616cfb654d03394f38ab7e6f0919e181b1b57e1fd15e7fb4077d9a7" -dependencies = [ - "addr2line", - "cc", - "cfg-if 1.0.0", - "libc", - "miniz_oxide", - "object", - "rustc-demangle", -] - [[package]] name = "base64" version = "0.13.1" @@ -654,61 +385,6 @@ version = "1.5.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b645a089122eccb6111b4f81cbc1a49f5900ac4666bb93ac027feaecf15607bf" -[[package]] -name = "bazzar" -version = "0.1.0" -dependencies = [ - "actix 0.13.0", - "actix-broker", - "actix-cors", - "actix-files", - "actix-identity", - "actix-multipart", - "actix-redis", - "actix-rt", - "actix-session", - "actix-web", - "actix-web-httpauth", - "actix-web-opentelemetry", - "async-trait", - "bytes", - "channels", - "chrono", - "config", - "database_manager", - "derive_more", - "dotenv", - "fs_manager", - "futures 0.3.25", - "futures-util", - "gumdrop", - "human-panic", - "include_dir", - "itertools", - "jemallocator", - "model", - "oauth2", - "order_manager", - "parking_lot 0.12.1", - "payment_manager", - "pretty_env_logger", - "rumqttc", - "serde", - "serde_json", - "sqlx", - "sqlx-core", - "tarpc", - "tera", - "thiserror", - "token_manager", - "tokio", - "toml", - "tracing", - "tracing-subscriber", - "uuid 1.2.1", - "validator 0.14.0", -] - [[package]] name = "bigdecimal" version = "0.3.0" @@ -909,38 +585,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "chrono-tz" -version = "0.6.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "29c39203181991a7dd4343b8005bd804e7a9a37afb8ac070e43771e8c820bbde" -dependencies = [ - "chrono", - "chrono-tz-build", - "phf", -] - -[[package]] -name = "chrono-tz-build" -version = "0.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6f509c3a87b33437b05e2458750a0700e5bdd6956176773e6c7d6dd15a283a0c" -dependencies = [ - "parse-zoneinfo", - "phf", - "phf_codegen", -] - -[[package]] -name = "cipher" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d1873270f8f7942c191139cb8a40fd228da6c3fd2fc376d7e92d47aa14aeb59e" -dependencies = [ - "crypto-common", - "inout", -] - [[package]] name = "codespan-reporting" version = "0.11.1" @@ -957,7 +601,7 @@ version = "0.1.0" dependencies = [ "actix-web", "cookie", - "parking_lot 0.12.1", + "parking_lot", "password-hash", "pay_u", "serde", @@ -1002,9 +646,7 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "344adc371239ef32293cb1c4fe519592fcf21206c79c02854320afcdf3ab4917" dependencies = [ - "aes-gcm", "base64", - "hkdf", "hmac", "percent-encoding", "rand", @@ -1123,19 +765,9 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3" dependencies = [ "generic-array", - "rand_core", "typenum", ] -[[package]] -name = "ctr" -version = "0.9.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0369ee1ad671834580515889b80f2ea915f23b8be8d0daa4bbaf2ac5c7590835" -dependencies = [ - "cipher", -] - [[package]] name = "cxx" version = "1.0.80" @@ -1225,7 +857,7 @@ checksum = "3ee2393c4a91429dffb4bedf19f4d6abf27d8a732c8ce4980305d782e5426d57" name = "database_manager" version = "0.1.0" dependencies = [ - "actix 0.13.0", + "actix", "actix-rt", "async-trait", "chrono", @@ -1245,29 +877,6 @@ dependencies = [ "uuid 1.2.1", ] -[[package]] -name = "db-seed" -version = "0.1.0" -dependencies = [ - "actix 0.13.0", - "actix-rt", - "actix-web", - "bytes", - "config", - "database_manager", - "dotenv", - "fake", - "fs_manager", - "human-panic", - "model", - "password-hash", - "rand", - "thiserror", - "tokio", - "tracing", - "tracing-subscriber", -] - [[package]] name = "db-utils" version = "0.1.0" @@ -1299,12 +908,6 @@ dependencies = [ "syn", ] -[[package]] -name = "deunicode" -version = "0.4.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "850878694b7933ca4c9569d30a34b55031b9b139ee1fc7b94a527c4ef960d690" - [[package]] name = "digest" version = "0.10.5" @@ -1392,7 +995,7 @@ checksum = "90e5c1c8368803113bf0c9584fc495a58b86dc8a29edbf8fe877d21d9507e797" name = "email_manager" version = "0.1.0" dependencies = [ - "actix 0.13.0", + "actix", "actix-rt", "channels", "chrono", @@ -1640,17 +1243,11 @@ dependencies = [ "percent-encoding", ] -[[package]] -name = "fs_extra" -version = "1.2.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2022715d62ab30faffd124d40b76f4134a550a87792276512b18d63272333394" - [[package]] name = "fs_manager" version = "0.1.0" dependencies = [ - "actix 0.13.0", + "actix", "actix-rt", "actix-web", "bytes", @@ -1739,7 +1336,7 @@ checksum = "1b6bdbb8c5a42b2bb5ee8dd9dc2c7d73ce3e15d26dfe100fb347ffa3f58c672b" dependencies = [ "futures-core", "lock_api", - "parking_lot 0.12.1", + "parking_lot", ] [[package]] @@ -1812,22 +1409,6 @@ dependencies = [ "wasm-bindgen", ] -[[package]] -name = "ghash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d930750de5717d2dd0b8c0d42c076c0e884c81a73e6cab859bbd2339c71e3e40" -dependencies = [ - "opaque-debug", - "polyval", -] - -[[package]] -name = "gimli" -version = "0.26.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "22030e2c5a68ec659fde1e949a745124b48e6fa8b045b7ed5bd1fe4ccc5c4e5d" - [[package]] name = "git2" version = "0.14.4" @@ -1841,30 +1422,6 @@ dependencies = [ "url", ] -[[package]] -name = "globset" -version = "0.4.9" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0a1e17342619edbc21a964c2afbeb6c820c6a2560032872f397bb97ea127bd0a" -dependencies = [ - "aho-corasick", - "bstr", - "fnv", - "log", - "regex", -] - -[[package]] -name = "globwalk" -version = "0.8.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93e3af942408868f6934a7b85134a3230832b9977cf66125df2f9edcfce4ddcc" -dependencies = [ - "bitflags", - "ignore", - "walkdir", -] - [[package]] name = "gloo-events" version = "0.1.2" @@ -1948,7 +1505,7 @@ dependencies = [ "indexmap", "slab", "tokio", - "tokio-util 0.7.4", + "tokio-util", "tracing", ] @@ -2048,12 +1605,6 @@ dependencies = [ "pin-project-lite", ] -[[package]] -name = "http-range" -version = "0.1.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21dec9db110f5f872ed9699c3ecf50cf16f423502706ba5c72462e28d3157573" - [[package]] name = "httparse" version = "1.8.0" @@ -2066,27 +1617,6 @@ version = "1.0.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "c4a1e36c821dbe04574f602848a19f742f4fb3c98d40449f11bcad18d6b17421" -[[package]] -name = "human-panic" -version = "1.0.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39f357a500abcbd7c5f967c1d45c8838585b36743823b9d43488f24850534e36" -dependencies = [ - "backtrace", - "os_type", - "serde", - "serde_derive", - "termcolor", - "toml", - "uuid 0.8.2", -] - -[[package]] -name = "humansize" -version = "1.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "02296996cb8796d7c6e3bc2d9211b7802812d36999a51bb754123ead7d37d026" - [[package]] name = "humantime" version = "1.3.0" @@ -2126,19 +1656,6 @@ dependencies = [ "want", ] -[[package]] -name = "hyper-rustls" -version = "0.23.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d87c48c02e0dc5e3b849a2041db3029fd066650f8f717c07bf8ed78ccb895cac" -dependencies = [ - "http", - "hyper", - "rustls", - "tokio", - "tokio-rustls", -] - [[package]] name = "hyper-tls" version = "0.5.0" @@ -2203,43 +1720,6 @@ dependencies = [ "unicode-normalization", ] -[[package]] -name = "ignore" -version = "0.4.18" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "713f1b139373f96a2e0ce3ac931cd01ee973c3c5dd7c40c0c2efe96ad2b6751d" -dependencies = [ - "crossbeam-utils", - "globset", - "lazy_static", - "log", - "memchr", - "regex", - "same-file", - "thread_local", - "walkdir", - "winapi-util", -] - -[[package]] -name = "include_dir" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "18762faeff7122e89e0857b02f7ce6fcc0d101d5e9ad2ad7846cc01d61b7f19e" -dependencies = [ - "include_dir_macros", -] - -[[package]] -name = "include_dir_macros" -version = "0.7.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b139284b5cf57ecfa712bcc66950bb635b31aff41c188e8a4cfc758eca374a3f" -dependencies = [ - "proc-macro2", - "quote", -] - [[package]] name = "indexmap" version = "1.9.1" @@ -2251,15 +1731,6 @@ dependencies = [ "serde", ] -[[package]] -name = "inout" -version = "0.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a0c10553d664a4d0bcff9f4215d0aac67a639cc68ef660840afe309b807bc9f5" -dependencies = [ - "generic-array", -] - [[package]] name = "insta" version = "1.21.0" @@ -2343,27 +1814,6 @@ version = "1.0.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc" -[[package]] -name = "jemalloc-sys" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0d3b9f3f5c9b31aa0f5ed3260385ac205db665baa41d49bb8338008ae94ede45" -dependencies = [ - "cc", - "fs_extra", - "libc", -] - -[[package]] -name = "jemallocator" -version = "0.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "43ae63fcfc45e99ab3d1b29a46782ad679e98436c3169d15a167a1108a724b69" -dependencies = [ - "jemalloc-sys", - "libc", -] - [[package]] name = "jobserver" version = "0.1.25" @@ -2417,7 +1867,7 @@ dependencies = [ name = "lang_provider" version = "0.1.0" dependencies = [ - "actix 0.13.0", + "actix", "actix-rt", "config", "fluent", @@ -2663,7 +2113,7 @@ dependencies = [ "thiserror", "tracing", "uuid 1.2.1", - "validator 0.15.0", + "validator", ] [[package]] @@ -2798,47 +2248,12 @@ dependencies = [ "libc", ] -[[package]] -name = "oauth2" -version = "4.2.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d62c436394991641b970a92e23e8eeb4eb9bca74af4f5badc53bcd568daadbd" -dependencies = [ - "base64", - "chrono", - "getrandom", - "http", - "rand", - "reqwest", - "serde", - "serde_json", - "serde_path_to_error", - "sha2", - "thiserror", - "url", -] - -[[package]] -name = "object" -version = "0.29.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "21158b2c33aa6d4561f1c0a6ea283ca92bc54802a93b263e910746d679a7eb53" -dependencies = [ - "memchr", -] - [[package]] name = "once_cell" version = "1.16.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "86f0b0d4bf799edbc74508c1e8bf170ff5f41238e5f8225603ca7caaae2b7860" -[[package]] -name = "opaque-debug" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "624a8340c38c1b80fd549087862da4ba43e08858af025b236e509b6649fc13d5" - [[package]] name = "openapi" version = "1.0.0" @@ -2912,8 +2327,6 @@ dependencies = [ "pin-project", "rand", "thiserror", - "tokio", - "tokio-stream", ] [[package]] @@ -2937,20 +2350,11 @@ dependencies = [ "futures-executor", "once_cell", "opentelemetry 0.18.0", - "opentelemetry-semantic-conventions 0.10.0", + "opentelemetry-semantic-conventions", "thiserror", "thrift", ] -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "985cc35d832d412224b2cffe2f9194b1b89b6aa5d0bef76d080dce09d90e62bd" -dependencies = [ - "opentelemetry 0.17.0", -] - [[package]] name = "opentelemetry-semantic-conventions" version = "0.10.0" @@ -2993,26 +2397,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "order_manager" -version = "0.1.0" -dependencies = [ - "actix 0.13.0", - "actix-rt", - "chrono", - "config", - "database_manager", - "fake", - "model", - "pretty_env_logger", - "rumqttc", - "serde", - "testx", - "thiserror", - "tracing", - "uuid 1.2.1", -] - [[package]] name = "ordered-float" version = "1.1.1" @@ -3022,32 +2406,12 @@ dependencies = [ "num-traits", ] -[[package]] -name = "os_type" -version = "2.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e24d44c0eea30167516ed8f6daca4b5e3eebcde1bde1e4e6e08b809fb02c7ba5" -dependencies = [ - "regex", -] - [[package]] name = "overload" version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b15813163c1d831bf4a13c3610c05c0d03b39feb07f7e09fa234dac9b15aaf39" -[[package]] -name = "parking_lot" -version = "0.11.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d17b78036a60663b797adeaee46f5c9dfebb86948d1255007a1d6be0271ff99" -dependencies = [ - "instant", - "lock_api", - "parking_lot_core 0.8.5", -] - [[package]] name = "parking_lot" version = "0.12.1" @@ -3055,21 +2419,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "3742b2c103b9f06bc9fff0a37ff4912935851bee6d36f3c02bcc755bcfec228f" dependencies = [ "lock_api", - "parking_lot_core 0.9.4", -] - -[[package]] -name = "parking_lot_core" -version = "0.8.5" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d76e8e1493bcac0d2766c42737f34458f1c8c50c0d23bcb24ea953affb273216" -dependencies = [ - "cfg-if 1.0.0", - "instant", - "libc", - "redox_syscall", - "smallvec", - "winapi 0.3.9", + "parking_lot_core", ] [[package]] @@ -3085,15 +2435,6 @@ dependencies = [ "windows-sys 0.42.0", ] -[[package]] -name = "parse-zoneinfo" -version = "0.3.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c705f256449c60da65e11ff6626e0c16a0a0b96aaa348de61376b249bc340f41" -dependencies = [ - "regex", -] - [[package]] name = "password-hash" version = "0.4.2" @@ -3126,29 +2467,6 @@ dependencies = [ "thiserror", ] -[[package]] -name = "payment_manager" -version = "0.1.0" -dependencies = [ - "actix 0.13.0", - "actix-rt", - "chrono", - "config", - "database_manager", - "derive_more", - "fake", - "model", - "parking_lot 0.12.1", - "pay_u", - "pretty_env_logger", - "rumqttc", - "serde", - "testx", - "thiserror", - "tracing", - "uuid 0.8.2", -] - [[package]] name = "percent-encoding" version = "2.2.0" @@ -3199,45 +2517,6 @@ dependencies = [ "sha1", ] -[[package]] -name = "phf" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "928c6535de93548188ef63bb7c4036bd415cd8f36ad25af44b9789b2ee72a48c" -dependencies = [ - "phf_shared", -] - -[[package]] -name = "phf_codegen" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a56ac890c5e3ca598bbdeaa99964edb5b0258a583a9eb6ef4e89fc85d9224770" -dependencies = [ - "phf_generator", - "phf_shared", -] - -[[package]] -name = "phf_generator" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b1181c94580fa345f50f19d738aaa39c0ed30a600d95cb2d3e23f94266f14fbf" -dependencies = [ - "phf_shared", - "rand", -] - -[[package]] -name = "phf_shared" -version = "0.11.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e1fb5f6f826b772a8d4c0394209441e7d37cbbb967ae9c7e0e8134365c9ee676" -dependencies = [ - "siphasher", - "uncased", -] - [[package]] name = "pin-project" version = "1.0.12" @@ -3282,18 +2561,6 @@ version = "0.2.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "5da3b0203fd7ee5720aa0b5e790b591aa5d3f41c3ed2c34a3a393382198af2f7" -[[package]] -name = "polyval" -version = "0.6.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef234e08c11dfcb2e56f79fd70f6f2eb7f025c0ce2333e82f4f0518ecad30c6" -dependencies = [ - "cfg-if 1.0.0", - "cpufeatures", - "opaque-debug", - "universal-hash", -] - [[package]] name = "ppv-lite86" version = "0.2.16" @@ -3413,21 +2680,6 @@ dependencies = [ "num_cpus", ] -[[package]] -name = "redis-async" -version = "0.12.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "76b00c604527d485d7a146d1e324ec1cf0a5ec522acb3d05bf7d51a9c28d7c0c" -dependencies = [ - "bytes", - "futures-channel", - "futures-sink", - "futures-util", - "log", - "tokio", - "tokio-util 0.6.10", -] - [[package]] name = "redox_syscall" version = "0.2.16" @@ -3498,7 +2750,6 @@ dependencies = [ "http", "http-body", "hyper", - "hyper-rustls", "hyper-tls", "ipnet", "js-sys", @@ -3509,20 +2760,16 @@ dependencies = [ "once_cell", "percent-encoding", "pin-project-lite", - "rustls", - "rustls-pemfile 1.0.1", "serde", "serde_json", "serde_urlencoded", "tokio", "tokio-native-tls", - "tokio-rustls", "tower-service", "url", "wasm-bindgen", "wasm-bindgen-futures", "web-sys", - "webpki-roots", "winreg", ] @@ -3581,12 +2828,6 @@ dependencies = [ "rust_decimal", ] -[[package]] -name = "rustc-demangle" -version = "0.1.21" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7ef03e0a2b150c7a90d01faf6254c9c48a41e95fb2a8c2ac1c6f0d2b9aefc342" - [[package]] name = "rustc-hash" version = "1.1.0" @@ -3669,15 +2910,6 @@ version = "1.0.11" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "4501abdff3ae82a1c1b477a17252eb69cee9e66eb915c1abaa4f44d873df9f09" -[[package]] -name = "same-file" -version = "1.0.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "93fc1dc3aaa9bfed95e02e6eadabb4baf7e3078b0bd1b4d7b6b0b68378900502" -dependencies = [ - "winapi-util", -] - [[package]] name = "schannel" version = "0.1.20" @@ -3714,7 +2946,7 @@ dependencies = [ name = "search_manager" version = "0.1.0" dependencies = [ - "actix 0.13.0", + "actix", "actix-rt", "channels", "chrono", @@ -3726,7 +2958,7 @@ dependencies = [ "model", "opentelemetry 0.17.0", "opentelemetry-jaeger", - "parking_lot 0.12.1", + "parking_lot", "pretty_env_logger", "rumqttc", "serde", @@ -3875,15 +3107,6 @@ dependencies = [ "serde", ] -[[package]] -name = "serde_path_to_error" -version = "0.1.8" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "184c643044780f7ceb59104cef98a5a6f12cb2288a7bc701ab93a362b49fd47d" -dependencies = [ - "serde", -] - [[package]] name = "serde_urlencoded" version = "0.7.1" @@ -3948,12 +3171,6 @@ version = "2.2.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "62ac7f900db32bf3fd12e0117dd3dc4da74bc52ebaac97f39668446d89694803" -[[package]] -name = "siphasher" -version = "0.3.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bd3e3206899af3f8b12af284fafc038cc1dc2b41d1b89dd17297221c5d225de" - [[package]] name = "slab" version = "0.4.7" @@ -3969,15 +3186,6 @@ version = "2.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8347046d4ebd943127157b94d63abb990fcf729dc4e9978927fdf4ac3c998d06" -[[package]] -name = "slug" -version = "0.1.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b3bc762e6a4b6c6fcaade73e77f9ebc6991b676f88bb2358bddb56560f073373" -dependencies = [ - "deunicode", -] - [[package]] name = "smallvec" version = "1.10.0" @@ -4230,7 +3438,7 @@ dependencies = [ "thiserror", "tokio", "tokio-serde", - "tokio-util 0.7.4", + "tokio-util", "tracing", "tracing-opentelemetry", ] @@ -4270,28 +3478,6 @@ dependencies = [ "winapi 0.3.9", ] -[[package]] -name = "tera" -version = "1.17.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "3df578c295f9ec044ff1c829daf31bb7581d5b3c2a7a3d87419afe1f2531438c" -dependencies = [ - "chrono", - "chrono-tz", - "globwalk", - "humansize", - "lazy_static", - "percent-encoding", - "pest", - "pest_derive", - "rand", - "regex", - "serde", - "serde_json", - "slug", - "unic-segment", -] - [[package]] name = "termcolor" version = "1.1.3" @@ -4434,7 +3620,7 @@ checksum = "cda74da7e1a664f795bb1f8a87ec406fb89a02522cf6e50620d016add6dbbf5c" name = "token_manager" version = "0.1.0" dependencies = [ - "actix 0.13.0", + "actix", "actix-rt", "argon2", "chrono", @@ -4447,7 +3633,7 @@ dependencies = [ "hmac", "jwt", "model", - "parking_lot 0.12.1", + "parking_lot", "password-hash", "pretty_env_logger", "rand_core", @@ -4473,7 +3659,7 @@ dependencies = [ "memchr", "mio 0.8.5", "num_cpus", - "parking_lot 0.12.1", + "parking_lot", "pin-project-lite", "signal-hook-registry", "socket2", @@ -4540,20 +3726,6 @@ dependencies = [ "tokio", ] -[[package]] -name = "tokio-util" -version = "0.6.10" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36943ee01a6d67977dd3f84a5a1d2efeb4ada3a1ae771cadfaa535d9d9fc6507" -dependencies = [ - "bytes", - "futures-core", - "futures-sink", - "log", - "pin-project-lite", - "tokio", -] - [[package]] name = "tokio-util" version = "0.7.4" @@ -4696,16 +3868,6 @@ version = "0.2.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "59547bce71d9c38b83d9c0e92b6066c4253371f15005def0c30d9657f50c7642" -[[package]] -name = "twoway" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c57ffb460d7c24cd6eda43694110189030a3d1dfe418416d9468fd1c1d290b47" -dependencies = [ - "memchr", - "unchecked-index", -] - [[package]] name = "type-map" version = "0.4.0" @@ -4727,42 +3889,6 @@ version = "0.1.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9e79c4d996edb816c91e4308506774452e55e95c3c9de07b6729e17e15a5ef81" -[[package]] -name = "uncased" -version = "0.9.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "09b01702b0fd0b3fadcf98e098780badda8742d4f4a7676615cad90e8ac73622" -dependencies = [ - "version_check 0.9.4", -] - -[[package]] -name = "unchecked-index" -version = "0.2.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "eeba86d422ce181a719445e51872fa30f1f7413b62becb52e95ec91aa262d85c" - -[[package]] -name = "unic-char-property" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a8c57a407d9b6fa02b4795eb81c5b6652060a15a7903ea981f3d723e6c0be221" -dependencies = [ - "unic-char-range", -] - -[[package]] -name = "unic-char-range" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0398022d5f700414f6b899e10b8348231abf9173fa93144cbc1a43b9793c1fbc" - -[[package]] -name = "unic-common" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "80d7ff825a6a654ee85a63e80f92f054f904f21e7d12da4e22f9834a4aaa35bc" - [[package]] name = "unic-langid" version = "0.9.1" @@ -4781,35 +3907,6 @@ dependencies = [ "tinystr", ] -[[package]] -name = "unic-segment" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e4ed5d26be57f84f176157270c112ef57b86debac9cd21daaabbe56db0f88f23" -dependencies = [ - "unic-ucd-segment", -] - -[[package]] -name = "unic-ucd-segment" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "2079c122a62205b421f499da10f3ee0f7697f012f55b675e002483c73ea34700" -dependencies = [ - "unic-char-property", - "unic-char-range", - "unic-ucd-version", -] - -[[package]] -name = "unic-ucd-version" -version = "0.9.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "96bd2f2237fe450fcd0a1d2f5f4e91711124f7857ba2e964247776ebeeb7b0c4" -dependencies = [ - "unic-common", -] - [[package]] name = "unicase" version = "2.6.0" @@ -4858,16 +3955,6 @@ version = "0.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" -[[package]] -name = "universal-hash" -version = "0.5.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7d3160b73c9a19f7e2939a2fdad446c57c1bbbbf4d919d3213ff1267a580d8b5" -dependencies = [ - "crypto-common", - "subtle", -] - [[package]] name = "untrusted" version = "0.7.1" @@ -4883,7 +3970,6 @@ dependencies = [ "form_urlencoded", "idna 0.3.0", "percent-encoding", - "serde", ] [[package]] @@ -4909,22 +3995,6 @@ dependencies = [ "sha1_smol", ] -[[package]] -name = "validator" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6d0f08911ab0fee2c5009580f04615fa868898ee57de10692a45da0c3bcc3e5e" -dependencies = [ - "idna 0.2.3", - "lazy_static", - "regex", - "serde", - "serde_derive", - "serde_json", - "url", - "validator_types", -] - [[package]] name = "validator" version = "0.15.0" @@ -4940,16 +4010,6 @@ dependencies = [ "url", ] -[[package]] -name = "validator_types" -version = "0.14.0" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ded9d97e1d42327632f5f3bae6403c04886e2de3036261ef42deebd931a6a291" -dependencies = [ - "proc-macro2", - "syn", -] - [[package]] name = "valuable" version = "0.1.0" @@ -4974,17 +4034,6 @@ version = "0.9.4" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f" -[[package]] -name = "walkdir" -version = "2.3.2" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "808cf2735cd4b6866113f648b791c6adc5714537bc222d9347bb203386ffda56" -dependencies = [ - "same-file", - "winapi 0.3.9", - "winapi-util", -] - [[package]] name = "want" version = "0.3.0" diff --git a/Cargo.toml b/Cargo.toml index 9f30506..a541842 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -9,18 +9,18 @@ members = [ # actors "crates/account_manager", "crates/cart_manager", - "crates/database_manager", +# "crates/database_manager", "crates/email_manager", - "crates/order_manager", - "crates/payment_manager", +# "crates/order_manager", +# "crates/payment_manager", "crates/search_manager", "crates/stock_manager", "crates/token_manager", "crates/fs_manager", "crates/lang_provider", # artifacts - "crates/db-seed", - "crates/api", +# "crates/db-seed", +# "crates/api", "crates/web", # vendor "vendor/t_pay", diff --git a/crates/account_manager/src/actions.rs b/crates/account_manager/src/actions.rs index 65a74fb..c268bad 100644 --- a/crates/account_manager/src/actions.rs +++ b/crates/account_manager/src/actions.rs @@ -1,43 +1,73 @@ -use channels::accounts::{me, register}; +use channels::accounts::{all, find_by_identity, me, register}; use config::SharedAppConfig; -use model::{Encrypt, FullAccount}; +use model::{Encrypt, FullAccount, Ranged}; use crate::db::{AccountAddresses, Database, FindAccount}; use crate::{Error, Result}; -#[allow(unused)] +macro_rules! ok_or_rollback { + ($res: expr, $t: expr, $err: expr) => { + match $res { + Ok(v) => v, + Err(e) => { + tracing::error!("{}", e); + $t.rollback().await.ok(); + + return Err($err); + } + } + }; +} + +macro_rules! begin_t { + ($db: expr, $err: expr) => { + match $db.pool.begin().await { + Ok(t) => t, + Err(e) => { + tracing::error!("{}", e); + return Err($err); + } + } + }; +} + +pub async fn all(input: all::Input, db: Database) -> all::Output { + use channels::accounts::Error; + + let mut t = begin_t!(db, Error::DbCritical); + + let dbm = crate::db::AllAccounts { + limit: input.limit.into_raw(), + offset: input.offset.into_raw(), + }; + + let res = dbm.run(&mut t).await; + + let accounts = ok_or_rollback!(res, t, Error::All); + + t.commit().await.map_err(|e| { + tracing::error!("{}", e); + Error::DbCritical + })?; + + Ok(all::Details { accounts }) +} + pub async fn me(account_id: model::AccountId, db: Database) -> me::Output { use channels::accounts::Error; - let mut t = match db.pool.begin().await { - Ok(t) => t, - Err(e) => { - tracing::error!("{}", e); - return Err(Error::Account); - } - }; + let mut t = begin_t!(db, Error::Account); let res = FindAccount { account_id }.run(&mut t).await; - let account: model::FullAccount = match res { - Ok(account) => account, - Err(e) => { - tracing::error!("{}", e); - t.rollback().await.ok(); + let account: FullAccount = ok_or_rollback!(res, t, Error::Account); - return Err(Error::Account); - } - }; let res = AccountAddresses { account_id }.run(&mut t).await; - let addresses = match res { - Ok(v) => v, - Err(e) => { - tracing::error!("{}", e); - t.rollback().await.ok(); + let addresses = ok_or_rollback!(res, t, Error::Addresses); - return Err(Error::Addresses); - } - }; - t.commit().await.ok(); + t.commit().await.map_err(|e| { + tracing::error!("{}", e); + Error::DbCritical + })?; Ok(me::Details { account, addresses }) } @@ -55,10 +85,8 @@ pub async fn create_account( Error::Hashing })?; - let mut t = db.pool.begin().await.map_err(|e| { - tracing::error!("{}", e); - Error::DbCritical - })?; + let mut t = begin_t!(db, Error::DbCritical); + let res = crate::db::CreateAccount { email: msg.email, login: msg.login, @@ -68,14 +96,8 @@ pub async fn create_account( .run(&mut t) .await; - let account: FullAccount = match res { - Ok(r) => r, - Err(e) => { - tracing::error!("{}", e); - t.rollback().await.ok(); - return Err(Error::Saving); - } - }; + let account: FullAccount = ok_or_rollback!(res, t, Error::Saving); + t.commit().await.map_err(|e| { tracing::error!("{}", e); Error::DbCritical @@ -83,3 +105,22 @@ pub async fn create_account( Ok(account) } + +pub async fn find_by_identity( + input: find_by_identity::Input, + db: Database, +) -> find_by_identity::Output { + use channels::accounts::Error; + + let mut t = begin_t!(db, Error::DbCritical); + let dbm = crate::db::AccountByIdentity { + login: input.login, + email: input.email, + }; + + let res = dbm.run(&mut t).await; + + let account: FullAccount = ok_or_rollback!(res, t, Error::InvalidIdentity); + + Ok(find_by_identity::Details { account }) +} diff --git a/crates/account_manager/src/rpc.rs b/crates/account_manager/src/rpc.rs index ed72def..f12cbf1 100644 --- a/crates/account_manager/src/rpc.rs +++ b/crates/account_manager/src/rpc.rs @@ -1,5 +1,5 @@ use channels::accounts::rpc::Accounts; -use channels::accounts::{me, register}; +use channels::accounts::{all, find_by_identity, me, register}; use channels::AsyncClient; use config::SharedAppConfig; use tarpc::context; @@ -54,6 +54,22 @@ impl Accounts for AccountsServer { Err(_e) => Err(Error::Account), } } + + async fn all(self, _: context::Context, input: all::Input) -> all::Output { + let res = actions::all(input, self.db).await; + tracing::info!("ME result: {:?}", res); + res + } + + async fn find_by_identity( + self, + _: context::Context, + input: find_by_identity::Input, + ) -> find_by_identity::Output { + let res = actions::find_by_identity(input, self.db).await; + tracing::info!("ME result: {:?}", res); + res + } } pub async fn start(config: SharedAppConfig, db: Database, mqtt_client: AsyncClient) { diff --git a/crates/api/Cargo.toml b/crates/api/Cargo.toml index e4af703..fc78a40 100644 --- a/crates/api/Cargo.toml +++ b/crates/api/Cargo.toml @@ -21,7 +21,7 @@ bytes = { version = "1.1.0" } channels = { path = "../channels", features = ['accounts', 'carts', 'emails', 'search'] } chrono = { version = "0.4", features = ["serde"] } config = { path = "../config" } -database_manager = { path = "../database_manager" } +#database_manager = { path = "../database_manager" } derive_more = { version = "0.99", features = [] } dotenv = { version = "0.15", features = [] } fs_manager = { path = "../fs_manager" } diff --git a/crates/api/src/main.rs b/crates/api/src/main.rs index 68823bb..cc4f02a 100644 --- a/crates/api/src/main.rs +++ b/crates/api/src/main.rs @@ -36,8 +36,6 @@ pub enum Error { PassFile(std::io::Error), #[error("Unable to read password from STDIN. {0:?}")] ReadPass(std::io::Error), - #[error("{0}")] - Database(#[from] database_manager::Error), } pub type Result = std::result::Result; diff --git a/crates/api/src/routes/admin/api_v1/accounts.rs b/crates/api/src/routes/admin/api_v1/accounts.rs index de86b2b..678c6bc 100644 --- a/crates/api/src/routes/admin/api_v1/accounts.rs +++ b/crates/api/src/routes/admin/api_v1/accounts.rs @@ -3,8 +3,9 @@ use actix_web::web::{Data, Json, ServiceConfig}; use actix_web::{get, patch, post, HttpResponse}; use actix_web_httpauth::extractors::bearer::BearerAuth; use config::SharedAppConfig; -use database_manager::Database; -use model::{AccountAddress, AccountId, AccountState, Encrypt, PasswordConfirmation}; +use model::{ + AccountAddress, AccountId, AccountState, Encrypt, Limit, Offset, PasswordConfirmation, +}; use token_manager::TokenManager; use crate::routes::admin::Error; @@ -15,11 +16,23 @@ use crate::{admin_send_db, routes, Email, Login, PassHash, Password, Role}; pub async fn accounts( credentials: BearerAuth, tm: Data>, - db: Data>, + am: Data, ) -> routes::Result { + use channels::accounts::rpc::Accounts; + credentials.require_admin(tm.into_inner()).await?; - let accounts = admin_send_db!(db, database_manager::AllAccounts); + let res = am + .all( + tarpc::context::current(), + channels::accounts::all::Input { + limit: Limit::default(), + offset: Offset::from_u32(0), + }, + ) + .await; + + let accounts = res.unwrap_or_default(); Ok(HttpResponse::Ok().json(accounts)) } @@ -38,6 +51,7 @@ pub struct UpdateAccountInput { pub async fn update_account( credentials: BearerAuth, tm: Data>, + am: Data, db: Data>, Json(payload): Json, config: Data, @@ -87,6 +101,7 @@ pub async fn create_account( credentials: BearerAuth, tm: Data>, db: Data>, + am: Data, Json(payload): Json, config: Data, ) -> routes::Result> { diff --git a/crates/api/src/routes/admin/api_v1/mod.rs b/crates/api/src/routes/admin/api_v1/mod.rs index e19b469..4a43800 100644 --- a/crates/api/src/routes/admin/api_v1/mod.rs +++ b/crates/api/src/routes/admin/api_v1/mod.rs @@ -8,7 +8,6 @@ use actix::Addr; use actix_web::web::{scope, Data, Json, ServiceConfig}; use actix_web::{delete, post}; use actix_web_httpauth::extractors::bearer::BearerAuth; -use database_manager::{query_db, Database}; use model::Encrypt; use token_manager::TokenManager; diff --git a/crates/api/src/routes/admin/api_v1/orders.rs b/crates/api/src/routes/admin/api_v1/orders.rs index 7d40b52..cf562b5 100644 --- a/crates/api/src/routes/admin/api_v1/orders.rs +++ b/crates/api/src/routes/admin/api_v1/orders.rs @@ -2,7 +2,6 @@ use actix::Addr; use actix_web::get; use actix_web::web::{Data, Json, ServiceConfig}; use actix_web_httpauth::extractors::bearer::BearerAuth; -use database_manager::Database; use model::api::Orders; use token_manager::TokenManager; diff --git a/crates/api/src/routes/admin/api_v1/products.rs b/crates/api/src/routes/admin/api_v1/products.rs index 32f5af2..a0ee6c9 100644 --- a/crates/api/src/routes/admin/api_v1/products.rs +++ b/crates/api/src/routes/admin/api_v1/products.rs @@ -5,7 +5,6 @@ use actix_web::web::{Data, Json, ServiceConfig}; use actix_web::{delete, get, patch, post, HttpResponse}; use actix_web_httpauth::extractors::bearer::BearerAuth; use config::SharedAppConfig; -use database_manager::Database; use model::{ api, Days, Price, ProductCategory, ProductId, ProductLongDesc, ProductName, ProductShortDesc, Quantity, QuantityUnit, diff --git a/crates/api/src/routes/admin/api_v1/stocks.rs b/crates/api/src/routes/admin/api_v1/stocks.rs index c8af3d8..6232fb6 100644 --- a/crates/api/src/routes/admin/api_v1/stocks.rs +++ b/crates/api/src/routes/admin/api_v1/stocks.rs @@ -2,7 +2,6 @@ use actix::Addr; use actix_web::web::{Data, Json, ServiceConfig}; use actix_web::{delete, get, patch, post, HttpResponse}; use actix_web_httpauth::extractors::bearer::BearerAuth; -use database_manager::Database; use model::{ProductId, Quantity, QuantityUnit, StockId}; use serde::Deserialize; use token_manager::TokenManager; diff --git a/crates/api/src/routes/admin/api_v1/uploads.rs b/crates/api/src/routes/admin/api_v1/uploads.rs index 46201b1..1de4932 100644 --- a/crates/api/src/routes/admin/api_v1/uploads.rs +++ b/crates/api/src/routes/admin/api_v1/uploads.rs @@ -3,7 +3,6 @@ use actix_multipart::Multipart; use actix_web::web::{Data, ServiceConfig}; use actix_web::{post, HttpResponse}; use actix_web_httpauth::extractors::bearer::BearerAuth; -use database_manager::{query_db, Database}; use fs_manager::FsManager; use futures_util::StreamExt; use token_manager::TokenManager; diff --git a/crates/api/src/routes/public/api_v1/restricted.rs b/crates/api/src/routes/public/api_v1/restricted.rs index dfe9c58..fbe9a54 100644 --- a/crates/api/src/routes/public/api_v1/restricted.rs +++ b/crates/api/src/routes/public/api_v1/restricted.rs @@ -2,7 +2,6 @@ use actix::Addr; use actix_web::web::{scope, Data, Json, ServiceConfig}; use actix_web::{delete, get, post, put, HttpRequest, HttpResponse}; use actix_web_httpauth::extractors::bearer::BearerAuth; -use database_manager::{query_db, Database}; use model::api; use order_manager::{query_order, OrderManager}; use payment_manager::{query_pay, PaymentManager}; diff --git a/crates/api/src/routes/public/api_v1/unrestricted.rs b/crates/api/src/routes/public/api_v1/unrestricted.rs index 350d8c2..297b4c0 100644 --- a/crates/api/src/routes/public/api_v1/unrestricted.rs +++ b/crates/api/src/routes/public/api_v1/unrestricted.rs @@ -1,8 +1,9 @@ use actix::Addr; use actix_web::web::{Data, Json, Path, Query, ServiceConfig}; use actix_web::{get, post, HttpResponse}; +use channels::accounts::rpc::{Accounts, AccountsClient}; +use channels::stocks::rpc::{Stocks, StocksClient}; use config::SharedAppConfig; -use database_manager::{query_db, Database}; use model::Encrypt; use payment_manager::{PaymentManager, PaymentNotification}; use token_manager::TokenManager; @@ -13,7 +14,7 @@ use crate::routes::{self}; #[get("/search")] async fn search( - db: Data>, + am: Data, _config: Data, search: Data, query: Query, @@ -56,7 +57,7 @@ async fn search( #[get("/products")] async fn products( - db: Data>, + am: Data, config: Data, ) -> routes::Result> { let db = db.into_inner(); @@ -85,7 +86,7 @@ async fn products( #[get("/product/{id}")] async fn product( path: Path, - db: Data>, + am: Data, config: Data, ) -> routes::Result> { let product_id: model::ProductId = path.into_inner().into(); @@ -123,14 +124,14 @@ async fn product( } #[get("/stocks")] -async fn stocks(db: Data>) -> routes::Result>> { +async fn stocks(sc: Data) -> routes::Result>> { let stocks = public_send_db!(owned, db.into_inner(), database_manager::AllStocks); Ok(Json(stocks)) } #[post("/register")] pub async fn create_account( - db: Data>, + am: Data, Json(payload): Json, config: Data, tm: Data>, @@ -180,7 +181,7 @@ pub async fn create_account( #[post("/sign-in")] async fn sign_in( Json(payload): Json, - db: Data>, + am: Data, tm: Data>, ) -> routes::Result> { let db = db.into_inner(); diff --git a/crates/channels/src/accounts.rs b/crates/channels/src/accounts.rs index 043186c..84ddfe0 100644 --- a/crates/channels/src/accounts.rs +++ b/crates/channels/src/accounts.rs @@ -6,14 +6,20 @@ use crate::{AsyncClient, DeserializePayload}; #[derive(Debug, thiserror::Error, serde::Serialize, serde::Deserialize)] pub enum Error { + #[error("Unable to connect to database")] + DbCritical, #[error("mqtt payload has invalid create account data")] InvalidCreateAccount, #[error("mqtt payload has invalid account failure data")] InvalidAccountFailure, + #[error("All accounts can't be loaded")] + All, #[error("Account does not exists")] Account, #[error("Account does have any addresses")] Addresses, + #[error("No account for identity found")] + InvalidIdentity, } pub static CLIENT_NAME: &str = "account-manager"; @@ -106,6 +112,44 @@ pub mod me { pub type Output = Result; } +pub mod all { + use model::{Limit, Offset}; + + use crate::accounts::Error; + + #[derive(Debug, serde::Serialize, serde::Deserialize)] + pub struct Input { + pub limit: Limit, + pub offset: Offset, + } + + #[derive(Debug, serde::Serialize, serde::Deserialize)] + pub struct Details { + pub accounts: Vec, + } + + pub type Output = Result; +} + +pub mod find_by_identity { + use model::{Email, Login}; + + use crate::accounts::Error; + + #[derive(Debug, serde::Serialize, serde::Deserialize)] + pub struct Input { + pub login: Option, + pub email: Option, + } + + #[derive(Debug, serde::Serialize, serde::Deserialize)] + pub struct Details { + pub account: model::FullAccount, + } + + pub type Output = Result; +} + impl AsyncClient { pub async fn emit_account_created(&self, account: &model::FullAccount) { self.publish_or_log(Topic::AccountCreated, QoS::AtLeastOnce, true, account) @@ -116,7 +160,7 @@ impl AsyncClient { pub mod rpc { use config::SharedAppConfig; - use crate::accounts::{me, register}; + use crate::accounts::{all, find_by_identity, me, register}; #[tarpc::service] pub trait Accounts { @@ -125,6 +169,12 @@ pub mod rpc { /// Creates new user account. async fn register_account(input: register::Input) -> register::Output; + + /// Load full data about all accounts + async fn all(input: all::Input) -> all::Output; + + /// Find account for email and/or login + async fn find_by_identity(input: find_by_identity::Input) -> find_by_identity::Output; } pub async fn create_client(config: SharedAppConfig) -> AccountsClient { diff --git a/crates/database_manager/src/accounts.rs b/crates/database_manager/src/accounts.rs index 2d1cad4..dda1f64 100644 --- a/crates/database_manager/src/accounts.rs +++ b/crates/database_manager/src/accounts.rs @@ -48,7 +48,6 @@ FROM accounts }) } -#[cfg_attr(feature = "dummy", derive(fake::Dummy))] #[derive(actix::Message, Debug)] #[rtype(result = "Result")] pub struct CreateAccount { @@ -88,7 +87,6 @@ RETURNING id, email, login, pass_hash, role, customer_id, state }) } -#[cfg_attr(feature = "dummy", derive(fake::Dummy))] #[derive(actix::Message)] #[rtype(result = "Result")] pub struct UpdateAccount { diff --git a/crates/database_manager/src/lib.rs b/crates/database_manager/src/lib.rs index d5f3ba3..538d59a 100644 --- a/crates/database_manager/src/lib.rs +++ b/crates/database_manager/src/lib.rs @@ -3,17 +3,17 @@ use config::SharedAppConfig; use sqlx::PgPool; use sqlx_core::arguments::Arguments; -pub use crate::account_addresses::*; -pub use crate::accounts::*; +// pub use crate::account_addresses::*; +// pub use crate::accounts::*; pub use crate::order_addresses::*; pub use crate::order_items::*; pub use crate::orders::*; -pub use crate::photos::*; -pub use crate::product_photos::*; -pub use crate::products::*; +// pub use crate::photos::*; +// pub use crate::product_photos::*; +// pub use crate::products::*; pub use crate::shopping_cart_items::*; pub use crate::shopping_carts::*; -pub use crate::stocks::*; +// pub use crate::stocks::*; pub use crate::tokens::*; pub mod account_addresses; diff --git a/crates/database_manager/src/order_items.rs b/crates/database_manager/src/order_items.rs index 2808c2e..97cf2ba 100644 --- a/crates/database_manager/src/order_items.rs +++ b/crates/database_manager/src/order_items.rs @@ -49,7 +49,6 @@ ORDER BY id DESC }) } -#[cfg_attr(feature = "dummy", derive(fake::Dummy))] #[derive(actix::Message)] #[rtype(result = "Result")] pub struct CreateOrderItem { diff --git a/crates/database_manager/src/products.rs b/crates/database_manager/src/products.rs index 9b310bb..920a5f0 100644 --- a/crates/database_manager/src/products.rs +++ b/crates/database_manager/src/products.rs @@ -92,7 +92,6 @@ WHERE id = $1 }) } -#[cfg_attr(feature = "dummy", derive(fake::Dummy))] #[derive(Message, Debug)] #[rtype(result = "Result")] pub struct CreateProduct { diff --git a/crates/db-seed/Cargo.toml b/crates/db-seed/Cargo.toml index d254e0c..5cb17a0 100644 --- a/crates/db-seed/Cargo.toml +++ b/crates/db-seed/Cargo.toml @@ -4,14 +4,10 @@ version = "0.1.0" edition = "2021" [dependencies] -actix = { version = "0.13", features = [] } -actix-rt = { version = "2.7", features = [] } -actix-web = { version = "4.0", features = [] } bytes = { version = "1.1.0" } config = { path = "../config" } -database_manager = { path = "../database_manager", features = ["dummy"] } dotenv = { version = "0.15", features = [] } -fake = { version = "2.4.3", features = ["derive", "chrono", "http"] } +fakeit = { version = "1.1.1", features = [] } fs_manager = { path = "../fs_manager", features = [] } human-panic = { version = "1.0.3" } model = { path = "../model", version = "0.1", features = ["db", "dummy"] } @@ -21,3 +17,6 @@ thiserror = { version = "1.0.31" } tokio = { version = "1.18.1", features = ["full"] } tracing = { version = "0.1.34" } tracing-subscriber = { version = "0.3.11" } +account-manager = { path = '../account_manager' } +stock-manager = { path = "../stock_manager" } +channels = { path = '../channels' } diff --git a/crates/db-seed/src/accounts.rs b/crates/db-seed/src/accounts.rs index 7a5c5b5..e007aae 100644 --- a/crates/db-seed/src/accounts.rs +++ b/crates/db-seed/src/accounts.rs @@ -1,12 +1,9 @@ -use actix::Addr; use config::SharedAppConfig; -use database_manager::{query_db, Database}; -use fake::{Fake, Faker}; use crate::{Result, SharedState}; pub(crate) async fn create_accounts( - db: Addr, + ac: AccountsClient, seed: SharedState, _config: SharedAppConfig, ) -> Result<()> { @@ -19,7 +16,7 @@ pub(crate) async fn create_accounts( let mut accounts = Vec::with_capacity(10); for _ in 0..10 { - let msg: database_manager::CreateAccount = Faker.fake::(); + let msg: database_manager::CreateAccount = CreateA; match db.send(msg).await { Ok(Ok(account)) => accounts.push(account), diff --git a/crates/db-seed/src/main.rs b/crates/db-seed/src/main.rs index e4f0075..b2163b3 100644 --- a/crates/db-seed/src/main.rs +++ b/crates/db-seed/src/main.rs @@ -38,7 +38,7 @@ pub(crate) struct DbSeed { pub(crate) type SharedState = Arc>; -#[actix_web::main] +#[tokio::main] async fn main() { human_panic::setup_panic!(); diff --git a/crates/model/src/api.rs b/crates/model/src/api.rs index ad49658..8bf04c4 100644 --- a/crates/model/src/api.rs +++ b/crates/model/src/api.rs @@ -1,7 +1,5 @@ use chrono::NaiveDateTime; use derive_more::Deref; -#[cfg(feature = "dummy")] -use fake::Fake; use serde::{Deserialize, Serialize}; use crate::*; diff --git a/crates/model/src/lib.rs b/crates/model/src/lib.rs index 91c9086..4f8d791 100644 --- a/crates/model/src/lib.rs +++ b/crates/model/src/lib.rs @@ -10,10 +10,6 @@ use std::ops::{BitOr, Range}; use std::str::FromStr; use derive_more::{Deref, DerefMut, Display, From}; -#[cfg(feature = "dummy")] -use fake::Fake; -#[cfg(feature = "dummy")] -use rand::Rng; use serde::de::{Error, Visitor}; use serde::{Deserialize, Deserializer, Serialize}; @@ -314,22 +310,17 @@ pub trait Ranged: Sized + From + Copy { #[cfg_attr(feature = "db", derive(sqlx::Type))] #[cfg_attr(feature = "db", sqlx(transparent))] #[derive( - Default, - Debug, - Copy, - Clone, - Hash, - PartialOrd, - PartialEq, - Eq, - Serialize, - Deserialize, - Deref, - From, + Debug, Copy, Clone, Hash, PartialOrd, PartialEq, Eq, Serialize, Deserialize, Deref, From, )] #[serde(transparent)] pub struct Limit(NonNegative); +impl Default for Limit { + fn default() -> Self { + 200.into() + } +} + impl From for Limit { fn from(value: u32) -> Self { Self::from_u32(value) @@ -965,8 +956,6 @@ impl ProductCategory { pub mod v2 { use derive_more::{Deref, Display, From}; - #[cfg(feature = "dummy")] - use fake::Fake; use serde::{Deserialize, Serialize}; pub use crate::{ diff --git a/crates/stock_manager/migrations/202204131841_init.sql b/crates/stock_manager/migrations/202204131841_init.sql index f0c0858..a78d16d 100644 --- a/crates/stock_manager/migrations/202204131841_init.sql +++ b/crates/stock_manager/migrations/202204131841_init.sql @@ -23,7 +23,7 @@ CREATE TABLE products ( CREATE TABLE product_variants ( id serial NOT NULL PRIMARY KEY, - product_id integer REFERENCES products (id) NOT NULL, + product_id integer REFERENCES products (id) ON DELETE CASCADE NOT NULL, "name" character varying NOT NULL, short_description character varying NOT NULL, long_description character varying NOT NULL, @@ -33,7 +33,7 @@ CREATE TABLE product_variants ( CREATE TABLE stocks ( id serial NOT NULL PRIMARY KEY, - product_variant_id integer REFERENCES product_variants(id) NOT NULL, + product_variant_id integer REFERENCES product_variants(id) ON DELETE CASCADE NOT NULL, quantity integer DEFAULT 0 NOT NULL, quantity_unit "QuantityUnit" NOT NULL, CONSTRAINT positive_quantity CHECK ((quantity >= 0)) @@ -41,6 +41,6 @@ CREATE TABLE stocks ( CREATE TABLE product_photos ( id serial NOT NULL PRIMARY KEY, - product_variant_id integer REFERENCES product_variants(id) NOT NULL, + product_variant_id integer REFERENCES product_variants(id) ON DELETE CASCADE NOT NULL, photo_id integer REFERENCES photos(id) NOT NULL ); diff --git a/crates/stock_manager/src/actions/product.rs b/crates/stock_manager/src/actions/product.rs index c4faeb1..f2babfd 100644 --- a/crates/stock_manager/src/actions/product.rs +++ b/crates/stock_manager/src/actions/product.rs @@ -283,4 +283,24 @@ mod tests { assert_eq!(new_product.id, product.id); assert_eq!(new_product.name, new_name); } + + #[tokio::test] + async fn delete_product() { + testx::db_t_ref!(t); + + let product = test_product_with_variant(&mut t).await; + + let res = inner_delete_product( + delete_product::Input { + product_id: product.id, + }, + &mut t, + ) + .await; + + testx::db_rollback!(t); + + let (id, _new_product) = res.unwrap(); + assert_eq!(id, product.id); + } } diff --git a/crates/stock_manager/src/db/product_variants.rs b/crates/stock_manager/src/db/product_variants.rs index 9497f06..1781f12 100644 --- a/crates/stock_manager/src/db/product_variants.rs +++ b/crates/stock_manager/src/db/product_variants.rs @@ -110,6 +110,12 @@ impl DeleteProductVariant { r#" DELETE FROM product_variants WHERE id = $1 +RETURNING id, + product_id, + name, + short_description, + long_description, + price "#, ) .bind(self.product_variant_id) diff --git a/crates/stock_manager/src/db/products.rs b/crates/stock_manager/src/db/products.rs index 11252f0..b3c912b 100644 --- a/crates/stock_manager/src/db/products.rs +++ b/crates/stock_manager/src/db/products.rs @@ -185,6 +185,7 @@ RETURNING id, .await .map_err(|e| { tracing::error!("{e:?}"); + eprintln!("{e:?}"); Error::Delete(self.product_id) }) } diff --git a/crates/stock_manager/src/db/stocks.rs b/crates/stock_manager/src/db/stocks.rs index 008f3a7..640d4a1 100644 --- a/crates/stock_manager/src/db/stocks.rs +++ b/crates/stock_manager/src/db/stocks.rs @@ -10,6 +10,8 @@ pub enum Error { Update(StockId), #[error("Unable to delete stock {0:?}")] Delete(StockId), + #[error("Unable to delete all stock for variant {0:?}")] + DeleteAllProductStocks(ProductId), #[error("Unable find stock for product")] ProductVariantStock, #[error("Stock {0:?} does not exists")] @@ -138,7 +140,10 @@ pub struct DeleteStock { } impl DeleteStock { - async fn run(self, pool: &mut sqlx::Transaction<'_, sqlx::Postgres>) -> Result> { + pub async fn run( + self, + pool: &mut sqlx::Transaction<'_, sqlx::Postgres>, + ) -> Result> { sqlx::query_as( r#" DELETE FROM stocks