使用sqlx替换sea-orm

This commit is contained in:
李运家 2024-05-21 18:01:50 +08:00
parent 774c4e0e6c
commit bda646f3b9
18 changed files with 223 additions and 667 deletions

2
.env
View File

@ -1,2 +1,2 @@
DATABASE_URL=mysql://lyj:1325479Lyj!@47.95.198.7:13206/demo_rs
DATABASE_URL=postgres://lyj:1325479Lyj!@47.95.198.7:13207/demo_rs

556
Cargo.lock generated
View File

@ -17,17 +17,6 @@ version = "1.0.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f26201604c87b1e01bd3d98f8d5d9a8fcbb815e8cedb41ffccbeb4bf593a35fe"
[[package]]
name = "ahash"
version = "0.7.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "891477e0c6a8957309ee5c45a6368af3ae14bb510732d2684ffa19af310920f9"
dependencies = [
"getrandom",
"once_cell",
"version_check",
]
[[package]]
name = "ahash"
version = "0.8.11"
@ -50,12 +39,6 @@ dependencies = [
"memchr",
]
[[package]]
name = "aliasable"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "250f629c0161ad8107cf89319e990051fae62832fd343083bea452d93e2205fd"
[[package]]
name = "allocator-api2"
version = "0.2.16"
@ -98,12 +81,6 @@ dependencies = [
"validator",
]
[[package]]
name = "arrayvec"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "96d30a06541fbafbc7f82ed10c06164cfbd2c401138f6addd8404629c4b16711"
[[package]]
name = "async-lock"
version = "3.3.0"
@ -115,28 +92,6 @@ dependencies = [
"pin-project-lite",
]
[[package]]
name = "async-stream"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "cd56dd203fef61ac097dd65721a419ddccb106b2d2b70ba60a6b529f03961a51"
dependencies = [
"async-stream-impl",
"futures-core",
"pin-project-lite",
]
[[package]]
name = "async-stream-impl"
version = "0.3.5"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16e62a023e7c117e27523144c5d2459f4397fcc3cab0085af8e2224f643a0193"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.52",
]
[[package]]
name = "async-trait"
version = "0.1.77"
@ -157,16 +112,6 @@ dependencies = [
"num-traits",
]
[[package]]
name = "atomic-write-file"
version = "0.1.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a8204db279bf648d64fe845bd8840f78b39c8132ed4d6a4194c3b10d4b4cfb0b"
dependencies = [
"nix",
"rand",
]
[[package]]
name = "autocfg"
version = "1.1.0"
@ -283,17 +228,6 @@ version = "1.6.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8c3c1a368f70d6cf7302d78f8f7093da241fb8e8807c05cc9e51a125895a6d5b"
[[package]]
name = "bigdecimal"
version = "0.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa"
dependencies = [
"num-bigint",
"num-integer",
"num-traits",
]
[[package]]
name = "bitflags"
version = "1.3.2"
@ -309,18 +243,6 @@ dependencies = [
"serde",
]
[[package]]
name = "bitvec"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1bc2832c24239b0141d5674bb9174f9d68a8b5b3f2753311927c172ca46f7e9c"
dependencies = [
"funty",
"radium",
"tap",
"wyz",
]
[[package]]
name = "block-buffer"
version = "0.10.4"
@ -330,58 +252,12 @@ dependencies = [
"generic-array",
]
[[package]]
name = "borsh"
version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f58b559fd6448c6e2fd0adb5720cd98a2506594cafa4737ff98c396f3e82f667"
dependencies = [
"borsh-derive",
"cfg_aliases",
]
[[package]]
name = "borsh-derive"
version = "1.3.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7aadb5b6ccbd078890f6d7003694e33816e6b784358f18e15e7e6d9f065a57cd"
dependencies = [
"once_cell",
"proc-macro-crate",
"proc-macro2",
"quote",
"syn 2.0.52",
"syn_derive",
]
[[package]]
name = "bumpalo"
version = "3.15.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7ff69b9dd49fd426c69a0db9fc04dd934cdb6645ff000864d98f7e2af8830eaa"
[[package]]
name = "bytecheck"
version = "0.6.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "23cdc57ce23ac53c931e88a43d06d070a6fd142f2617be5855eb75efc9beb1c2"
dependencies = [
"bytecheck_derive",
"ptr_meta",
"simdutf8",
]
[[package]]
name = "bytecheck_derive"
version = "0.6.12"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3db406d29fbcd95542e92559bed4d8ad92636d1ca8b3b72ede10b4bcc010e659"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "byteorder"
version = "1.5.0"
@ -406,12 +282,6 @@ version = "1.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
[[package]]
name = "cfg_aliases"
version = "0.1.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fd16c4719339c4530435d38e511904438d07cce7950afa3718a84ac36c10e89e"
[[package]]
name = "chrono"
version = "0.4.35"
@ -422,7 +292,6 @@ dependencies = [
"iana-time-zone",
"js-sys",
"num-traits",
"serde",
"wasm-bindgen",
"windows-targets 0.52.4",
]
@ -587,18 +456,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b42b6fa04a440b495c8b04d0e71b707c585f83cb9cb28cf8cd0d976c315e31b4"
dependencies = [
"powerfmt",
"serde",
]
[[package]]
name = "derivative"
version = "2.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
@ -617,8 +474,9 @@ dependencies = [
name = "domain"
version = "0.1.0"
dependencies = [
"sea-orm",
"library",
"serde",
"sqlx",
"validator",
]
@ -774,26 +632,6 @@ dependencies = [
"percent-encoding",
]
[[package]]
name = "funty"
version = "2.0.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e6d5a32815ae3f33302d95fdcb2ce17862f8c65363dcfd29360480ba1001fc9c"
[[package]]
name = "futures"
version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "645c6916888f6cb6350d2550b80fb63e734897a8498abe35cfb732b6487804b0"
dependencies = [
"futures-channel",
"futures-core",
"futures-io",
"futures-sink",
"futures-task",
"futures-util",
]
[[package]]
name = "futures-channel"
version = "0.3.30"
@ -867,7 +705,6 @@ version = "0.3.30"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3d6401deb83407ab3da39eba7e33987a73c3df0c82b4bb5813ee871c19c41d48"
dependencies = [
"futures-channel",
"futures-core",
"futures-io",
"futures-macro",
@ -927,22 +764,13 @@ dependencies = [
"tracing",
]
[[package]]
name = "hashbrown"
version = "0.12.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888"
dependencies = [
"ahash 0.7.8",
]
[[package]]
name = "hashbrown"
version = "0.14.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "290f1a1d9242c78d09ce40a5e87e7554ee637af1351968159f4952f028f75604"
dependencies = [
"ahash 0.8.11",
"ahash",
"allocator-api2",
]
@ -952,7 +780,7 @@ version = "0.8.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7"
dependencies = [
"hashbrown 0.14.3",
"hashbrown",
]
[[package]]
@ -1152,18 +980,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b0b929d511467233429c45a44ac1dcaa21ba0f5ba11e4879e6ed28ddb4f9df4"
dependencies = [
"equivalent",
"hashbrown 0.14.3",
]
[[package]]
name = "inherent"
version = "1.0.11"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0122b7114117e64a63ac49f752a5ca4624d534c7b1c7de796ac196381cd2d947"
dependencies = [
"proc-macro2",
"quote",
"syn 2.0.52",
"hashbrown",
]
[[package]]
@ -1230,9 +1047,10 @@ dependencies = [
"http-body-util",
"moka",
"once_cell",
"sea-orm",
"serde",
"serde_json",
"sqlx",
"sqlx-postgres",
"thiserror",
"tokio",
"toml",
@ -1371,18 +1189,6 @@ dependencies = [
"tempfile",
]
[[package]]
name = "nix"
version = "0.28.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ab2156c4fce2f8df6c499cc1c763e4394b7482525bf2a9701c9d79d215f519e4"
dependencies = [
"bitflags 2.4.2",
"cfg-if",
"cfg_aliases",
"libc",
]
[[package]]
name = "nom"
version = "7.1.3"
@ -1403,17 +1209,6 @@ dependencies = [
"winapi",
]
[[package]]
name = "num-bigint"
version = "0.4.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "608e7659b5c3d7cba262d894801b9ec9d00de989e8a82bd4bef91d08da45cdc0"
dependencies = [
"autocfg",
"num-integer",
"num-traits",
]
[[package]]
name = "num-bigint-dig"
version = "0.8.4"
@ -1536,39 +1331,6 @@ dependencies = [
"vcpkg",
]
[[package]]
name = "ordered-float"
version = "3.9.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc"
dependencies = [
"num-traits",
]
[[package]]
name = "ouroboros"
version = "0.17.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e2ba07320d39dfea882faa70554b4bd342a5f273ed59ba7c1c6b4c840492c954"
dependencies = [
"aliasable",
"ouroboros_macro",
"static_assertions",
]
[[package]]
name = "ouroboros_macro"
version = "0.17.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8"
dependencies = [
"heck",
"proc-macro-error",
"proc-macro2",
"quote",
"syn 2.0.52",
]
[[package]]
name = "overload"
version = "0.1.1"
@ -1696,15 +1458,6 @@ version = "0.2.17"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
[[package]]
name = "proc-macro-crate"
version = "3.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6d37c51ca738a55da99dc0c4a34860fd675453b8b36209178c2249bb13651284"
dependencies = [
"toml_edit 0.21.1",
]
[[package]]
name = "proc-macro-error"
version = "1.0.4"
@ -1738,26 +1491,6 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "ptr_meta"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "0738ccf7ea06b608c10564b31debd4f5bc5e197fc8bfe088f68ae5ce81e7a4f1"
dependencies = [
"ptr_meta_derive",
]
[[package]]
name = "ptr_meta_derive"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "16b845dbfca988fa33db069c0e230574d15a3088f147a87b64c7589eb662c9ac"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "quanta"
version = "0.12.3"
@ -1782,12 +1515,6 @@ dependencies = [
"proc-macro2",
]
[[package]]
name = "radium"
version = "0.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dc33ff2d4973d518d823d61aa239014831e521c75da58e3df4840d3f47749d09"
[[package]]
name = "rand"
version = "0.8.5"
@ -1865,15 +1592,6 @@ version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"
[[package]]
name = "rend"
version = "0.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "71fe3824f5629716b1589be05dacd749f6aa084c87e00e016714a8cdfccc997c"
dependencies = [
"bytecheck",
]
[[package]]
name = "reqwest"
version = "0.12.4"
@ -1931,35 +1649,6 @@ dependencies = [
"windows-sys 0.52.0",
]
[[package]]
name = "rkyv"
version = "0.7.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5cba464629b3394fc4dbc6f940ff8f5b4ff5c7aef40f29166fd4ad12acbc99c0"
dependencies = [
"bitvec",
"bytecheck",
"bytes",
"hashbrown 0.12.3",
"ptr_meta",
"rend",
"rkyv_derive",
"seahash",
"tinyvec",
"uuid",
]
[[package]]
name = "rkyv_derive"
version = "0.7.44"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a7dddfff8de25e6f62b9d64e6e432bf1c6736c57d20323e15ee10435fbda7c65"
dependencies = [
"proc-macro2",
"quote",
"syn 1.0.109",
]
[[package]]
name = "rsa"
version = "0.9.6"
@ -1980,22 +1669,6 @@ dependencies = [
"zeroize",
]
[[package]]
name = "rust_decimal"
version = "1.34.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b39449a79f45e8da28c57c341891b69a183044b29518bb8f86dbac9df60bb7df"
dependencies = [
"arrayvec",
"borsh",
"bytes",
"num-traits",
"rand",
"rkyv",
"serde",
"serde_json",
]
[[package]]
name = "rustc-demangle"
version = "0.1.23"
@ -2107,100 +1780,6 @@ dependencies = [
"untrusted",
]
[[package]]
name = "sea-bae"
version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "3bd3534a9978d0aa7edd2808dc1f8f31c4d0ecd31ddf71d997b3c98e9f3c9114"
dependencies = [
"heck",
"proc-macro-error",
"proc-macro2",
"quote",
"syn 2.0.52",
]
[[package]]
name = "sea-orm"
version = "0.12.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6632f499b80cc6aaa781b302e4c9fae663e0e3dcf2640e9d80034d5b10731efe"
dependencies = [
"async-stream",
"async-trait",
"bigdecimal",
"chrono",
"futures",
"log",
"ouroboros",
"rust_decimal",
"sea-orm-macros",
"sea-query",
"sea-query-binder",
"serde",
"serde_json",
"sqlx",
"strum",
"thiserror",
"time",
"tracing",
"url",
"uuid",
]
[[package]]
name = "sea-orm-macros"
version = "0.12.14"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "ec13bfb4c4aef208f68dbea970dd40d13830c868aa8dcb4e106b956e6bb4f2fa"
dependencies = [
"heck",
"proc-macro2",
"quote",
"sea-bae",
"syn 2.0.52",
"unicode-ident",
]
[[package]]
name = "sea-query"
version = "0.30.7"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "4166a1e072292d46dc91f31617c2a1cdaf55a8be4b5c9f4bf2ba248e3ac4999b"
dependencies = [
"bigdecimal",
"chrono",
"derivative",
"inherent",
"ordered-float",
"rust_decimal",
"serde_json",
"time",
"uuid",
]
[[package]]
name = "sea-query-binder"
version = "0.5.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "36bbb68df92e820e4d5aeb17b4acd5cc8b5d18b2c36a4dd6f4626aabfa7ab1b9"
dependencies = [
"bigdecimal",
"chrono",
"rust_decimal",
"sea-query",
"serde_json",
"sqlx",
"time",
"uuid",
]
[[package]]
name = "seahash"
version = "4.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
[[package]]
name = "security-framework"
version = "2.10.0"
@ -2302,7 +1881,7 @@ dependencies = [
"futures-executor",
"library",
"reqwest",
"sea-orm",
"sqlx",
"tracing",
]
@ -2339,9 +1918,9 @@ dependencies = [
[[package]]
name = "signal-hook-registry"
version = "1.4.1"
version = "1.4.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d8229b473baa5980ac72ef434c4415e70c4b5e71b423043adb4ba059f89c99a1"
checksum = "a9e9e0b4211b72e7b8b6e85c807d36c212bdb33ea8587f7569562a84df5465b1"
dependencies = [
"libc",
]
@ -2356,12 +1935,6 @@ dependencies = [
"rand_core",
]
[[package]]
name = "simdutf8"
version = "0.1.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f27f6278552951f1f2b8cf9da965d10969b2efdea95a6ec47987ab46edfe263a"
[[package]]
name = "slab"
version = "0.4.9"
@ -2425,9 +1998,9 @@ dependencies = [
[[package]]
name = "sqlx"
version = "0.7.3"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "dba03c279da73694ef99763320dea58b51095dfe87d001b1d4b5fe78ba8763cf"
checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa"
dependencies = [
"sqlx-core",
"sqlx-macros",
@ -2438,19 +2011,17 @@ dependencies = [
[[package]]
name = "sqlx-core"
version = "0.7.3"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d84b0a3c3739e220d94b3239fd69fb1f74bc36e16643423bd99de3b43c21bfbd"
checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6"
dependencies = [
"ahash 0.8.11",
"ahash",
"atoi",
"bigdecimal",
"byteorder",
"bytes",
"chrono",
"crc",
"crossbeam-queue",
"dotenvy",
"either",
"event-listener 2.5.3",
"futures-channel",
@ -2466,7 +2037,6 @@ dependencies = [
"once_cell",
"paste",
"percent-encoding",
"rust_decimal",
"rustls",
"rustls-pemfile 1.0.4",
"serde",
@ -2475,7 +2045,6 @@ dependencies = [
"smallvec",
"sqlformat",
"thiserror",
"time",
"tokio",
"tokio-stream",
"tracing",
@ -2486,9 +2055,9 @@ dependencies = [
[[package]]
name = "sqlx-macros"
version = "0.7.3"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "89961c00dc4d7dffb7aee214964b065072bff69e36ddb9e2c107541f75e4f2a5"
checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127"
dependencies = [
"proc-macro2",
"quote",
@ -2499,11 +2068,10 @@ dependencies = [
[[package]]
name = "sqlx-macros-core"
version = "0.7.3"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d0bd4519486723648186a08785143599760f7cc81c52334a55d6a83ea1e20841"
checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8"
dependencies = [
"atomic-write-file",
"dotenvy",
"either",
"heck",
@ -2526,13 +2094,12 @@ dependencies = [
[[package]]
name = "sqlx-mysql"
version = "0.7.3"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "e37195395df71fd068f6e2082247891bc11e3289624bbc776a0cdfa1ca7f1ea4"
checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418"
dependencies = [
"atoi",
"base64 0.21.7",
"bigdecimal",
"bitflags 2.4.2",
"byteorder",
"bytes",
@ -2557,7 +2124,6 @@ dependencies = [
"percent-encoding",
"rand",
"rsa",
"rust_decimal",
"serde",
"sha1",
"sha2",
@ -2565,7 +2131,6 @@ dependencies = [
"sqlx-core",
"stringprep",
"thiserror",
"time",
"tracing",
"uuid",
"whoami",
@ -2573,13 +2138,12 @@ dependencies = [
[[package]]
name = "sqlx-postgres"
version = "0.7.3"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "d6ac0ac3b7ccd10cc96c7ab29791a7dd236bd94021f31eec7ba3d46a74aa1c24"
checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e"
dependencies = [
"atoi",
"base64 0.21.7",
"bigdecimal",
"bitflags 2.4.2",
"byteorder",
"chrono",
@ -2598,19 +2162,15 @@ dependencies = [
"log",
"md-5",
"memchr",
"num-bigint",
"once_cell",
"rand",
"rust_decimal",
"serde",
"serde_json",
"sha1",
"sha2",
"smallvec",
"sqlx-core",
"stringprep",
"thiserror",
"time",
"tracing",
"uuid",
"whoami",
@ -2618,9 +2178,9 @@ dependencies = [
[[package]]
name = "sqlx-sqlite"
version = "0.7.3"
version = "0.7.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "210976b7d948c7ba9fced8ca835b11cbb2d677c59c79de41ac0d397e14547490"
checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa"
dependencies = [
"atoi",
"chrono",
@ -2635,19 +2195,12 @@ dependencies = [
"percent-encoding",
"serde",
"sqlx-core",
"time",
"tracing",
"url",
"urlencoding",
"uuid",
]
[[package]]
name = "static_assertions"
version = "1.1.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
[[package]]
name = "stringprep"
version = "0.1.4"
@ -2665,12 +2218,6 @@ version = "0.10.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "73473c0e59e6d5812c5dfe2a064a6444949f089e20eec9a2e5506596494e4623"
[[package]]
name = "strum"
version = "0.25.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125"
[[package]]
name = "subtle"
version = "2.5.0"
@ -2699,18 +2246,6 @@ dependencies = [
"unicode-ident",
]
[[package]]
name = "syn_derive"
version = "0.1.8"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "1329189c02ff984e9736652b1631330da25eaa6bc639089ed4915d25446cbe7b"
dependencies = [
"proc-macro-error",
"proc-macro2",
"quote",
"syn 2.0.52",
]
[[package]]
name = "sync_wrapper"
version = "0.1.2"
@ -2744,12 +2279,6 @@ version = "0.2.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "7b2093cf4c8eb1e67749a6762251bc9cd836b6fc171623bd0a9d324d37af2417"
[[package]]
name = "tap"
version = "1.0.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "55937e1799185b12863d447f42597ed69d9928686b8d88a1df17376a097d8369"
[[package]]
name = "tempfile"
version = "3.10.1"
@ -2912,7 +2441,7 @@ dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"toml_edit 0.22.6",
"toml_edit",
]
[[package]]
@ -2924,17 +2453,6 @@ dependencies = [
"serde",
]
[[package]]
name = "toml_edit"
version = "0.21.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "6a8534fd7f78b5405e860340ad6575217ce99f38d4d5c8f2442cb5ecb50090e1"
dependencies = [
"indexmap",
"toml_datetime",
"winnow 0.5.40",
]
[[package]]
name = "toml_edit"
version = "0.22.6"
@ -2945,7 +2463,7 @@ dependencies = [
"serde",
"serde_spanned",
"toml_datetime",
"winnow 0.6.5",
"winnow",
]
[[package]]
@ -2978,7 +2496,6 @@ dependencies = [
"pin-project-lite",
"tower-layer",
"tower-service",
"tracing",
]
[[package]]
@ -3168,7 +2685,6 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f00cc9702ca12d3c81455259621e676d0f7251cec66a21e98fe2e9a37db93b2a"
dependencies = [
"getrandom",
"serde",
]
[[package]]
@ -3505,15 +3021,6 @@ version = "0.52.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "32b752e52a2da0ddfbdbcc6fceadfeede4c939ed16d13e648833a61dfb611ed8"
[[package]]
name = "winnow"
version = "0.5.40"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f593a95398737aeed53e489c785df13f3618e41dbcd6718c6addbf1395aa6876"
dependencies = [
"memchr",
]
[[package]]
name = "winnow"
version = "0.6.5"
@ -3533,15 +3040,6 @@ dependencies = [
"windows-sys 0.48.0",
]
[[package]]
name = "wyz"
version = "0.5.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "05f360fc0b24296329c78fda852a1e9ae82de9cf7b27dae4b7f62f118f77b9ed"
dependencies = [
"tap",
]
[[package]]
name = "zerocopy"
version = "0.7.32"

View File

@ -9,8 +9,33 @@ members = [".", "api", "domain","library", "service"]
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
tokio = { version = "1.36.0", features = ["full"] }
tokio = { workspace = true, features = ["full"]}
api = { path = "api" }
library = { path = "library" }
[workspace.dependencies]
tokio = "1.36"
axum = "0.7"
tracing = "0.1"
tower-http = "0.5"
validator = "0.17"
axum-extra = "0.9"
serde = "1.0"
sqlx = "0.7"
sqlx-postgres = "0.7"
toml = "0.8"
once_cell = "1.19"
tracing-appender = "0.2"
tracing-subscriber = "0.3"
chrono = "0.4"
thiserror = "1.0"
ulid = "1.1"
serde_json = "1.0"
http = "1.1"
http-body = "1.0"
http-body-util = "0.1"
moka = "0.12"
futures-util = "0.3"
reqwest = "0.12"
futures-executor = "0.3"
error-stack = "0.4"

View File

@ -6,13 +6,14 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
axum = "0.7.4"
tokio = { version = "1.36.0", features = ["full"] }
tracing = "0.1.40"
tower-http = { version = "0.5.2", features = ["trace"] }
validator = { version = "0.17", features = ["derive"] }
axum = { workspace = true }
tokio = { workspace = true }
tracing = { workspace = true }
tower-http = { workspace = true }
validator = { workspace = true }
axum-extra = { workspace = true }
library = { path = "../library" }
domain = { path = "../domain" }
service = { path = "../service" }
axum-extra = "0.9.3"

View File

@ -9,5 +9,5 @@ prefix = "tower_defense_server"
level = "DEBUG"
[database]
url = "mysql://lyj:1325479Lyj!@47.95.198.7:13206/demo_rs"
url = "postgres://lyj:1325479Lyj!@47.95.198.7:13207/demo_rs"
options = { min_conns = 10, max_conns = 20, conn_timeout = 30, idle_timeout = 300, max_lifetime = 60, sql_logging = true }

View File

@ -6,6 +6,8 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
sea-orm = { version = "0.12.14", features = ["sqlx-mysql", "runtime-tokio-rustls", "macros", "debug-print"] }
serde = { version = "1.0", features = ["derive"] }
validator = { version = "0.17", features = ["derive"] }
serde = { workspace = true, features = ["derive"] }
sqlx = { workspace = true, features = ["postgres", "uuid", "macros", "sqlx-macros", "chrono"] }
validator = { workspace = true, features = ["derive"] }
library = { path = "../library" }

3
domain/src/db_result.rs Normal file
View File

@ -0,0 +1,3 @@
pub struct CountResult {
pub count: u64
}

View File

@ -1,13 +1,7 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.14
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "account")]
pub struct Model {
#[sea_orm(primary_key)]
#[derive(Debug, Clone)]
pub struct Account {
pub id: u64,
#[sea_orm(unique)]
pub username: String,
pub password: String,
pub salt: String,
@ -18,8 +12,3 @@ pub struct Model {
pub created_at: i64,
pub updated_at: i64,
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {}
impl ActiveModelBehavior for ActiveModel {}

View File

@ -1,18 +1,44 @@
use sea_orm::entity::prelude::*;
use sea_orm::prelude::DateTime;
use serde::{Deserialize, Serialize};
use sqlx::{FromRow, PgPool};
use sqlx::types::chrono::{self, DateTime};
use crate::db_result::CountResult;
#[derive(Clone, Debug, PartialEq, Eq, DeriveEntityModel, Serialize, Deserialize)]
#[sea_orm(table_name = "feedback")]
pub struct Model {
#[sea_orm(primary_key)]
#[derive(Debug, Clone, FromRow, serde::Serialize)]
#[table_name = "feedback"]
pub struct Feedback {
pub id: u64,
pub user_id: u64,
pub content: String,
pub created_at: DateTime,
pub created_at: DateTime<chrono::Utc>,
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {}
impl Feedback {
pub async fn search_feedback(page: u64, page_size: u64, db_pool: &PgPool) -> Result<Vec<Feedback>, sqlx::Error> {
sqlx::query_as!(
Feedback,
r#"select id, user_id, content, created_at from feedback limit ? offset ?"#,
page_size, page
).fetch_all(db_pool).await
}
impl ActiveModelBehavior for ActiveModel {}
pub async fn count_feedback(db_pool: &PgPool) -> Result<CountResult, sqlx::Error> {
sqlx::query_as!(
CountResult,
r#"select count(*) from feedback"#,
).fetch_one(db_pool).await
}
pub async fn add_feedback(feedback: &mut Feedback, db_pool: &PgPool) -> Result<Feedback, sqlx::Error> {
feedback.created_at = DateTime::default().to_utc();
sqlx::query_as!(
Feedback,
r#"insert into feedback
(user_id, content, created_at)
values
(?, ?, ?) returning *
"#,
feedback.user_id,
feedback.content,
feedback.created_at
).execute(db_pool)
}
}

View File

@ -1,6 +1,4 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.14
pub mod prelude;
pub mod account;
pub mod player_info;
pub mod feedback;

View File

@ -1,22 +1,45 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.14
use sqlx::{FromRow, PgPool, QueryBuilder};
use sqlx::types::chrono::{self, DateTime};
use library::db;
use sea_orm::entity::prelude::*;
#[derive(Clone, Debug, PartialEq, DeriveEntityModel, Eq)]
#[sea_orm(table_name = "player_info")]
pub struct Model {
#[sea_orm(primary_key)]
pub id: u64,
#[derive(Debug, Clone, FromRow, serde::Serialize)]
#[table_name = "player_info"]
pub struct PlayerInfo {
pub id: Option<u64>,
pub username: String,
pub email: Option<String>,
#[sea_orm(unique)]
pub email: String,
pub platform_id: String,
pub user_type: String,
pub country_code: String,
pub created_at: DateTime,
pub created_at: DateTime<chrono::Utc>,
}
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
pub enum Relation {}
impl PlayerInfo {
pub async fn find_by_platform_id(platform_id: &str, db_pool: &PgPool) -> Result<PlayerInfo, sqlx::Error> {
sqlx::query_as!(
PlayerInfo,
r#"select * from player_info where platform_id = ?"#,
platform_id
)
.fetch_one(db_pool)
.await
}
impl ActiveModelBehavior for ActiveModel {}
pub async fn add_player_info(player_info: &mut PlayerInfo, db_pool: &PgPool) -> Result<PlayerInfo, sqlx::Error> {
player_info.created_at = DateTime::default().to_utc();
sqlx::query_as!(
PlayerInfo,
r#"
insert into player_info
(username, email, platform_id, user_type, country_code, created_at)
values
(?, ?, ?, ?, ?, ?) returning *"#,
player_info.username,
player_info.email,
player_info.platform_id,
player_info.user_type,
player_info.country_code,
player_info.created_at,
).execute(db_pool)
}
}

View File

@ -1,5 +0,0 @@
//! `SeaORM` Entity. Generated by sea-orm-codegen 0.12.14
pub use super::account::Entity as Account;
pub use super::player_info::Entity as PlayerInfo;
pub use super::feedback::Entity as Feedback;

View File

@ -1,2 +1,3 @@
pub mod entities;
pub mod dto;
mod db_result;

View File

@ -4,22 +4,23 @@ version = "0.1.0"
edition = "2021"
[dependencies]
toml = "0.8.10"
serde = { version = "1.0.197", features = ["derive"] }
once_cell = "1.19.0"
tracing = "0.1.40"
tracing-appender = "0.2.3"
tracing-subscriber = { version = "0.3.18", features = ["json"] }
chrono = "0.4.35"
sea-orm = { version = "0.12.14", features = ["sqlx-mysql", "runtime-tokio-rustls", "macros", "debug-print"] }
axum = "0.7.4"
axum-extra = "0.9.2"
thiserror = "1.0.57"
ulid = "1.1.2"
serde_json = "1.0.114"
http = "1.1.0"
http-body = "1.0.0"
http-body-util = "0.1.0"
moka = { version = "0.12", features = ["future"] }
tokio = { version = "1", features = ["rt-multi-thread", "macros" ] }
futures-util = "0.3"
toml = { workspace = true }
serde = { workspace = true, features = ["derive"] }
once_cell = { workspace = true }
tracing = { workspace = true }
tracing-appender = { workspace = true }
tracing-subscriber = { workspace = true, features = ["json"] }
chrono = { workspace = true }
sqlx = { workspace = true, features = ["mysql", "runtime-tokio-rustls", "macros", "json"] }
sqlx-postgres = { workspace = true, features = ["json"] }
axum = { workspace = true }
axum-extra = { workspace = true }
thiserror = { workspace = true }
ulid = { workspace = true }
serde_json = { workspace = true }
http = { workspace = true }
http-body = { workspace = true }
http-body-util = { workspace = true }
moka = { workspace = true, features = ["future"] }
tokio = { workspace = true, features = ["rt-multi-thread", "macros" ] }
futures-util = { workspace = true }

View File

@ -1,35 +1,29 @@
use crate::core::config::Config;
use sea_orm::{ConnectOptions, Database, DatabaseConnection};
use std::sync::OnceLock;
use std::time::Duration;
use sqlx_postgres::{PgPool, PgPoolOptions};
static DB: OnceLock<DatabaseConnection> = OnceLock::new();
static DB: OnceLock<PgPool> = OnceLock::new();
pub async fn init_database(config: &Config) {
let db_cfg = &config.database;
let mut conn_option = ConnectOptions::new(&db_cfg.url);
conn_option
let pool = PgPoolOptions::new()
.min_connections(db_cfg.options.min_conns)
.max_connections(db_cfg.options.max_conns)
.connect_timeout(Duration::from_secs(db_cfg.options.conn_timeout))
.acquire_timeout(Duration::from_secs(db_cfg.options.conn_timeout))
.idle_timeout(Duration::from_secs(db_cfg.options.idle_timeout))
.max_lifetime(Duration::from_secs(db_cfg.options.max_lifetime))
.sqlx_logging(db_cfg.options.sql_logging);
let conn = Database::connect(conn_option)
.connect(&db_cfg.url)
.await
.unwrap_or_else(|e| panic!("数据库连接失败:{}", e));
let _ = conn
.ping()
.await
.is_err_and(|e| panic!("数据库连接失败:{}", e));
pool.acquire().await.unwrap_or_else(|e| panic!("数据库连接失败:{}", e));
let _ = DB.set(conn);
let _ = DB.set(pool);
}
pub fn conn() -> &'static DatabaseConnection {
pub fn conn() -> &'static PgPool {
DB.get().unwrap_or_else(|| panic!("数据库连接未初始化"))
}

View File

@ -6,12 +6,12 @@ edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
tracing = "0.1.40"
chrono = "0.4.35"
sea-orm = { version = "0.12.14", features = ["sqlx-mysql", "runtime-tokio-rustls", "macros", "debug-print"] }
reqwest = "0.12.4"
futures-executor = "0.3.30"
error-stack = "0.4.1"
tracing = { workspace = true }
chrono = { workspace = true }
reqwest = { workspace = true }
futures-executor = { workspace = true }
error-stack = { workspace = true }
sqlx = { workspace = true, features = ["uuid"] }
library = { path = "../library" }
domain = { path = "../domain" }

View File

@ -1,22 +1,18 @@
use sea_orm::{EntityTrait, PaginatorTrait};
use sea_orm::ActiveValue::Set;
use std::future::Future;
use sqlx::Error;
use domain::dto::feedback::FeedbackAdd;
use domain::entities::feedback;
use domain::entities::prelude::Feedback;
use domain::entities::feedback::Feedback;
use library::db;
use library::resp::pageable::Pageable;
use library::resp::response::{ResOK, ResResult};
/// 获取反馈信息列表
pub async fn get_feedback_list_by_page(page: u64, page_size: u64) -> ResResult<ResOK<Pageable<feedback::Model>>> {
let feedback_list = Feedback::find()
.paginate(db!(), page_size)
.fetch_page(page)
.await
.ok();
pub async fn get_feedback_list_by_page(page: u64, page_size: u64) -> ResResult<ResOK<Pageable<Feedback>>> {
let feedback_list = Feedback::search_feedback(page, page_size, db!()).await.ok();
if feedback_list.is_none() {
tracing::error!("反馈信息为空");
return Ok(ResOK(Some(Pageable::<feedback::Model>::empty())));
return Ok(ResOK(Some(Pageable::<Feedback>::empty())));
}
let total = get_feedback_count().await;
Ok(ResOK(Some(Pageable::new(feedback_list.unwrap(), total))))
@ -24,28 +20,30 @@ pub async fn get_feedback_list_by_page(page: u64, page_size: u64) -> ResResult<R
/// 获取反馈信息总数
async fn get_feedback_count() -> u64 {
let count = Feedback::find().count(db!()).await.ok();
let count = Feedback::count_feedback(db!()).await.ok();
if count.is_none() {
tracing::error!("反馈信息为空");
return 0;
}
count.unwrap()
count.unwrap().count
}
/// 添加反馈信息
pub async fn add_feedback(req: FeedbackAdd) -> ResResult<ResOK<()>> {
let now = chrono::Local::now().naive_local();
let model = feedback::ActiveModel {
user_id: Set(req.user_id.unwrap()),
content: Set(req.content.unwrap()),
created_at: Set(now),
match Feedback::add_feedback(&mut Feedback{
user_id: req.user_id.unwrap(),
content: req.content.unwrap(),
..Default::default()
};
if let Err(err) = Feedback::insert(model).exec(db!()).await {
tracing::error!(error = ?err, "添加反馈信息失败");
return Err(library::resp::response::ResErr::ErrSystem(None));
}, db!()).await {
Ok(feedback) => {
tracing::info!("添加反馈成功: {}" feedback)
}
Err(err) => {
tracing::error!(error = ?err, "添加反馈信息失败");
return Err(library::resp::response::ResErr::ErrSystem(None));
}
}
Ok(ResOK(None))

View File

@ -1,15 +1,13 @@
use sqlx::Error;
use domain::entities::player_info;
use domain::entities::prelude::PlayerInfo;
use domain::dto::player_info::PlayerInfoRegister;
use domain::entities::player_info::PlayerInfo;
use library::db;
use library::resp::response::ResErr::{ErrPerm, ErrSystem};
use library::resp::response::{ResOK, ResResult};
use sea_orm::{ColumnTrait, EntityTrait, PaginatorTrait, QueryFilter, Set};
pub async fn register(req: PlayerInfoRegister) -> ResResult<ResOK<()>> {
match PlayerInfo::find()
.filter(player_info::Column::PlatformId.eq(req.platform_id.clone().unwrap()))
.count(db!())
match PlayerInfo::find_by_platform_id(req.platform_id.clone().unwrap().as_mut_str(), db!())
.await
{
Err(err) => {
@ -25,19 +23,23 @@ pub async fn register(req: PlayerInfoRegister) -> ResResult<ResOK<()>> {
let now = chrono::Local::now().naive_local();
let model = player_info::ActiveModel {
username: Set(req.username.unwrap()),
email: Set(Option::from(req.email)),
platform_id: Set(req.platform_id.unwrap()),
user_type: Set(req.user_type.unwrap()),
country_code: Set(req.country_code.unwrap()),
created_at: Set(now),
..Default::default()
};
if let Err(err) = PlayerInfo::insert(model).exec(db!()).await {
tracing::error!(error = ?err, "添加账号失败");
return Err(ErrSystem(None));
match PlayerInfo::add_player_info(
&mut PlayerInfo{
username: req.username.unwrap(),
email: req.email.unwrap(),
platform_id: req.platform_id.unwrap(),
user_type: req.user_type.unwrap(),
country_code: req.country_code.unwrap(),
..Default::default()
}, db!()
).await {
Ok(player_info) => {
tracing::info!("添加账户成功: {}" player_info)
}
Err(err) => {
tracing::error!(error = ?err, "添加账号失败");
return Err(ErrSystem(None));
}
}
Ok(ResOK(None))