This commit is contained in:
2026-02-11 13:56:51 +08:00
parent 8515ee9399
commit 05b990b093
4 changed files with 393 additions and 917 deletions

321
Cargo.lock generated
View File

@@ -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"

View File

@@ -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"] }

View File

@@ -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> {

View File

@@ -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,
}