From 05b990b09300c52c2c65acdf3998b6a9f201c262 Mon Sep 17 00:00:00 2001 From: AeCw Date: Wed, 11 Feb 2026 13:56:51 +0800 Subject: [PATCH] update --- Cargo.lock | 321 ++++---- Cargo.toml | 8 +- .../src/m20220101_000001_create_table.rs | 247 +++++- .../src/m20250210_000001_create_tables.rs | 734 ------------------ 4 files changed, 393 insertions(+), 917 deletions(-) delete mode 100644 migration/src/m20250210_000001_create_tables.rs diff --git a/Cargo.lock b/Cargo.lock index ccc6f8c..4eb160b 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -13,19 +13,6 @@ dependencies = [ "version_check", ] -[[package]] -name = "ahash" -version = "0.8.12" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5a15f179cd60c4584b8a8c596927aadc462e27f2ca70c04e0071964a73ba7a75" -dependencies = [ - "cfg-if", - "getrandom 0.3.4", - "once_cell", - "version_check", - "zerocopy", -] - [[package]] name = "aho-corasick" version = "1.1.4" @@ -94,7 +81,7 @@ checksum = "7c02d123df017efcdfbd739ef81735b36c5ba83ec3c59c80a9d7ecc718f92e50" [[package]] name = "astracup-backend" -version = "0.1.0" +version = "0.0.1" dependencies = [ "anyhow", "argon2", @@ -285,12 +272,6 @@ dependencies = [ "syn 2.0.114", ] -[[package]] -name = "base64" -version = "0.21.7" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567" - [[package]] name = "base64" version = "0.22.1" @@ -309,7 +290,7 @@ version = "0.18.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9a0f5948f30df5f43ac29d310b7476793be97c50787e6ef4a63d960a0d0be827" dependencies = [ - "base64 0.22.1", + "base64", "blowfish", "getrandom 0.3.4", "subtle", @@ -318,13 +299,16 @@ dependencies = [ [[package]] name = "bigdecimal" -version = "0.3.1" +version = "0.4.10" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a6773ddc0eafc0e509fb60e48dff7f450f8e674a0686ae8605e8d9901bd5eefa" +checksum = "4d6867f1565b3aad85681f1015055b087fcfd840d6aeee6eee7f2da317603695" dependencies = [ + "autocfg", + "libm", "num-bigint", "num-integer", "num-traits", + "serde", ] [[package]] @@ -523,6 +507,15 @@ dependencies = [ "memchr", ] +[[package]] +name = "concurrent-queue" +version = "2.5.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "4ca0197aee26d1ae37445ee532fefce43251d24cc7c166799f4d46817f1d3973" +dependencies = [ + "crossbeam-utils", +] + [[package]] name = "config" version = "0.15.19" @@ -725,14 +718,25 @@ dependencies = [ ] [[package]] -name = "derivative" -version = "2.2.0" +name = "derive_more" +version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "fcc3dd5e9e9c0b295d6e1e4d811fb6f157d5ffd784b8d202fc62eac8035a770b" +checksum = "d751e9e49156b02b44f9c1815bcb94b984cdcc4396ecc32521c739452808b134" +dependencies = [ + "derive_more-impl", +] + +[[package]] +name = "derive_more-impl" +version = "2.1.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "799a97264921d8623a957f6c3b9011f3b5492f557bbb7a5a19b7fa6d06ba8dcb" dependencies = [ "proc-macro2", "quote", - "syn 1.0.109", + "rustc_version", + "syn 2.0.114", + "unicode-xid", ] [[package]] @@ -849,9 +853,14 @@ dependencies = [ [[package]] name = "event-listener" -version = "2.5.3" +version = "5.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "0206175f82b8d6bf6652ff7d71a1e27fd2e4efde587fd368662814d6ec1d9ce0" +checksum = "e13b66accf52311f30a0db42147dadea9850cb48cd070028831ae5f5d4b856ab" +dependencies = [ + "concurrent-queue", + "parking", + "pin-project-lite", +] [[package]] name = "fastrand" @@ -1106,7 +1115,7 @@ version = "0.12.3" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "8a9ee70c43aaf417c914396645a0fa852624801b24ebb7ae78fe8272889ac888" dependencies = [ - "ahash 0.7.8", + "ahash", ] [[package]] @@ -1114,10 +1123,6 @@ name = "hashbrown" version = "0.14.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "e5274423e17b7c9fc20b6e7e208532f9b19825d82dfd615708b70edd83df41f1" -dependencies = [ - "ahash 0.8.12", - "allocator-api2", -] [[package]] name = "hashbrown" @@ -1125,6 +1130,8 @@ version = "0.15.5" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "9229cfe53dfd69f0609a49f65461bd93001ea1ef889cd5529dd176593f5338a1" dependencies = [ + "allocator-api2", + "equivalent", "foldhash", ] @@ -1134,15 +1141,6 @@ version = "0.16.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "841d1cc9bed7f9236f321df977030373f4a4163ae1a7dbfe1a51a2c1a51d9100" -[[package]] -name = "hashlink" -version = "0.8.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e8094feaf31ff591f651a2664fb9cfd92bba7a60ce3197265e9482ebe753c8f7" -dependencies = [ - "hashbrown 0.14.5", -] - [[package]] name = "hashlink" version = "0.10.0" @@ -1158,7 +1156,7 @@ version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "b3314d5adb5d94bcdf56771f2e50dbbc80bb4bdf88967526706205ac9eff24eb" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "headers-core", "http", @@ -1181,9 +1179,6 @@ name = "heck" version = "0.4.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "95505c38b4572b2d910cecb0281560f54b440a19336cbbcb27bf6ce6adc6f5a8" -dependencies = [ - "unicode-segmentation", -] [[package]] name = "heck" @@ -1314,7 +1309,7 @@ version = "0.1.20" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "96547c2556ec9d12fb1578c4eaf448b04993e7fb79cbaad930a656880a6bdfa0" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "futures-channel", "futures-util", @@ -1584,7 +1579,7 @@ version = "10.3.0" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "0529410abe238729a60b108898784df8984c87f6054c9c4fcacc47e4803c1ce1" dependencies = [ - "base64 0.22.1", + "base64", "getrandom 0.2.17", "js-sys", "pem", @@ -1634,11 +1629,10 @@ dependencies = [ [[package]] name = "libsqlite3-sys" -version = "0.27.0" +version = "0.30.1" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "cf4e226dcd58b4be396f7bd3c20da8fdee2911400705297ba7d2d7cc2c30f716" +checksum = "2e99fb7a497b1e3339bc746195567ed8d3e24945ecd636e3619d20b9de9e9149" dependencies = [ - "cc", "pkg-config", "vcpkg", ] @@ -1713,12 +1707,6 @@ version = "0.3.17" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "6877bb514081ee2a7ff5ef9de3281f14a4dd4bceac4c09388074a6b5df8a139a" -[[package]] -name = "minimal-lexical" -version = "0.2.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "68354c5c6bd36d73ff3feceb05efa59b6acb7626617f4962be322a825e61f79a" - [[package]] name = "mio" version = "1.1.1" @@ -1773,16 +1761,6 @@ dependencies = [ "tempfile", ] -[[package]] -name = "nom" -version = "7.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "d273983c5a657a70a3e8f2a01329822f3b8c8172b73826411a55751e404a0a4a" -dependencies = [ - "memchr", - "minimal-lexical", -] - [[package]] name = "nu-ansi-term" version = "0.50.3" @@ -1912,9 +1890,9 @@ dependencies = [ [[package]] name = "ordered-float" -version = "3.9.2" +version = "4.6.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f1e1c390732d15f1d48471625cd92d154e66db2c56645e29a9cd26f4699f72dc" +checksum = "7bb71e1b3fa6ca1c61f383464aaf2bb0e2f8e772a1f01d486832464de363b951" dependencies = [ "num-traits", ] @@ -1931,9 +1909,9 @@ dependencies = [ [[package]] name = "ouroboros" -version = "0.17.2" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "e2ba07320d39dfea882faa70554b4bd342a5f273ed59ba7c1c6b4c840492c954" +checksum = "1e0f050db9c44b97a94723127e6be766ac5c340c48f2c4bb3ffa11713744be59" dependencies = [ "aliasable", "ouroboros_macro", @@ -1942,17 +1920,23 @@ dependencies = [ [[package]] name = "ouroboros_macro" -version = "0.17.2" +version = "0.18.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec4c6225c69b4ca778c0aea097321a64c421cf4577b331c61b229267edabb6f8" +checksum = "3c7028bdd3d43083f6d8d4d5187680d0d3560d54df4cc9d752005268b41e64d0" dependencies = [ "heck 0.4.1", - "proc-macro-error", "proc-macro2", + "proc-macro2-diagnostics", "quote", "syn 2.0.114", ] +[[package]] +name = "parking" +version = "2.2.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "f38d5652c16fde515bb1ecef450ab0f6a219d619a7274976324d5e377f7dceba" + [[package]] name = "parking_lot" version = "0.12.5" @@ -1987,12 +1971,6 @@ dependencies = [ "subtle", ] -[[package]] -name = "paste" -version = "1.0.15" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "57c0d7b74b563b49d38dae00a0c37d4d6de9b432382b2892f0574ddcae73fd0a" - [[package]] name = "pathdiff" version = "0.2.3" @@ -2005,7 +1983,7 @@ version = "3.0.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "1d30c53c26bc5b31a98cd02d20f25a7c8567146caf63ed593a9d87b2775291be" dependencies = [ - "base64 0.22.1", + "base64", "serde_core", ] @@ -2067,6 +2045,15 @@ dependencies = [ "sha2", ] +[[package]] +name = "pgvector" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "fc58e2d255979a31caa7cabfa7aac654af0354220719ab7a68520ae7a91e8c0b" +dependencies = [ + "serde", +] + [[package]] name = "pin-project-lite" version = "0.2.16" @@ -2175,30 +2162,6 @@ dependencies = [ "toml_edit", ] -[[package]] -name = "proc-macro-error" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "da25490ff9892aab3fcf7c36f08cfb902dd3e71ca0f9f9517bea02a73a5ce38c" -dependencies = [ - "proc-macro-error-attr", - "proc-macro2", - "quote", - "syn 1.0.109", - "version_check", -] - -[[package]] -name = "proc-macro-error-attr" -version = "1.0.4" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "a1be40180e52ecc98ad80b184934baf3d0d29f979574e439af5a55274b35f869" -dependencies = [ - "proc-macro2", - "quote", - "version_check", -] - [[package]] name = "proc-macro-error-attr2" version = "2.0.0" @@ -2230,6 +2193,19 @@ dependencies = [ "unicode-ident", ] +[[package]] +name = "proc-macro2-diagnostics" +version = "0.10.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "af066a9c399a26e020ada66a034357a868728e72cd426f3adcd35f80d88d88c8" +dependencies = [ + "proc-macro2", + "quote", + "syn 2.0.114", + "version_check", + "yansi", +] + [[package]] name = "ptr_meta" version = "0.1.4" @@ -2465,7 +2441,7 @@ version = "0.13.2" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ab3f43e3283ab1488b624b44b0e988d0acea0b3214e694730a055cb6b2efa801" dependencies = [ - "base64 0.22.1", + "base64", "bytes", "encoding_rs", "futures-core", @@ -2608,6 +2584,15 @@ version = "2.1.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "357703d41365b4b27c590e3ed91eabb1b663f07c4c084095e60cbed4362dff0d" +[[package]] +name = "rustc_version" +version = "0.4.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfcb3a22ef46e85b45de6ee7e79d063319ebb6594faafcf1c225ea92ab6e9b92" +dependencies = [ + "semver", +] + [[package]] name = "rustix" version = "1.1.3" @@ -2747,17 +2732,19 @@ dependencies = [ [[package]] name = "sea-orm" -version = "0.12.15" +version = "1.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c8814e37dc25de54398ee62228323657520b7f29713b8e238649385dbe473ee0" +checksum = "6d945f62558fac19e5988680d2fdf747b734c2dbc6ce2cb81ba33ed8dde5b103" dependencies = [ "async-stream", "async-trait", "bigdecimal", "chrono", - "futures", + "derive_more", + "futures-util", "log", "ouroboros", + "pgvector", "rust_decimal", "sea-orm-macros", "sea-query", @@ -2766,7 +2753,7 @@ dependencies = [ "serde_json", "sqlx", "strum", - "thiserror 1.0.69", + "thiserror 2.0.18", "time", "tracing", "url", @@ -2775,11 +2762,11 @@ dependencies = [ [[package]] name = "sea-orm-macros" -version = "0.12.15" +version = "1.1.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5e115c6b078e013aa963cc2d38c196c2c40b05f03d0ac872fe06b6e0d5265603" +checksum = "84c2e64a50a9cc8339f10a27577e10062c7f995488e469f2c95762c5ee847832" dependencies = [ - "heck 0.4.1", + "heck 0.5.0", "proc-macro2", "quote", "sea-bae", @@ -2789,13 +2776,12 @@ dependencies = [ [[package]] name = "sea-query" -version = "0.30.7" +version = "0.32.7" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4166a1e072292d46dc91f31617c2a1cdaf55a8be4b5c9f4bf2ba248e3ac4999b" +checksum = "8a5d1c518eaf5eda38e5773f902b26ab6d5e9e9e2bb2349ca6c64cf96f80448c" dependencies = [ "bigdecimal", "chrono", - "derivative", "inherent", "ordered-float", "rust_decimal", @@ -2806,9 +2792,9 @@ dependencies = [ [[package]] name = "sea-query-binder" -version = "0.5.0" +version = "0.7.0" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "36bbb68df92e820e4d5aeb17b4acd5cc8b5d18b2c36a4dd6f4626aabfa7ab1b9" +checksum = "b0019f47430f7995af63deda77e238c17323359af241233ec768aba1faea7608" dependencies = [ "bigdecimal", "chrono", @@ -3041,6 +3027,9 @@ name = "smallvec" version = "1.15.1" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "67b1b7a3b5fe4f1376887184045fcf45c69e92af734b7aaddc05fb777b6fbd03" +dependencies = [ + "serde", +] [[package]] name = "socket2" @@ -3071,21 +3060,11 @@ dependencies = [ "der", ] -[[package]] -name = "sqlformat" -version = "0.2.6" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7bba3a93db0cc4f7bdece8bb09e77e2e785c20bfebf79eb8340ed80708048790" -dependencies = [ - "nom", - "unicode_categories", -] - [[package]] name = "sqlx" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "c9a2ccff1a000a5a59cd33da541d9f2fdcd9e6e8229cc200565942bff36d0aaa" +checksum = "1fefb893899429669dcdd979aff487bd78f4064e5e7907e4269081e0ef7d97dc" dependencies = [ "sqlx-core", "sqlx-macros", @@ -3096,41 +3075,36 @@ dependencies = [ [[package]] name = "sqlx-core" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "24ba59a9342a3d9bab6c56c118be528b27c9b60e490080e9711a04dccac83ef6" +checksum = "ee6798b1838b6a0f69c007c133b8df5866302197e404e8b6ee8ed3e3a5e68dc6" dependencies = [ - "ahash 0.8.12", - "atoi", + "base64", "bigdecimal", - "byteorder", "bytes", "chrono", "crc", "crossbeam-queue", "either", "event-listener", - "futures-channel", "futures-core", "futures-intrusive", "futures-io", "futures-util", - "hashlink 0.8.4", - "hex", + "hashbrown 0.15.5", + "hashlink", "indexmap", "log", "memchr", "native-tls", "once_cell", - "paste", "percent-encoding", "rust_decimal", "serde", "serde_json", "sha2", "smallvec", - "sqlformat", - "thiserror 1.0.69", + "thiserror 2.0.18", "time", "tokio", "tokio-stream", @@ -3141,26 +3115,26 @@ dependencies = [ [[package]] name = "sqlx-macros" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "4ea40e2345eb2faa9e1e5e326db8c34711317d2b5e08d0d5741619048a803127" +checksum = "a2d452988ccaacfbf5e0bdbc348fb91d7c8af5bee192173ac3636b5fb6e6715d" dependencies = [ "proc-macro2", "quote", "sqlx-core", "sqlx-macros-core", - "syn 1.0.109", + "syn 2.0.114", ] [[package]] name = "sqlx-macros-core" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "5833ef53aaa16d860e92123292f1f6a3d53c34ba8b1969f152ef1a7bb803f3c8" +checksum = "19a9c1841124ac5a61741f96e1d9e2ec77424bf323962dd894bdb93f37d5219b" dependencies = [ "dotenvy", "either", - "heck 0.4.1", + "heck 0.5.0", "hex", "once_cell", "proc-macro2", @@ -3172,20 +3146,19 @@ dependencies = [ "sqlx-mysql", "sqlx-postgres", "sqlx-sqlite", - "syn 1.0.109", - "tempfile", + "syn 2.0.114", "tokio", "url", ] [[package]] name = "sqlx-mysql" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1ed31390216d20e538e447a7a9b959e06ed9fc51c37b514b46eb758016ecd418" +checksum = "aa003f0038df784eb8fecbbac13affe3da23b45194bd57dba231c8f48199c526" dependencies = [ "atoi", - "base64 0.21.7", + "base64", "bigdecimal", "bitflags", "byteorder", @@ -3218,7 +3191,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 1.0.69", + "thiserror 2.0.18", "time", "tracing", "uuid", @@ -3227,12 +3200,12 @@ dependencies = [ [[package]] name = "sqlx-postgres" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "7c824eb80b894f926f89a0b9da0c7f435d27cdd35b8c655b114e58223918577e" +checksum = "db58fcd5a53cf07c184b154801ff91347e4c30d17a3562a635ff028ad5deda46" dependencies = [ "atoi", - "base64 0.21.7", + "base64", "bigdecimal", "bitflags", "byteorder", @@ -3242,7 +3215,6 @@ dependencies = [ "etcetera", "futures-channel", "futures-core", - "futures-io", "futures-util", "hex", "hkdf", @@ -3262,7 +3234,7 @@ dependencies = [ "smallvec", "sqlx-core", "stringprep", - "thiserror 1.0.69", + "thiserror 2.0.18", "time", "tracing", "uuid", @@ -3271,9 +3243,9 @@ dependencies = [ [[package]] name = "sqlx-sqlite" -version = "0.7.4" +version = "0.8.6" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "b244ef0a8414da0bed4bb1910426e890b19e5e9bccc27ada6b797d05c55ae0aa" +checksum = "c2d12fe70b2c1b4401038055f90f151b78208de1f9f89a7dbfd41587a10c3eea" dependencies = [ "atoi", "chrono", @@ -3287,11 +3259,12 @@ dependencies = [ "log", "percent-encoding", "serde", + "serde_urlencoded", "sqlx-core", + "thiserror 2.0.18", "time", "tracing", "url", - "urlencoding", "uuid", ] @@ -3326,9 +3299,9 @@ checksum = "7da8b5736845d9f2fcb837ea5d9e2628564b3b043a70948a3f0b778838c5fb4f" [[package]] name = "strum" -version = "0.25.0" +version = "0.26.3" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "290d54ea6f91c969195bdbcd7442c8c2a2ba87da8bf60a7ee86a235d4bc1e125" +checksum = "8fec0f0aef304996cf250b31b5a10dee7980c85da9d759361292b8bca5a18f06" [[package]] name = "subtle" @@ -3815,12 +3788,6 @@ version = "0.2.6" source = "registry+https://github.com/rust-lang/crates.io-index" checksum = "ebc1c04c71510c7f702b52b7c350734c9ff1295c464a03335b00bb84fc54f853" -[[package]] -name = "unicode_categories" -version = "0.1.1" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "39ec24b3121d976906ece63c9daad25b85969647682eee313cb5779fdd69e14e" - [[package]] name = "untrusted" version = "0.9.0" @@ -3839,12 +3806,6 @@ dependencies = [ "serde", ] -[[package]] -name = "urlencoding" -version = "2.1.3" -source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "daf8dba3b7eb870caf1ddeed7bc9d2a049f3cfdfae7cb521b087cc33ae4c49da" - [[package]] name = "utf8_iter" version = "1.0.4" @@ -4579,9 +4540,15 @@ checksum = "2462ea039c445496d8793d052e13787f2b90e750b833afee748e601c17621ed9" dependencies = [ "arraydeque", "encoding_rs", - "hashlink 0.10.0", + "hashlink", ] +[[package]] +name = "yansi" +version = "1.0.1" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "cfe53a6657fd280eaa890a3bc59152892ffa3e30101319d168b781ed6529b049" + [[package]] name = "yoke" version = "0.8.1" diff --git a/Cargo.toml b/Cargo.toml index e31041f..07dc643 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "astracup-backend" -version = "0.1.0" +version = "0.0.1" edition = "2024" authors = ["AstraCup Team"] description = "AstraCup tournament management backend" @@ -15,8 +15,8 @@ tower = "0.5.3" tower-http = { version = "0.6.8", features = ["cors", "trace"] } # Database -sea-orm = { version = "0.12", features = ["sqlx-mysql", "runtime-tokio-native-tls", "macros"] } -sqlx = { version = "0.7", features = ["mysql", "runtime-tokio-native-tls"] } +sea-orm = { version = "1.1.19", features = ["sqlx-mysql", "runtime-tokio-native-tls", "macros"] } +sqlx = { version = "0.8.6", features = ["mysql", "runtime-tokio-native-tls"] } dotenv = "0.15" # Serialization @@ -46,7 +46,7 @@ validator = { version = "0.20", features = ["derive"] } # Utilities chrono = { version = "0.4", features = ["serde"] } -uuid = { version = "1.0", features = ["v4", "serde"] } +uuid = { version = "1.20", features = ["v4", "serde"] } futures = "0.3" axum-extra = { version = "0.12.5", features = ["typed-header"] } diff --git a/migration/src/m20220101_000001_create_table.rs b/migration/src/m20220101_000001_create_table.rs index f0f4069..8865a70 100644 --- a/migration/src/m20220101_000001_create_table.rs +++ b/migration/src/m20220101_000001_create_table.rs @@ -70,6 +70,31 @@ impl MigrationTrait for Migration { ) .await?; + /// 房间类型 + manager + .create_type( + Type::create() + .as_enum(RoomType::Table) + .values([RoomType::SoloRoom, RoomType::TeamRoom]) + .to_owned(), + ) + .await?; + + /// 图池模式类型 + manager + .create_type( + Type::create() + .as_enum(BeatmapModeType::Table) + .values([ + BeatmapModeType::Osu, + BeatmapModeType::Taiko, + BeatmapModeType::Catch, + BeatmapModeType::Mania, + ]) + .to_owned(), + ) + .await?; + // table creation /// user table @@ -181,9 +206,227 @@ impl MigrationTrait for Migration { .custom(MatchState::Table) .not_null() .default(MatchState::Waiting), - ), + ) + .col(ColumnDef::new(Schedule::CreatedAt).timestamp().null()) + .col(ColumnDef::new(Schedule::UpdatedAt).timestamp().null()) + .to_owned(), ) - .await + .await?; + + /// room table + manager + .create_table( + Table::create() + .table(Room::Table) + .if_not_exists() + .col( + ColumnDef::new(Room::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(Room::Name).string().not_null()) + .col( + ColumnDef::new(Room::Type) + .custom(RoomType::Table) + .not_null() + .default(RoomType::SoloRoom), + ) + .col(ColumnDef::new(RoomSolo::RoomSoloId).integer().null()) + .col(ColumnDef::new(RoomTeam::RoomTeamId).integer().null()) + .col(ColumnDef::new(Room::RedScore).integer().null().default(0)) + .col(ColumnDef::new(Room::BlueScore).integer().null().default(0)) + .col(ColumnDef::new(Room::CreatedAt).timestamp().null()) + .col(ColumnDef::new(Room::UpdatedAt).timestamp().null()) + .to_owned(), + ) + .await?; + + /// room for solo + manager + .create_table( + Table::create() + .table(RoomSolo::Table) + .if_not_exists() + .col( + ColumnDef::new(RoomSolo::RoomSoloId) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(RoomSolo::RedPlayerId).integer().not_null()) + .col(ColumnDef::new(RoomSolo::BluePlayerId).integer().not_null()) + .col(ColumnDef::new(RoomSolo::CreatedAt).timestamp().null()) + .col(ColumnDef::new(RoomSolo::UpdatedAt).timestamp().null()) + .to_owned(), + ) + .await?; + + /// room for team + manager + .create_table( + Table::create() + .table(RoomTeam::Table) + .if_not_exists() + .col( + ColumnDef::new(RoomTeam::RoomTeamId) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(RoomTeam::RedTeamId).integer().not_null()) + .col(ColumnDef::new(RoomTeam::BlueTeamId).integer().not_null()) + .col(ColumnDef::new(RoomTeam::CreatedAt).timestamp().null()) + .col(ColumnDef::new(RoomTeam::UpdatedAt).timestamp().null()), + ) + .await?; + + /// beatmap table + manager + .create_table( + Table::create() + .table(Beatmap::Table) + .if_not_exists() + .col( + ColumnDef::new(Beatmap::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col( + ColumnDef::new(Beatmap::Sid) + .integer() + .not_null() + .unique_key(), + ) + .col( + ColumnDef::new(Beatmap::Bid) + .integer() + .not_null() + .unique_key(), + ) + .col(ColumnDef::new(Beatmap::Title).string().null()) + .col(ColumnDef::new(Beatmap::TitleUnicode).string().null()) + .col(ColumnDef::new(Beatmap::Artist).string().null()) + .col(ColumnDef::new(Beatmap::ArtistUnicode).string().null()) + .col(ColumnDef::new(Beatmap::Creator).string().null()) + .col(ColumnDef::new(Beatmap::Version).string().null()) + .col(ColumnDef::new(Beatmap::CoverUrl).string().null()) + .col( + ColumnDef::new(Beatmap::DifficultyStar) + .float() + .null() + .default(0.0), + ) + .col(ColumnDef::new(Beatmap::Ar).string().null()) + .col(ColumnDef::new(Beatmap::Od).string().null()) + .col(ColumnDef::new(Beatmap::Cs).string().null()) + .col(ColumnDef::new(Beatmap::Hp).string().null()) + .col(ColumnDef::new(Beatmap::TotalLength).integer().null()) + .col(ColumnDef::new(Beatmap::MaxCombo).integer().null()) + .col(ColumnDef::new(Beatmap::Bpm).float().null().default(0.0)) + .col( + ColumnDef::new(Beatmap::Mode) + .custom(BeatmapModeType::Table) + .not_null() + .default(BeatmapModeType::Osu), + ) + .col( + ColumnDef::new(Beatmap::Mod) + .json() + .null() + .default(Json::default([])), + ) + .col( + ColumnDef::new(Beatmap::SelectMod) + .string() + .not_null() + .default("NM"), + ) + .col( + ColumnDef::new(Beatmap::SelectModSlot) + .integer() + .not_null() + .default(1), + ) + .col( + ColumnDef::new(Beatmap::Approved) + .boolean() + .null() + .default(false), + ) + .col( + ColumnDef::new(Beatmap::NeedTest) + .boolean() + .null() + .default(false), + ) + .col( + ColumnDef::new(Beatmap::Deleted) + .boolean() + .null() + .default(false), + ) + .col( + ColumnDef::new(Beatmap::IsCustom) + .boolean() + .null() + .default(false), + ) + .col( + ColumnDef::new(Beatmap::IsOriginal) + .boolean() + .null() + .default(false), + ) + .col(ColumnDef::new(Beatmap::Season).integer().null().default(1)) + .col( + ColumnDef::new(Beatmap::Category) + .custom(Category::Table) + .null() + .default(Category::Qua), + ) + .col(ColumnDef::new(Beatmap::CreatedAt).timestamp().null()) + .col(ColumnDef::new(Beatmap::UpdatedAt).timestamp().null()) + .to_owned(), + ) + .await?; + + /// beatmap comment table + manager + .create_table( + Table::create() + .table(BeatmapComment::Table) + .if_not_exists() + .col( + ColumnDef::new(BeatmapComment::Id) + .integer() + .not_null() + .auto_increment() + .primary_key(), + ) + .col(ColumnDef::new(Beatmap::Id).integer().not_null()) + .col(ColumnDef::new(User::Id).integer().not_null()) + .col(ColumnDef::new(BeatmapComment::Content).string().not_null()) + .col( + ColumnDef::new(BeatmapComment::CreatedAt) + .timestamp() + .not_null() + .default(Expr::current_timestamp()), + ) + .col( + ColumnDef::new(BeatmapComment::UpdatedAt) + .timestamp() + .not_null() + .default(Expr::current_timestamp()), + ) + .to_owned(), + ) + .await?; } async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { diff --git a/migration/src/m20250210_000001_create_tables.rs b/migration/src/m20250210_000001_create_tables.rs deleted file mode 100644 index fa99c2e..0000000 --- a/migration/src/m20250210_000001_create_tables.rs +++ /dev/null @@ -1,734 +0,0 @@ -use sea_orm_migration::prelude::*; - -#[derive(DeriveMigrationName)] -pub struct Migration; - -#[async_trait::async_trait] -impl MigrationTrait for Migration { - async fn up(&self, manager: &SchemaManager) -> Result<(), DbErr> { - // 创建枚举类型 - manager - .create_type( - Type::create() - .as_enum(BeatmapSelectMod::Table) - .values([ - BeatmapSelectMod::Nm, - BeatmapSelectMod::Hd, - BeatmapSelectMod::Hr, - BeatmapSelectMod::Dt, - BeatmapSelectMod::Lz, - BeatmapSelectMod::Tb, - ]) - .to_owned(), - ) - .await?; - - manager - .create_type( - Type::create() - .as_enum(MultiplayerRoomType::Table) - .values([ - MultiplayerRoomType::Solo, - MultiplayerRoomType::TeamVs, - ]) - .to_owned(), - ) - .await?; - - manager - .create_type( - Type::create() - .as_enum(TeamColor::Table) - .values([ - TeamColor::BlueTeam, - TeamColor::RedTeam, - ]) - .to_owned(), - ) - .await?; - - manager - .create_type( - Type::create() - .as_enum(TeamState::Table) - .values([ - TeamState::Active, - TeamState::Unapproved, - TeamState::Approved, - TeamState::Banned, - ]) - .to_owned(), - ) - .await?; - - manager - .create_type( - Type::create() - .as_enum(UserState::Table) - .values([ - UserState::Active, - UserState::Registered, - UserState::Abandoned, - UserState::Banned, - ]) - .to_owned(), - ) - .await?; - - manager - .create_type( - Type::create() - .as_enum(UserGroupType::Table) - .values([ - UserGroupType::Host, - UserGroupType::Admin, - UserGroupType::Pooler, - UserGroupType::Streamer, - UserGroupType::Tester, - UserGroupType::Gfx, - UserGroupType::Sheeter, - UserGroupType::Commentator, - UserGroupType::Mapper, - UserGroupType::Referee, - UserGroupType::Player, - ]) - .to_owned(), - ) - .await?; - - manager - .create_type( - Type::create() - .as_enum(Season::Table) - .values([ - Season::S1, - Season::S2, - ]) - .to_owned(), - ) - .await?; - - manager - .create_type( - Type::create() - .as_enum(Category::Table) - .values([ - Category::Qua, - Category::Ro16, - Category::Qf, - Category::Sf, - Category::F, - Category::Gf, - ]) - .to_owned(), - ) - .await?; - - // 创建用户表 - manager - .create_table( - Table::create() - .table(User::Table) - .if_not_exists() - .col( - ColumnDef::new(User::Id) - .integer() - .not_null() - .auto_increment() - .primary_key(), - ) - .col(ColumnDef::new(User::UserState).custom(UserState::Table).not_null().default("ACTIVE")) - .col(ColumnDef::new(User::Osuid).integer().not_null().unique_key()) - .col(ColumnDef::new(User::Username).string().not_null().unique_key()) - .col(ColumnDef::new(User::AvatarUrl).string().null()) - .col(ColumnDef::new(User::CoverUrl).string().null()) - .col(ColumnDef::new(User::CountryCode).string().not_null()) - .col(ColumnDef::new(User::Pp).double().not_null().default(0.0)) - .col(ColumnDef::new(User::GlobalRank).integer().not_null().default(0)) - .col(ColumnDef::new(User::CountryRank).integer().not_null().default(0)) - .col(ColumnDef::new(User::Approved).boolean().not_null().default(false)) - .col(ColumnDef::new(User::Seed).integer().not_null().default(0)) - .col(ColumnDef::new(User::Seasonal).custom(Season::Table).not_null().default("S1")) - .col(ColumnDef::new(User::CreatedAt).timestamp().not_null().default(Expr::current_timestamp())) - .col(ColumnDef::new(User::UpdatedAt).timestamp().not_null().default(Expr::current_timestamp())) - .to_owned(), - ) - .await?; - - // 创建队伍表 - manager - .create_table( - Table::create() - .table(Team::Table) - .if_not_exists() - .col( - ColumnDef::new(Team::Id) - .integer() - .not_null() - .auto_increment() - .primary_key(), - ) - .col(ColumnDef::new(Team::Name).string().not_null()) - .col(ColumnDef::new(Team::BannerUrl).string().not_null()) - .col(ColumnDef::new(Team::TeamColor).custom(TeamColor::Table).not_null()) - .col(ColumnDef::new(Team::TeamState).custom(TeamState::Table).not_null().default("ACTIVE")) - .col(ColumnDef::new(Team::CreatedAt).timestamp().not_null().default(Expr::current_timestamp())) - .col(ColumnDef::new(Team::UpdatedAt).timestamp().not_null().default(Expr::current_timestamp())) - .to_owned(), - ) - .await?; - - // 创建比赛配置表 - manager - .create_table( - Table::create() - .table(TournamentConfig::Table) - .if_not_exists() - .col( - ColumnDef::new(TournamentConfig::Id) - .integer() - .not_null() - .auto_increment() - .primary_key(), - ) - .col(ColumnDef::new(TournamentConfig::TournamentName).string().not_null().default("AstarCup")) - .col(ColumnDef::new(TournamentConfig::MaxPpForRegistration).double().not_null().default(0.0)) - .col(ColumnDef::new(TournamentConfig::MinPpForRegistration).double().not_null().default(0.0)) - .col(ColumnDef::new(TournamentConfig::CurrentSeasonal).custom(Season::Table).not_null().default("S1")) - .col(ColumnDef::new(TournamentConfig::CurrentCategory).custom(Category::Table).not_null().default("QUA")) - .col(ColumnDef::new(TournamentConfig::CanRegister).boolean().not_null().default(false)) - .col(ColumnDef::new(TournamentConfig::CreatedAt).timestamp().not_null().default(Expr::current_timestamp())) - .col(ColumnDef::new(TournamentConfig::UpdatedAt).timestamp().not_null().default(Expr::current_timestamp())) - .to_owned(), - ) - .await?; - - // 创建多人游戏房间表 - manager - .create_table( - Table::create() - .table(MultiplayerRoom::Table) - .if_not_exists() - .col( - ColumnDef::new(MultiplayerRoom::RoomId) - .integer() - .not_null() - .auto_increment() - .primary_key(), - ) - .col(ColumnDef::new(MultiplayerRoom::Type).custom(MultiplayerRoomType::Table).not_null().default("SOLO")) - .col(ColumnDef::new(MultiplayerRoom::Season).custom(Season::Table).not_null().default("S1")) - .col(ColumnDef::new(MultiplayerRoom::Category).custom(Category::Table).not_null().default("QUA")) - .col(ColumnDef::new(MultiplayerRoom::MultiplayerSoloRoomRoomId).integer().null()) - .col(ColumnDef::new(MultiplayerRoom::MultiplayerTeamvsRoomRoomId).integer().null()) - .col(ColumnDef::new(MultiplayerRoom::ScoreRed).integer().not_null().default(0)) - .col(ColumnDef::new(MultiplayerRoom::ScoreBlue).integer().not_null().default(0)) - .col(ColumnDef::new(MultiplayerRoom::StartTime).timestamp().not_null()) - .col(ColumnDef::new(MultiplayerRoom::EndTime).timestamp().not_null()) - .col(ColumnDef::new(MultiplayerRoom::CreatedAt).timestamp().not_null().default(Expr::current_timestamp())) - .col(ColumnDef::new(MultiplayerRoom::UpdatedAt).timestamp().not_null().default(Expr::current_timestamp())) - .to_owned(), - ) - .await?; - - // 创建单人游戏房间表 - manager - .create_table( - Table::create() - .table(MultiplayerSoloRoom::Table) - .if_not_exists() - .col( - ColumnDef::new(MultiplayerSoloRoom::RoomId) - .integer() - .not_null() - .auto_increment() - .primary_key(), - ) - .col(ColumnDef::new(MultiplayerSoloRoom::PlayerRedId).integer().not_null().unique_key()) - .col(ColumnDef::new(MultiplayerSoloRoom::PlayerBlueId).integer().not_null().unique_key()) - .to_owned(), - ) - .await?; - - // 创建团队对战房间表 - manager - .create_table( - Table::create() - .table(MultiplayerTeamvsRoom::Table) - .if_not_exists() - .col( - ColumnDef::new(MultiplayerTeamvsRoom::RoomId) - .integer() - .not_null() - .auto_increment() - .primary_key(), - ) - .col(ColumnDef::new(MultiplayerTeamvsRoom::TeamRedId).integer().not_null().unique_key()) - .col(ColumnDef::new(MultiplayerTeamvsRoom::TeamBlueId).integer().not_null().unique_key()) - .to_owned(), - ) - .await?; - - // 创建消息表 - manager - .create_table( - Table::create() - .table(Message::Table) - .if_not_exists() - .col( - ColumnDef::new(Message::Id) - .integer() - .not_null() - .auto_increment() - .primary_key(), - ) - .col(ColumnDef::new(Message::Title).string().not_null()) - .col(ColumnDef::new(Message::Content).text().not_null()) - .col(ColumnDef::new(Message::SenderId).integer().not_null()) - .col(ColumnDef::new(Message::ReceiverId).integer().not_null()) - .col(ColumnDef::new(Message::RoomId).integer().null()) - .col(ColumnDef::new(Message::IsRead).boolean().not_null().default(false)) - .col(ColumnDef::new(Message::IsDeleted).boolean().not_null().default(false)) - .col(ColumnDef::new(Message::IsSystemMessage).boolean().not_null().default(false)) - .col(ColumnDef::new(Message::IsAccepted).boolean().not_null().default(false)) - .col(ColumnDef::new(Message::CreatedAt).timestamp().not_null().default(Expr::current_timestamp())) - .col(ColumnDef::new(Message::UpdatedAt).timestamp().not_null().default(Expr::current_timestamp())) - .to_owned(), - ) - .await?; - - // 创建外键约束 - manager - .create_foreign_key( - ForeignKey::create() - .name("fk_multiplayer_room_solo_room") - .from(MultiplayerRoom::Table, MultiplayerRoom::MultiplayerSoloRoomRoomId) - .to(MultiplayerSoloRoom::Table, MultiplayerSoloRoom::RoomId) - .on_delete(ForeignKeyAction::SetNull) - .on_update(ForeignKeyAction::Cascade) - .to_owned(), - ) - .await?; - - manager - .create_foreign_key( - ForeignKey::create() - .name("fk_multiplayer_room_teamvs_room") - .from(MultiplayerRoom::Table, MultiplayerRoom::MultiplayerTeamvsRoomRoomId) - .to(MultiplayerTeamvsRoom::Table, MultiplayerTeamvsRoom::RoomId) - .on_delete(ForeignKeyAction::SetNull) - .on_update(ForeignKeyAction::Cascade) - .to_owned(), - ) - .await?; - - manager - .create_foreign_key( - ForeignKey::create() - .name("fk_multiplayer_solo_room_player_red") - .from(MultiplayerSoloRoom::Table, MultiplayerSoloRoom::PlayerRedId) - .to(User::Table, User::Osuid) - .on_delete(ForeignKeyAction::Restrict) - .on_update(ForeignKeyAction::Cascade) - .to_owned(), - ) - .await?; - - manager - .create_foreign_key( - ForeignKey::create() - .name("fk_multiplayer_solo_room_player_blue") - .from(MultiplayerSoloRoom::Table, MultiplayerSoloRoom::PlayerBlueId) - .to(User::Table, User::Osuid) - .on_delete(ForeignKeyAction::Restrict) - .on_update(ForeignKeyAction::Cascade) - .to_owned(), - ) - .await?; - - manager - .create_foreign_key( - ForeignKey::create() - .name("fk_multiplayer_teamvs_room_team_red") - .from(MultiplayerTeamvsRoom::Table, MultiplayerTeamvsRoom::TeamRedId) - .to(Team::Table, Team::Id) - .on_delete(ForeignKeyAction::Restrict) - .on_update(ForeignKeyAction::Cascade) - .to_owned(), - ) - .await?; - - manager - .create_foreign_key( - ForeignKey::create() - .name("fk_multiplayer_teamvs_room_team_blue") - .from(MultiplayerTeamvsRoom::Table, MultiplayerTeamvsRoom::TeamBlueId) - .to(Team::Table, Team::Id) - .on_delete(ForeignKeyAction::Restrict) - .on_update(ForeignKeyAction::Cascade) - .to_owned(), - ) - .await?; - - manager - .create_foreign_key( - ForeignKey::create() - .name("fk_message_sender") - .from(Message::Table, Message::SenderId) - .to(User::Table, User::Osuid) - .on_delete(ForeignKeyAction::Restrict) - .on_update(ForeignKeyAction::Cascade) - .to_owned(), - ) - .await?; - - manager - .create_foreign_key( - ForeignKey::create() - .name("fk_message_receiver") - .from(Message::Table, Message::ReceiverId) - .to(User::Table, User::Osuid) - .on_delete(ForeignKeyAction::Restrict) - .on_update(ForeignKeyAction::Cascade) - .to_owned(), - ) - .await?; - - manager - .create_foreign_key( - ForeignKey::create() - .name("fk_message_room") - .from(Message::Table, Message::RoomId) - .to(MultiplayerRoom::Table, MultiplayerRoom::RoomId) - .on_delete(ForeignKeyAction::SetNull) - .on_update(ForeignKeyAction::Cascade) - .to_owned(), - ) - .await?; - - Ok(()) - } - - async fn down(&self, manager: &SchemaManager) -> Result<(), DbErr> { - // 删除外键约束 - manager - .drop_foreign_key( - ForeignKey::drop() - .name("fk_message_room") - .table(Message::Table) - .to_owned(), - ) - .await?; - - manager - .drop_foreign_key( - ForeignKey::drop() - .name("fk_message_receiver") - .table(Message::Table) - .to_owned(), - ) - .await?; - - manager - .drop_foreign_key( - ForeignKey::drop() - .name("fk_message_sender") - .table(Message::Table) - .to_owned(), - ) - .await?; - - manager - .drop_foreign_key( - ForeignKey::drop() - .name("fk_multiplayer_teamvs_room_team_blue") - .table(MultiplayerTeamvsRoom::Table) - .to_owned(), - ) - .await?; - - manager - .drop_foreign_key( - ForeignKey::drop() - .name("fk_multiplayer_teamvs_room_team_red") - .table(MultiplayerTeamvsRoom::Table) - .to_owned(), - ) - .await?; - - manager - .drop_foreign_key( - ForeignKey::drop() - .name("fk_multiplayer_solo_room_player_blue") - .table(MultiplayerSoloRoom::Table) - .to_owned(), - ) - .await?; - - manager - .drop_foreign_key( - ForeignKey::drop() - .name("fk_multiplayer_solo_room_player_red") - .table(MultiplayerSoloRoom::Table) - .to_owned(), - ) - .await?; - - manager - .drop_foreign_key( - ForeignKey::drop() - .name("fk_multiplayer_room_teamvs_room") - .table(MultiplayerRoom::Table) - .to_owned(), - ) - .await?; - - manager - .drop_foreign_key( - ForeignKey::drop() - .name("fk_multiplayer_room_solo_room") - .table(MultiplayerRoom::Table) - .to_owned(), - ) - .await?; - - // 删除表 - manager - .drop_table(Table::drop().table(Message::Table).to_owned()) - .await?; - - manager - .drop_table(Table::drop().table(MultiplayerTeamvsRoom::Table).to_owned()) - .await?; - - manager - .drop_table(Table::drop().table(MultiplayerSoloRoom::Table).to_owned()) - .await?; - - manager - .drop_table(Table::drop().table(MultiplayerRoom::Table).to_owned()) - .await?; - - manager - .drop_table(Table::drop().table(TournamentConfig::Table).to_owned()) - .await?; - - manager - .drop_table(Table::drop().table(Team::Table).to_owned()) - .await?; - - manager - .drop_table(Table::drop().table(User::Table).to_owned()) - .await?; - - // 删除枚举类型 - manager - .drop_type(Type::drop().name(Category::Table).to_owned()) - .await?; - - manager - .drop_type(Type::drop().name(Season::Table).to_owned()) - .await?; - - manager - .drop_type(Type::drop().name(UserGroupType::Table).to_owned()) - .await?; - - manager - .drop_type(Type::drop().name(UserState::Table).to_owned()) - .await?; - - manager - .drop_type(Type::drop().name(TeamState::Table).to_owned()) - .await?; - - manager - .drop_type(Type::drop().name(TeamColor::Table).to_owned()) - .await?; - - manager - .drop_type(Type::drop().name(MultiplayerRoomType::Table).to_owned()) - .await?; - - manager - .drop_type(Type::drop().name(BeatmapSelectMod::Table).to_owned()) - .await?; - - Ok(()) - } -} - -// 定义表名枚举 -#[derive(Iden)] -enum User { - Table, - Id, - UserState, - Osuid, - Username, - AvatarUrl, - CoverUrl, - CountryCode, - Pp, - GlobalRank, - CountryRank, - Approved, - Seed, - Seasonal, - CreatedAt, - UpdatedAt, -} - -#[derive(Iden)] -enum Team { - Table, - Id, - Name, - BannerUrl, - TeamColor, - TeamState, - CreatedAt, - UpdatedAt, -} - -#[derive(Iden)] -enum TournamentConfig { - Table, - Id, - TournamentName, - MaxPpForRegistration, - MinPpForRegistration, - CurrentSeasonal, - CurrentCategory, - CanRegister, - CreatedAt, - UpdatedAt, -} - -#[derive(Iden)] -enum MultiplayerRoom { - Table, - RoomId, - Type, - Season, - Category, - MultiplayerSoloRoomRoomId, - MultiplayerTeamvsRoomRoomId, - ScoreRed, - ScoreBlue, - StartTime, - EndTime, - CreatedAt, - UpdatedAt, -} - -#[derive(Iden)] -enum MultiplayerSoloRoom { - Table, - RoomId, - PlayerRedId, - PlayerBlueId, -} - -#[derive(Iden)] -enum MultiplayerTeamvsRoom { - Table, - RoomId, - TeamRedId, - TeamBlueId, -} - -#[derive(Iden)] -enum Message { - Table, - Id, - Title, - Content, - SenderId, - ReceiverId, - RoomId, - IsRead, - IsDeleted, - IsSystemMessage, - IsAccepted, - CreatedAt, - UpdatedAt, -} - -// 定义枚举类型名 -#[derive(Iden)] -enum BeatmapSelectMod { - Table, - Nm, - Hd, - Hr, - Dt, - Lz, - Tb, -} - -#[derive(Iden)] -enum MultiplayerRoomType { - Table, - Solo, - TeamVs, -} - -#[derive(Iden)] -enum TeamColor { - Table, - BlueTeam, - RedTeam, -} - -#[derive(Iden)] -enum TeamState { - Table, - Active, - Unapproved, - Approved, - Banned, -} - -#[derive(Iden)] -enum UserState { - Table, - Active, - Registered, - Abandoned, - Banned, -} - -#[derive(Iden)] -enum UserGroupType { - Table, - Host, - Admin, - Pooler, - Streamer, - Tester, - Gfx, - Sheeter, - Commentator, - Mapper, - Referee, - Player, -} - -#[derive(Iden)] -enum Season { - Table, - S1, - S2, -} - -#[derive(Iden)] -enum Category { - Table, - Qua, - Ro16, - Qf, - Sf, - F, - Gf, -}