add graphql support
This commit is contained in:
parent
d1ab9ae173
commit
ce66c16185
9 changed files with 919 additions and 77 deletions
528
Cargo.lock
generated
528
Cargo.lock
generated
|
@ -37,16 +37,34 @@ dependencies = [
|
||||||
"subtle",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "android_system_properties"
|
||||||
|
version = "0.1.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "819e7219dbd41043ac279b19830f2efc897156490d7fd6ea916720117ee66311"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "api"
|
name = "api"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"juniper",
|
||||||
|
"juniper_rocket",
|
||||||
|
"once_cell",
|
||||||
"rocket",
|
"rocket",
|
||||||
"rocket_db_pools",
|
"rocket_db_pools",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "ascii"
|
||||||
|
version = "0.9.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "eab1c04a571841102f5345a8fc0f6bb3d31c315dec879b5c6e42e40ce7ffa34e"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "async-stream"
|
name = "async-stream"
|
||||||
version = "0.3.3"
|
version = "0.3.3"
|
||||||
|
@ -132,6 +150,29 @@ dependencies = [
|
||||||
"generic-array",
|
"generic-array",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bson"
|
||||||
|
version = "1.2.4"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "de0aa578035b938855a710ba58d43cfb4d435f3619f99236fb35922a574d6cb1"
|
||||||
|
dependencies = [
|
||||||
|
"base64",
|
||||||
|
"chrono",
|
||||||
|
"hex",
|
||||||
|
"lazy_static",
|
||||||
|
"linked-hash-map",
|
||||||
|
"rand 0.7.3",
|
||||||
|
"serde",
|
||||||
|
"serde_json",
|
||||||
|
"uuid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "bumpalo"
|
||||||
|
version = "3.11.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "572f695136211188308f16ad2ca5c851a712c464060ae6974944458eb83880ba"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "byteorder"
|
name = "byteorder"
|
||||||
version = "1.4.3"
|
version = "1.4.3"
|
||||||
|
@ -156,6 +197,21 @@ version = "1.0.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
checksum = "baf1de4339761588bc0619e3cbc0120ee582ebb74b53b4efbf79117bd2da40fd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "chrono"
|
||||||
|
version = "0.4.23"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "16b0a3d9ed01224b22057780a37bb8c5dbfe1be8ba48678e7bf57ec4b385411f"
|
||||||
|
dependencies = [
|
||||||
|
"iana-time-zone",
|
||||||
|
"js-sys",
|
||||||
|
"num-integer",
|
||||||
|
"num-traits",
|
||||||
|
"time 0.1.44",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "cipher"
|
name = "cipher"
|
||||||
version = "0.4.3"
|
version = "0.4.3"
|
||||||
|
@ -166,6 +222,29 @@ dependencies = [
|
||||||
"inout",
|
"inout",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "codespan-reporting"
|
||||||
|
version = "0.11.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3538270d33cc669650c4b093848450d380def10c331d38c768e34cac80576e6e"
|
||||||
|
dependencies = [
|
||||||
|
"termcolor",
|
||||||
|
"unicode-width",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "combine"
|
||||||
|
version = "3.8.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "da3da6baa321ec19e1cc41d31bf599f00c783d0517095cdaf0332e3fe8d20680"
|
||||||
|
dependencies = [
|
||||||
|
"ascii",
|
||||||
|
"byteorder",
|
||||||
|
"either",
|
||||||
|
"memchr",
|
||||||
|
"unreachable",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "combine"
|
name = "combine"
|
||||||
version = "4.6.6"
|
version = "4.6.6"
|
||||||
|
@ -191,10 +270,10 @@ dependencies = [
|
||||||
"hkdf",
|
"hkdf",
|
||||||
"hmac",
|
"hmac",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"rand",
|
"rand 0.8.5",
|
||||||
"sha2",
|
"sha2",
|
||||||
"subtle",
|
"subtle",
|
||||||
"time",
|
"time 0.3.17",
|
||||||
"version_check",
|
"version_check",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -230,7 +309,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
checksum = "1bfb12502f3fc46cca1bb51ac28df9d618d813cdc3d2f25b9fe775a34af26bb3"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array",
|
"generic-array",
|
||||||
"rand_core",
|
"rand_core 0.6.4",
|
||||||
"typenum",
|
"typenum",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -243,6 +322,50 @@ dependencies = [
|
||||||
"cipher",
|
"cipher",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cxx"
|
||||||
|
version = "1.0.82"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d4a41a86530d0fe7f5d9ea779916b7cadd2d4f9add748b99c2c029cbbdfaf453"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
"cxxbridge-flags",
|
||||||
|
"cxxbridge-macro",
|
||||||
|
"link-cplusplus",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cxx-build"
|
||||||
|
version = "1.0.82"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "06416d667ff3e3ad2df1cd8cd8afae5da26cf9cec4d0825040f88b5ca659a2f0"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
"codespan-reporting",
|
||||||
|
"once_cell",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"scratch",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cxxbridge-flags"
|
||||||
|
version = "1.0.82"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "820a9a2af1669deeef27cb271f476ffd196a2c4b6731336011e0ba63e2c7cf71"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "cxxbridge-macro"
|
||||||
|
version = "1.0.82"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a08a6e2fcc370a089ad3b4aaf54db3b1b4cee38ddabce5896b33eb693275f470"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "deadpool"
|
name = "deadpool"
|
||||||
version = "0.9.5"
|
version = "0.9.5"
|
||||||
|
@ -275,6 +398,17 @@ dependencies = [
|
||||||
"tokio",
|
"tokio",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "derive_utils"
|
||||||
|
version = "0.11.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "532b4c15dccee12c7044f1fcad956e98410860b22231e44a3b827464797ca7bf"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "devise"
|
name = "devise"
|
||||||
version = "0.3.1"
|
version = "0.3.1"
|
||||||
|
@ -418,6 +552,17 @@ version = "0.3.25"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
|
checksum = "04909a7a7e4633ae6c4a9ab280aeb86da1236243a77b694a49eacd659a4bd3ac"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "futures-enum"
|
||||||
|
version = "0.1.17"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "3422d14de7903a52e9dbc10ae05a7e14445ec61890100e098754e120b2bd7b1e"
|
||||||
|
dependencies = [
|
||||||
|
"derive_utils",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "futures-executor"
|
name = "futures-executor"
|
||||||
version = "0.3.25"
|
version = "0.3.25"
|
||||||
|
@ -499,6 +644,17 @@ dependencies = [
|
||||||
"version_check",
|
"version_check",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "getrandom"
|
||||||
|
version = "0.1.16"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "8fc3cb4d91f53b50155bdcfd23f6a4c39ae1969c2ae85982b135750cccaf5fce"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"libc",
|
||||||
|
"wasi 0.9.0+wasi-snapshot-preview1",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "getrandom"
|
name = "getrandom"
|
||||||
version = "0.2.8"
|
version = "0.2.8"
|
||||||
|
@ -507,7 +663,7 @@ checksum = "c05aeb6a22b8f62540c194aac980f2115af067bfe15a0734d7277a768d396b31"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"cfg-if",
|
"cfg-if",
|
||||||
"libc",
|
"libc",
|
||||||
"wasi",
|
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -526,6 +682,16 @@ version = "0.3.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
checksum = "9b919933a397b79c37e33b77bb2aa3dc8eb6e165ad809e58ff75bc7db2e34574"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "graphql-parser"
|
||||||
|
version = "0.3.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "d1abd4ce5247dfc04a03ccde70f87a048458c9356c7e41d21ad8c407b3dde6f2"
|
||||||
|
dependencies = [
|
||||||
|
"combine 3.8.1",
|
||||||
|
"thiserror",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "h2"
|
name = "h2"
|
||||||
version = "0.3.15"
|
version = "0.3.15"
|
||||||
|
@ -560,6 +726,12 @@ dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "hex"
|
||||||
|
version = "0.4.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "7f24254aa9a54b5c858eaee2f5bccdb46aaf0e486a595ed5fd8f86ba55232a70"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "hkdf"
|
name = "hkdf"
|
||||||
version = "0.12.3"
|
version = "0.12.3"
|
||||||
|
@ -636,6 +808,30 @@ dependencies = [
|
||||||
"want",
|
"want",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "iana-time-zone"
|
||||||
|
version = "0.1.53"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "64c122667b287044802d6ce17ee2ddf13207ed924c712de9a66a5814d5b64765"
|
||||||
|
dependencies = [
|
||||||
|
"android_system_properties",
|
||||||
|
"core-foundation-sys",
|
||||||
|
"iana-time-zone-haiku",
|
||||||
|
"js-sys",
|
||||||
|
"wasm-bindgen",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "iana-time-zone-haiku"
|
||||||
|
version = "0.1.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0703ae284fc167426161c2e3f1da3ea71d94b21bedbcc9494e92b28e334e3dca"
|
||||||
|
dependencies = [
|
||||||
|
"cxx",
|
||||||
|
"cxx-build",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "idna"
|
name = "idna"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
|
@ -687,6 +883,61 @@ version = "1.0.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
|
checksum = "4217ad341ebadf8d8e724e264f13e593e0648f5b3e94b3896a5df283be015ecc"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "js-sys"
|
||||||
|
version = "0.3.60"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "49409df3e3bf0856b916e2ceaca09ee28e6871cf7d9ce97a692cacfdb2a25a47"
|
||||||
|
dependencies = [
|
||||||
|
"wasm-bindgen",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "juniper"
|
||||||
|
version = "0.15.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4f478f229a8ab52ff242f3250c8b3b8fe0a59b5b934f9706b7bdbc980991a7b6"
|
||||||
|
dependencies = [
|
||||||
|
"async-trait",
|
||||||
|
"bson",
|
||||||
|
"chrono",
|
||||||
|
"fnv",
|
||||||
|
"futures",
|
||||||
|
"futures-enum",
|
||||||
|
"graphql-parser",
|
||||||
|
"indexmap",
|
||||||
|
"juniper_codegen",
|
||||||
|
"serde",
|
||||||
|
"smartstring",
|
||||||
|
"static_assertions",
|
||||||
|
"url",
|
||||||
|
"uuid",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "juniper_codegen"
|
||||||
|
version = "0.15.9"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "aee97671061ad50301ba077d054d295e01d31a1868fbd07902db651f987e71db"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro-error",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "juniper_rocket"
|
||||||
|
version = "0.8.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a431e6f03bc31bd74498a837e87ddf635deef3c1a2026e59680dec2552c84c28"
|
||||||
|
dependencies = [
|
||||||
|
"futures",
|
||||||
|
"juniper",
|
||||||
|
"rocket",
|
||||||
|
"serde_json",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lazy_static"
|
name = "lazy_static"
|
||||||
version = "1.4.0"
|
version = "1.4.0"
|
||||||
|
@ -699,6 +950,21 @@ version = "0.2.137"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
|
checksum = "fc7fcc620a3bff7cdd7a365be3376c97191aeaccc2a603e600951e452615bf89"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "link-cplusplus"
|
||||||
|
version = "1.0.7"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9272ab7b96c9046fbc5bc56c06c117cb639fe2d509df0c421cad82d2915cf369"
|
||||||
|
dependencies = [
|
||||||
|
"cc",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "linked-hash-map"
|
||||||
|
version = "0.5.6"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "0717cef1bc8b636c6e1c1bbdefc09e6322da8a9321966e8928ef80d20f7f770f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "lock_api"
|
name = "lock_api"
|
||||||
version = "0.4.9"
|
version = "0.4.9"
|
||||||
|
@ -762,7 +1028,7 @@ checksum = "e5d732bc30207a6423068df043e3d02e0735b155ad7ce1a6f76fe2baa5b158de"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"log",
|
"log",
|
||||||
"wasi",
|
"wasi 0.11.0+wasi-snapshot-preview1",
|
||||||
"windows-sys 0.42.0",
|
"windows-sys 0.42.0",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
@ -814,6 +1080,25 @@ dependencies = [
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-integer"
|
||||||
|
version = "0.1.45"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "225d3389fb3509a24c93f5c29eb6bde2586b98d9f016636dff58d7c6f7569cd9"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
"num-traits",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "num-traits"
|
||||||
|
version = "0.2.15"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "578ede34cf02f8924ab9447f50c28075b4d3e5b269972345e7e0372b38c6cdcd"
|
||||||
|
dependencies = [
|
||||||
|
"autocfg",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num_cpus"
|
name = "num_cpus"
|
||||||
version = "1.14.0"
|
version = "1.14.0"
|
||||||
|
@ -975,6 +1260,30 @@ version = "0.2.17"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
checksum = "5b40af805b3121feab8a3c29f04d8ad262fa8e0561883e7653e024ae4479e6de"
|
||||||
|
|
||||||
|
[[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",
|
||||||
|
"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]]
|
[[package]]
|
||||||
name = "proc-macro2"
|
name = "proc-macro2"
|
||||||
version = "1.0.47"
|
version = "1.0.47"
|
||||||
|
@ -1017,6 +1326,19 @@ dependencies = [
|
||||||
"scheduled-thread-pool",
|
"scheduled-thread-pool",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand"
|
||||||
|
version = "0.7.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6a6b1679d49b24bbfe0c803429aa1874472f50d9b363131f0e89fc356b544d03"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom 0.1.16",
|
||||||
|
"libc",
|
||||||
|
"rand_chacha 0.2.2",
|
||||||
|
"rand_core 0.5.1",
|
||||||
|
"rand_hc",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "rand"
|
name = "rand"
|
||||||
version = "0.8.5"
|
version = "0.8.5"
|
||||||
|
@ -1024,8 +1346,18 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
checksum = "34af8d1a0e25924bc5b7c43c079c942339d8f0a8b57c39049bef581b46327404"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"libc",
|
"libc",
|
||||||
"rand_chacha",
|
"rand_chacha 0.3.1",
|
||||||
"rand_core",
|
"rand_core 0.6.4",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_chacha"
|
||||||
|
version = "0.2.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "f4c8ed856279c9737206bf725bf36935d8666ead7aa69b52be55af369d193402"
|
||||||
|
dependencies = [
|
||||||
|
"ppv-lite86",
|
||||||
|
"rand_core 0.5.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1035,7 +1367,16 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
checksum = "e6c10a63a0fa32252be49d21e7709d4d4baf8d231c2dbce1eaa8141b9b127d88"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"ppv-lite86",
|
"ppv-lite86",
|
||||||
"rand_core",
|
"rand_core 0.6.4",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_core"
|
||||||
|
version = "0.5.1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "90bde5296fc891b0cef12a6d03ddccc162ce7b2aff54160af9338f8d40df6d19"
|
||||||
|
dependencies = [
|
||||||
|
"getrandom 0.1.16",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1044,7 +1385,16 @@ version = "0.6.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
checksum = "ec0be4795e2f6a28069bec0b5ff3e2ac9bafc99e6a9a7dc3547996c5c816922c"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"getrandom",
|
"getrandom 0.2.8",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "rand_hc"
|
||||||
|
version = "0.2.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "ca3129af7b92a17112d59ad498c6f81eaf463253766b90396d39ea7a39d6613c"
|
||||||
|
dependencies = [
|
||||||
|
"rand_core 0.5.1",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
|
@ -1055,7 +1405,7 @@ checksum = "571c252c68d09a2ad3e49edd14e9ee48932f3e0f27b06b4ea4c9b2a706d31103"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-trait",
|
"async-trait",
|
||||||
"bytes",
|
"bytes",
|
||||||
"combine",
|
"combine 4.6.6",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"itoa",
|
"itoa",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
|
@ -1072,7 +1422,7 @@ version = "0.22.1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "513b3649f1a111c17954296e4a3b9eecb108b766c803e2b99f179ebe27005985"
|
checksum = "513b3649f1a111c17954296e4a3b9eecb108b766c803e2b99f179ebe27005985"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"combine",
|
"combine 4.6.6",
|
||||||
"itoa",
|
"itoa",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"r2d2",
|
"r2d2",
|
||||||
|
@ -1180,7 +1530,7 @@ dependencies = [
|
||||||
"num_cpus",
|
"num_cpus",
|
||||||
"parking_lot",
|
"parking_lot",
|
||||||
"pin-project-lite",
|
"pin-project-lite",
|
||||||
"rand",
|
"rand 0.8.5",
|
||||||
"ref-cast",
|
"ref-cast",
|
||||||
"rocket_codegen",
|
"rocket_codegen",
|
||||||
"rocket_http",
|
"rocket_http",
|
||||||
|
@ -1188,7 +1538,7 @@ dependencies = [
|
||||||
"serde_json",
|
"serde_json",
|
||||||
"state",
|
"state",
|
||||||
"tempfile",
|
"tempfile",
|
||||||
"time",
|
"time 0.3.17",
|
||||||
"tokio",
|
"tokio",
|
||||||
"tokio-stream",
|
"tokio-stream",
|
||||||
"tokio-util",
|
"tokio-util",
|
||||||
|
@ -1258,7 +1608,7 @@ dependencies = [
|
||||||
"smallvec",
|
"smallvec",
|
||||||
"stable-pattern",
|
"stable-pattern",
|
||||||
"state",
|
"state",
|
||||||
"time",
|
"time 0.3.17",
|
||||||
"tokio",
|
"tokio",
|
||||||
"uncased",
|
"uncased",
|
||||||
]
|
]
|
||||||
|
@ -1306,6 +1656,12 @@ version = "1.1.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
checksum = "d29ab0c6d3fc0ee92fe66e2d99f700eab17a8d57d1c1d3b748380fb20baa78cd"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "scratch"
|
||||||
|
version = "1.0.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "9c8132065adcfd6e02db789d9285a0deb2f3fcb04002865ab67d5fb103533898"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "security-framework"
|
name = "security-framework"
|
||||||
version = "2.7.0"
|
version = "2.7.0"
|
||||||
|
@ -1351,10 +1707,11 @@ dependencies = [
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.88"
|
version = "1.0.89"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "8e8b3801309262e8184d9687fb697586833e939767aea0dda89f5a8e650e8bd7"
|
checksum = "020ff22c755c2ed3f8cf162dbb41a7268d934702f3ed3631656ea597e08fc3db"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
|
"indexmap",
|
||||||
"itoa",
|
"itoa",
|
||||||
"ryu",
|
"ryu",
|
||||||
"serde",
|
"serde",
|
||||||
|
@ -1421,6 +1778,15 @@ version = "1.10.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
|
checksum = "a507befe795404456341dfab10cef66ead4c041f62b8b11bbb92bffe5d0953e0"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "smartstring"
|
||||||
|
version = "0.2.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "e714dff2b33f2321fdcd475b71cec79781a692d846f37f415fb395a1d2bcd48e"
|
||||||
|
dependencies = [
|
||||||
|
"static_assertions",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "socket2"
|
name = "socket2"
|
||||||
version = "0.4.7"
|
version = "0.4.7"
|
||||||
|
@ -1455,6 +1821,12 @@ dependencies = [
|
||||||
"loom",
|
"loom",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "static_assertions"
|
||||||
|
version = "1.1.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "a2eb9349b6444b326872e140eb1cf5e7c522154d69e7a0ffb0fb81c06b37543f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "subtle"
|
name = "subtle"
|
||||||
version = "2.4.1"
|
version = "2.4.1"
|
||||||
|
@ -1494,6 +1866,15 @@ dependencies = [
|
||||||
"winapi",
|
"winapi",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "termcolor"
|
||||||
|
version = "1.1.3"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bab24d30b911b2376f3a13cc2cd443142f0c81dda04c118693e35b3835757755"
|
||||||
|
dependencies = [
|
||||||
|
"winapi-util",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "thiserror"
|
name = "thiserror"
|
||||||
version = "1.0.37"
|
version = "1.0.37"
|
||||||
|
@ -1523,6 +1904,17 @@ dependencies = [
|
||||||
"once_cell",
|
"once_cell",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "time"
|
||||||
|
version = "0.1.44"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6db9e6914ab8b1ae1c260a4ae7a49b6c5611b40328a735b21862567685e73255"
|
||||||
|
dependencies = [
|
||||||
|
"libc",
|
||||||
|
"wasi 0.10.0+wasi-snapshot-preview1",
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "time"
|
name = "time"
|
||||||
version = "0.3.17"
|
version = "0.3.17"
|
||||||
|
@ -1740,7 +2132,7 @@ dependencies = [
|
||||||
"httparse",
|
"httparse",
|
||||||
"log",
|
"log",
|
||||||
"native-tls",
|
"native-tls",
|
||||||
"rand",
|
"rand 0.8.5",
|
||||||
"sha-1",
|
"sha-1",
|
||||||
"thiserror",
|
"thiserror",
|
||||||
"url",
|
"url",
|
||||||
|
@ -1793,6 +2185,12 @@ dependencies = [
|
||||||
"tinyvec",
|
"tinyvec",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unicode-width"
|
||||||
|
version = "0.1.10"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "c0edd1e5b14653f783770bce4a4dabb4a5108a5370a5f5d8cfe8710c361f6c8b"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "unicode-xid"
|
name = "unicode-xid"
|
||||||
version = "0.2.4"
|
version = "0.2.4"
|
||||||
|
@ -1809,6 +2207,15 @@ dependencies = [
|
||||||
"subtle",
|
"subtle",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "unreachable"
|
||||||
|
version = "1.0.0"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "382810877fe448991dfc7f0dd6e3ae5d58088fd0ea5e35189655f84e6814fa56"
|
||||||
|
dependencies = [
|
||||||
|
"void",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "url"
|
name = "url"
|
||||||
version = "2.3.1"
|
version = "2.3.1"
|
||||||
|
@ -1826,6 +2233,12 @@ version = "0.7.6"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
|
checksum = "09cc8ee72d2a9becf2f2febe0205bbed8fc6615b7cb429ad062dc7b7ddd036a9"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "uuid"
|
||||||
|
version = "0.8.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "bc5cf98d8186244414c848017f0e2676b3fcb46807f6668a97dfe67359a3c4b7"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "valuable"
|
name = "valuable"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
@ -1844,6 +2257,12 @@ version = "0.9.4"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
checksum = "49874b5167b65d7193b8aba1567f5c7d93d001cafc34600cee003eda787e483f"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "void"
|
||||||
|
version = "1.0.2"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "6a02e4885ed3bc0f2de90ea6dd45ebcbb66dacffe03547fadbb0eeae2770887d"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "want"
|
name = "want"
|
||||||
version = "0.3.0"
|
version = "0.3.0"
|
||||||
|
@ -1854,12 +2273,78 @@ dependencies = [
|
||||||
"try-lock",
|
"try-lock",
|
||||||
]
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasi"
|
||||||
|
version = "0.9.0+wasi-snapshot-preview1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "cccddf32554fecc6acb585f82a32a72e28b48f8c4c1883ddfeeeaa96f7d8e519"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasi"
|
||||||
|
version = "0.10.0+wasi-snapshot-preview1"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1a143597ca7c7793eff794def352d41792a93c481eb1042423ff7ff72ba2c31f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "wasi"
|
name = "wasi"
|
||||||
version = "0.11.0+wasi-snapshot-preview1"
|
version = "0.11.0+wasi-snapshot-preview1"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
checksum = "9c8d87e72b64a3b4db28d11ce29237c246188f4f51057d65a7eab63b7987e423"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen"
|
||||||
|
version = "0.2.83"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "eaf9f5aceeec8be17c128b2e93e031fb8a4d469bb9c4ae2d7dc1888b26887268"
|
||||||
|
dependencies = [
|
||||||
|
"cfg-if",
|
||||||
|
"wasm-bindgen-macro",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-backend"
|
||||||
|
version = "0.2.83"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "4c8ffb332579b0557b52d268b91feab8df3615f265d5270fec2a8c95b17c1142"
|
||||||
|
dependencies = [
|
||||||
|
"bumpalo",
|
||||||
|
"log",
|
||||||
|
"once_cell",
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
"wasm-bindgen-shared",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-macro"
|
||||||
|
version = "0.2.83"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "052be0f94026e6cbc75cdefc9bae13fd6052cdcaf532fa6c45e7ae33a1e6c810"
|
||||||
|
dependencies = [
|
||||||
|
"quote",
|
||||||
|
"wasm-bindgen-macro-support",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-macro-support"
|
||||||
|
version = "0.2.83"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "07bc0c051dc5f23e307b13285f9d75df86bfdf816c5721e573dec1f9b8aa193c"
|
||||||
|
dependencies = [
|
||||||
|
"proc-macro2",
|
||||||
|
"quote",
|
||||||
|
"syn",
|
||||||
|
"wasm-bindgen-backend",
|
||||||
|
"wasm-bindgen-shared",
|
||||||
|
]
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "wasm-bindgen-shared"
|
||||||
|
version = "0.2.83"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "1c38c045535d93ec4f0b4defec448e4291638ee608530863b1e2ba115d4fff7f"
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "websocket"
|
name = "websocket"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
|
@ -1892,6 +2377,15 @@ version = "0.4.0"
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
checksum = "ac3b87c63620426dd9b991e5ce0329eff545bccbbb34f3be09ff6fb6ab51b7b6"
|
||||||
|
|
||||||
|
[[package]]
|
||||||
|
name = "winapi-util"
|
||||||
|
version = "0.1.5"
|
||||||
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
|
checksum = "70ec6ce85bb158151cae5e5c87f95a8e97d2c0c4b001223f33a334e3ce5de178"
|
||||||
|
dependencies = [
|
||||||
|
"winapi",
|
||||||
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "winapi-x86_64-pc-windows-gnu"
|
name = "winapi-x86_64-pc-windows-gnu"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
|
|
|
@ -9,4 +9,7 @@ edition = "2021"
|
||||||
rocket = { version = "0.5.0-rc.2", features = ["json"] }
|
rocket = { version = "0.5.0-rc.2", features = ["json"] }
|
||||||
rocket_db_pools = { version = "0.1.0-rc.2", features = [ "deadpool_redis" ] }
|
rocket_db_pools = { version = "0.1.0-rc.2", features = [ "deadpool_redis" ] }
|
||||||
serde_json = "1.0.88"
|
serde_json = "1.0.88"
|
||||||
serde = "1.0.147"
|
serde = "1.0.147"
|
||||||
|
juniper = "0.15.10"
|
||||||
|
juniper_rocket = "0.8.2"
|
||||||
|
once_cell = "1.16.0"
|
|
@ -1,3 +1,4 @@
|
||||||
|
use crate::redispool::RedisPool;
|
||||||
use core::time;
|
use core::time;
|
||||||
use rocket_db_pools::deadpool_redis::redis::{pipe, AsyncCommands};
|
use rocket_db_pools::deadpool_redis::redis::{pipe, AsyncCommands};
|
||||||
use rocket_db_pools::Connection;
|
use rocket_db_pools::Connection;
|
||||||
|
@ -5,8 +6,6 @@ use serde::{Deserialize, Serialize};
|
||||||
use std::ops::Sub;
|
use std::ops::Sub;
|
||||||
use std::time::SystemTime;
|
use std::time::SystemTime;
|
||||||
|
|
||||||
use crate::redispool::RedisPool;
|
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug)]
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
struct ClassCounts {
|
struct ClassCounts {
|
||||||
world_id: String,
|
world_id: String,
|
||||||
|
@ -14,13 +13,13 @@ struct ClassCounts {
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug)]
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
struct Classes {
|
pub struct Classes {
|
||||||
light_assault: u32,
|
light_assault: i32,
|
||||||
engineer: u32,
|
engineer: i32,
|
||||||
combat_medic: u32,
|
combat_medic: i32,
|
||||||
heavy_assault: u32,
|
heavy_assault: i32,
|
||||||
infiltrator: u32,
|
infiltrator: i32,
|
||||||
max: u32,
|
max: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[get("/w/<world_id>/classes")]
|
#[get("/w/<world_id>/classes")]
|
||||||
|
@ -34,21 +33,36 @@ pub async fn get_classes(world_id: String, mut con: Connection<RedisPool>) -> se
|
||||||
Err(_) => {}
|
Err(_) => {}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
let classes = fetch_classes(world_id.clone(), &mut con).await;
|
||||||
|
|
||||||
|
// I hate this but it's fast???
|
||||||
|
// The type only allows 12 at a time.
|
||||||
|
|
||||||
|
let response = ClassCounts { world_id, classes };
|
||||||
|
|
||||||
|
let out = json!(response);
|
||||||
|
|
||||||
|
con.set_ex::<String, String, ()>(cache_key, out.to_string(), 5)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
out
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn fetch_classes(world_id: String, con: &mut Connection<RedisPool>) -> Classes {
|
||||||
let filter_timestamp = SystemTime::now()
|
let filter_timestamp = SystemTime::now()
|
||||||
.sub(time::Duration::from_secs(60 * 15))
|
.sub(time::Duration::from_secs(60 * 15))
|
||||||
.duration_since(SystemTime::UNIX_EPOCH)
|
.duration_since(SystemTime::UNIX_EPOCH)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.as_secs();
|
.as_secs();
|
||||||
|
|
||||||
// I hate this but it's fast???
|
|
||||||
// The type only allows 12 at a time.
|
|
||||||
let (light_assault, engineer, combat_medic, heavy_assault, infiltrator, max): (
|
let (light_assault, engineer, combat_medic, heavy_assault, infiltrator, max): (
|
||||||
u32,
|
i32,
|
||||||
u32,
|
i32,
|
||||||
u32,
|
i32,
|
||||||
u32,
|
i32,
|
||||||
u32,
|
i32,
|
||||||
u32,
|
i32,
|
||||||
) = pipe()
|
) = pipe()
|
||||||
.zcount(
|
.zcount(
|
||||||
format!("c:{}/{}", world_id, "light_assault"),
|
format!("c:{}/{}", world_id, "light_assault"),
|
||||||
|
@ -80,27 +94,16 @@ pub async fn get_classes(world_id: String, mut con: Connection<RedisPool>) -> se
|
||||||
filter_timestamp,
|
filter_timestamp,
|
||||||
"+inf",
|
"+inf",
|
||||||
)
|
)
|
||||||
.query_async(&mut *con)
|
.query_async(&mut **con)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let response = ClassCounts {
|
Classes {
|
||||||
world_id,
|
light_assault,
|
||||||
classes: Classes {
|
engineer,
|
||||||
light_assault,
|
combat_medic,
|
||||||
engineer,
|
heavy_assault,
|
||||||
combat_medic,
|
infiltrator,
|
||||||
heavy_assault,
|
max,
|
||||||
infiltrator,
|
}
|
||||||
max,
|
|
||||||
},
|
|
||||||
};
|
|
||||||
|
|
||||||
let out = json!(response);
|
|
||||||
|
|
||||||
con.set_ex::<String, String, ()>(cache_key, out.to_string(), 5)
|
|
||||||
.await
|
|
||||||
.unwrap();
|
|
||||||
|
|
||||||
out
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,7 +15,7 @@ impl Fairing for CORS {
|
||||||
|
|
||||||
async fn on_response<'r>(&self, _request: &'r Request<'_>, response: &mut Response<'r>) {
|
async fn on_response<'r>(&self, _request: &'r Request<'_>, response: &mut Response<'r>) {
|
||||||
response.set_header(Header::new("Access-Control-Allow-Origin", "*"));
|
response.set_header(Header::new("Access-Control-Allow-Origin", "*"));
|
||||||
response.set_header(Header::new("Access-Control-Allow-Methods", "GET"));
|
response.set_header(Header::new("Access-Control-Allow-Methods", "GET, POST"));
|
||||||
response.set_header(Header::new("Access-Control-Allow-Headers", "*"));
|
response.set_header(Header::new("Access-Control-Allow-Headers", "*"));
|
||||||
response.set_header(Header::new("Access-Control-Allow-Credentials", "false"));
|
response.set_header(Header::new("Access-Control-Allow-Credentials", "false"));
|
||||||
}
|
}
|
||||||
|
|
65
services/api/src/graphql/mod.rs
Normal file
65
services/api/src/graphql/mod.rs
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
use crate::redispool::RedisPool;
|
||||||
|
|
||||||
|
use self::types::World;
|
||||||
|
use juniper::{graphql_object, FieldResult, ID};
|
||||||
|
use rocket::response::content::RawHtml;
|
||||||
|
|
||||||
|
pub mod types;
|
||||||
|
|
||||||
|
pub struct Context {
|
||||||
|
con: RedisPool,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl juniper::Context for Context {}
|
||||||
|
|
||||||
|
#[get("/graphiql")]
|
||||||
|
pub fn graphiql() -> RawHtml<String> {
|
||||||
|
juniper_rocket::graphiql_source("/graphql", None)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[get("/")]
|
||||||
|
pub fn playground() -> RawHtml<String> {
|
||||||
|
juniper_rocket::playground_source("/graphql", None)
|
||||||
|
}
|
||||||
|
|
||||||
|
#[post("/", data = "<query>")]
|
||||||
|
pub async fn post_graphql(
|
||||||
|
query: juniper_rocket::GraphQLRequest,
|
||||||
|
schema: &rocket::State<Schema>,
|
||||||
|
con: &RedisPool,
|
||||||
|
) -> juniper_rocket::GraphQLResponse {
|
||||||
|
query.execute(&*schema, &Context { con: con.clone() }).await
|
||||||
|
}
|
||||||
|
|
||||||
|
#[get("/?<query..>")]
|
||||||
|
pub async fn get_graphql(
|
||||||
|
query: juniper_rocket::GraphQLRequest,
|
||||||
|
schema: &rocket::State<Schema>,
|
||||||
|
con: &RedisPool,
|
||||||
|
) -> juniper_rocket::GraphQLResponse {
|
||||||
|
query.execute(&*schema, &Context { con: con.clone() }).await
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Query;
|
||||||
|
|
||||||
|
#[graphql_object(context = Context)]
|
||||||
|
impl Query {
|
||||||
|
fn world(id: ID) -> FieldResult<Option<World>> {
|
||||||
|
Ok(Some(World { id }))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub type Schema = juniper::RootNode<
|
||||||
|
'static,
|
||||||
|
Query,
|
||||||
|
juniper::EmptyMutation<Context>,
|
||||||
|
juniper::EmptySubscription<Context>,
|
||||||
|
>;
|
||||||
|
|
||||||
|
pub fn schema() -> Schema {
|
||||||
|
Schema::new(
|
||||||
|
Query,
|
||||||
|
juniper::EmptyMutation::<Context>::new(),
|
||||||
|
juniper::EmptySubscription::<Context>::new(),
|
||||||
|
)
|
||||||
|
}
|
271
services/api/src/graphql/types.rs
Normal file
271
services/api/src/graphql/types.rs
Normal file
|
@ -0,0 +1,271 @@
|
||||||
|
use juniper::graphql_object;
|
||||||
|
use once_cell::sync::Lazy;
|
||||||
|
use rocket_db_pools::deadpool_redis::redis::{cmd, pipe};
|
||||||
|
use std::{
|
||||||
|
collections::HashMap,
|
||||||
|
ops::Sub,
|
||||||
|
time::{Duration, SystemTime},
|
||||||
|
};
|
||||||
|
|
||||||
|
static WORLD_ID_TO_NAME: Lazy<HashMap<&str, &str>> = Lazy::new(|| {
|
||||||
|
HashMap::from([
|
||||||
|
("1", "Connery"),
|
||||||
|
("10", "Miller"),
|
||||||
|
("13", "Cobalt"),
|
||||||
|
("17", "Emerald"),
|
||||||
|
("19", "Jaeger"),
|
||||||
|
("40", "SolTech"),
|
||||||
|
("1000", "Genudine"),
|
||||||
|
("2000", "Ceres"),
|
||||||
|
])
|
||||||
|
});
|
||||||
|
|
||||||
|
#[derive(Clone, Debug)]
|
||||||
|
pub struct World {
|
||||||
|
pub id: juniper::ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[graphql_object(context = super::Context)]
|
||||||
|
impl World {
|
||||||
|
pub fn name(&self) -> String {
|
||||||
|
WORLD_ID_TO_NAME
|
||||||
|
.get(&self.id.to_string().as_str())
|
||||||
|
.unwrap_or(&"Unknown")
|
||||||
|
.to_string()
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn population(&self, context: &mut super::Context) -> i32 {
|
||||||
|
let mut con = (*context).con.get().await.unwrap();
|
||||||
|
let id = self.id.to_string();
|
||||||
|
|
||||||
|
let filter_timestamp = SystemTime::now()
|
||||||
|
.sub(Duration::from_secs(60 * 15))
|
||||||
|
.duration_since(SystemTime::UNIX_EPOCH)
|
||||||
|
.unwrap()
|
||||||
|
.as_secs();
|
||||||
|
|
||||||
|
let (vs, nc, tr, ns): (i32, i32, i32, i32) = pipe()
|
||||||
|
.zcount(format!("wp:{}/{}", id, 1), filter_timestamp, "+inf")
|
||||||
|
.zcount(format!("wp:{}/{}", id, 2), filter_timestamp, "+inf")
|
||||||
|
.zcount(format!("wp:{}/{}", id, 3), filter_timestamp, "+inf")
|
||||||
|
.zcount(format!("wp:{}/{}", id, 4), filter_timestamp, "+inf")
|
||||||
|
.query_async(&mut con)
|
||||||
|
.await
|
||||||
|
.unwrap();
|
||||||
|
|
||||||
|
tr + vs + nc + ns
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn faction_population(&self) -> FactionPopulation {
|
||||||
|
FactionPopulation {
|
||||||
|
world_id: self.id.clone(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn vehicles(&self) -> Vehicles {
|
||||||
|
Vehicles {
|
||||||
|
world_id: self.id.clone(),
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct FactionPopulation {
|
||||||
|
world_id: juniper::ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl FactionPopulation {
|
||||||
|
async fn by_faction(&self, context: &super::Context, world_id: String, faction: i32) -> i32 {
|
||||||
|
let mut con = (*context).con.get().await.unwrap();
|
||||||
|
|
||||||
|
let filter_timestamp = SystemTime::now()
|
||||||
|
.sub(Duration::from_secs(60 * 15))
|
||||||
|
.duration_since(SystemTime::UNIX_EPOCH)
|
||||||
|
.unwrap()
|
||||||
|
.as_secs();
|
||||||
|
|
||||||
|
cmd("ZCOUNT")
|
||||||
|
.arg(format!("wp:{}/{}", world_id, faction))
|
||||||
|
.arg(filter_timestamp)
|
||||||
|
.arg("+inf")
|
||||||
|
.query_async(&mut con)
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[graphql_object(context = super::Context)]
|
||||||
|
#[graphql(description = "The population of each faction on a world")]
|
||||||
|
impl FactionPopulation {
|
||||||
|
async fn vs(&self, context: &super::Context) -> i32 {
|
||||||
|
self.by_faction(context, self.world_id.to_string(), 1).await
|
||||||
|
}
|
||||||
|
async fn nc(&self, context: &super::Context) -> i32 {
|
||||||
|
self.by_faction(context, self.world_id.to_string(), 2).await
|
||||||
|
}
|
||||||
|
async fn tr(&self, context: &super::Context) -> i32 {
|
||||||
|
self.by_faction(context, self.world_id.to_string(), 3).await
|
||||||
|
}
|
||||||
|
async fn ns(&self, context: &super::Context) -> i32 {
|
||||||
|
self.by_faction(context, self.world_id.to_string(), 4).await
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Vehicles {
|
||||||
|
world_id: juniper::ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Vehicles {
|
||||||
|
async fn get_vehicle(
|
||||||
|
&self,
|
||||||
|
context: &super::Context,
|
||||||
|
world_id: String,
|
||||||
|
vehicle_name: &str,
|
||||||
|
) -> i32 {
|
||||||
|
let mut con = (*context).con.get().await.unwrap();
|
||||||
|
|
||||||
|
let filter_timestamp = SystemTime::now()
|
||||||
|
.sub(Duration::from_secs(60 * 15))
|
||||||
|
.duration_since(SystemTime::UNIX_EPOCH)
|
||||||
|
.unwrap()
|
||||||
|
.as_secs();
|
||||||
|
|
||||||
|
cmd("ZCOUNT")
|
||||||
|
.arg(format!("v:{}/{}", world_id, vehicle_name))
|
||||||
|
.arg(filter_timestamp)
|
||||||
|
.arg("+inf")
|
||||||
|
.query_async(&mut con)
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[graphql_object(context = super::Context)]
|
||||||
|
#[graphql(description = "The count of active vehicles on a world")]
|
||||||
|
impl Vehicles {
|
||||||
|
// Transporters
|
||||||
|
async fn flash(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "flash")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn sunderer(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "sunderer")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn ant(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "ant")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn harasser(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "harasser")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn javelin(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "javelin")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
|
// Tanks
|
||||||
|
async fn lightning(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "lightning")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn prowler(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "prowler")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn vanguard(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "vanguard")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn magrider(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "magrider")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn chimera(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "chimera")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
|
||||||
|
// Air
|
||||||
|
async fn mosquito(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "mosquito")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn liberator(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "liberator")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn galaxy(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "galaxy")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn valkyrie(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "valkyrie")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn reaver(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "reaver")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn scythe(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "scythe")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn dervish(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_vehicle(context, self.world_id.to_string(), "dervish")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
pub struct Classes {
|
||||||
|
pub world_id: juniper::ID,
|
||||||
|
}
|
||||||
|
|
||||||
|
impl Classes {
|
||||||
|
async fn get_class(&self, context: &super::Context, world_id: String, class_name: &str) -> i32 {
|
||||||
|
let mut con = (*context).con.get().await.unwrap();
|
||||||
|
|
||||||
|
let filter_timestamp = SystemTime::now()
|
||||||
|
.sub(Duration::from_secs(60 * 15))
|
||||||
|
.duration_since(SystemTime::UNIX_EPOCH)
|
||||||
|
.unwrap()
|
||||||
|
.as_secs();
|
||||||
|
|
||||||
|
cmd("ZCOUNT")
|
||||||
|
.arg(format!("c:{}/{}", world_id, class_name))
|
||||||
|
.arg(filter_timestamp)
|
||||||
|
.arg("+inf")
|
||||||
|
.query_async(&mut con)
|
||||||
|
.await
|
||||||
|
.unwrap()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
#[graphql_object(context = super::Context)]
|
||||||
|
#[graphql(description = "The count of active classes on a world")]
|
||||||
|
impl Classes {
|
||||||
|
async fn infiltrator(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_class(context, self.world_id.to_string(), "infiltrator")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn light_assault(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_class(context, self.world_id.to_string(), "light_assault")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn combat_medic(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_class(context, self.world_id.to_string(), "combat_medic")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn engineer(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_class(context, self.world_id.to_string(), "engineer")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn heavy_assault(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_class(context, self.world_id.to_string(), "heavy_assault")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
async fn max(&self, context: &super::Context) -> i32 {
|
||||||
|
self.get_class(context, self.world_id.to_string(), "max")
|
||||||
|
.await
|
||||||
|
}
|
||||||
|
}
|
|
@ -1,5 +1,6 @@
|
||||||
pub mod classes;
|
pub mod classes;
|
||||||
pub mod cors;
|
pub mod cors;
|
||||||
|
pub mod graphql;
|
||||||
pub mod population;
|
pub mod population;
|
||||||
pub mod redispool;
|
pub mod redispool;
|
||||||
pub mod vehicles;
|
pub mod vehicles;
|
||||||
|
@ -10,18 +11,11 @@ use rocket::{error, Build, Rocket};
|
||||||
use rocket_db_pools::deadpool_redis::redis::{cmd, pipe};
|
use rocket_db_pools::deadpool_redis::redis::{cmd, pipe};
|
||||||
use rocket_db_pools::{Connection, Database};
|
use rocket_db_pools::{Connection, Database};
|
||||||
|
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
|
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate rocket;
|
extern crate rocket;
|
||||||
#[macro_use]
|
#[macro_use]
|
||||||
extern crate serde_json;
|
extern crate serde_json;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize)]
|
|
||||||
struct IncomingHeaders {
|
|
||||||
host: String,
|
|
||||||
}
|
|
||||||
|
|
||||||
fn hello_world(host: String, world_id: &str) -> serde_json::Value {
|
fn hello_world(host: String, world_id: &str) -> serde_json::Value {
|
||||||
json!({
|
json!({
|
||||||
"population": format!("https://{}/w/{}", host, world_id),
|
"population": format!("https://{}/w/{}", host, world_id),
|
||||||
|
@ -99,6 +93,7 @@ fn rocket() -> Rocket<Build> {
|
||||||
}
|
}
|
||||||
rocket
|
rocket
|
||||||
}))
|
}))
|
||||||
|
.manage(graphql::schema())
|
||||||
.mount(
|
.mount(
|
||||||
"/",
|
"/",
|
||||||
routes![
|
routes![
|
||||||
|
@ -109,4 +104,13 @@ fn rocket() -> Rocket<Build> {
|
||||||
classes::get_classes,
|
classes::get_classes,
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
.mount(
|
||||||
|
"/graphql",
|
||||||
|
routes![
|
||||||
|
graphql::graphiql,
|
||||||
|
graphql::playground,
|
||||||
|
graphql::get_graphql,
|
||||||
|
graphql::post_graphql
|
||||||
|
],
|
||||||
|
)
|
||||||
}
|
}
|
||||||
|
|
|
@ -8,17 +8,17 @@ use crate::redispool::RedisPool;
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug)]
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
pub struct Factions {
|
pub struct Factions {
|
||||||
tr: u32,
|
pub tr: i32,
|
||||||
nc: u32,
|
pub nc: i32,
|
||||||
vs: u32,
|
pub vs: i32,
|
||||||
ns: u32,
|
pub ns: i32,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug)]
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
pub struct WorldPopulation {
|
pub struct WorldPopulation {
|
||||||
world_id: u32,
|
world_id: i32,
|
||||||
total: u32,
|
pub total: i32,
|
||||||
factions: Factions,
|
pub factions: Factions,
|
||||||
}
|
}
|
||||||
|
|
||||||
#[derive(Serialize, Deserialize, Debug)]
|
#[derive(Serialize, Deserialize, Debug)]
|
||||||
|
@ -28,28 +28,30 @@ pub struct MultipleWorldPopulation {
|
||||||
|
|
||||||
#[get("/w/<world_id>")]
|
#[get("/w/<world_id>")]
|
||||||
pub async fn get_world_pop(world_id: String, mut con: Connection<RedisPool>) -> serde_json::Value {
|
pub async fn get_world_pop(world_id: String, mut con: Connection<RedisPool>) -> serde_json::Value {
|
||||||
|
json!(fetch_world_pop(world_id, &mut con).await)
|
||||||
|
}
|
||||||
|
|
||||||
|
pub async fn fetch_world_pop(world_id: String, con: &mut Connection<RedisPool>) -> WorldPopulation {
|
||||||
let filter_timestamp = SystemTime::now()
|
let filter_timestamp = SystemTime::now()
|
||||||
.sub(time::Duration::from_secs(60 * 15))
|
.sub(time::Duration::from_secs(60 * 15))
|
||||||
.duration_since(SystemTime::UNIX_EPOCH)
|
.duration_since(SystemTime::UNIX_EPOCH)
|
||||||
.unwrap()
|
.unwrap()
|
||||||
.as_secs();
|
.as_secs();
|
||||||
|
|
||||||
let (vs, nc, tr, ns): (u32, u32, u32, u32) = pipe()
|
let (vs, nc, tr, ns): (i32, i32, i32, i32) = pipe()
|
||||||
.zcount(format!("wp:{}/{}", world_id, 1), filter_timestamp, "+inf")
|
.zcount(format!("wp:{}/{}", world_id, 1), filter_timestamp, "+inf")
|
||||||
.zcount(format!("wp:{}/{}", world_id, 2), filter_timestamp, "+inf")
|
.zcount(format!("wp:{}/{}", world_id, 2), filter_timestamp, "+inf")
|
||||||
.zcount(format!("wp:{}/{}", world_id, 3), filter_timestamp, "+inf")
|
.zcount(format!("wp:{}/{}", world_id, 3), filter_timestamp, "+inf")
|
||||||
.zcount(format!("wp:{}/{}", world_id, 4), filter_timestamp, "+inf")
|
.zcount(format!("wp:{}/{}", world_id, 4), filter_timestamp, "+inf")
|
||||||
.query_async(&mut *con)
|
.query_async(&mut **con)
|
||||||
.await
|
.await
|
||||||
.unwrap();
|
.unwrap();
|
||||||
|
|
||||||
let total = tr + vs + nc;
|
let total = tr + vs + nc;
|
||||||
|
|
||||||
let response = WorldPopulation {
|
WorldPopulation {
|
||||||
world_id: world_id.parse().unwrap(),
|
world_id: world_id.parse().unwrap(),
|
||||||
total,
|
total,
|
||||||
factions: Factions { tr, nc, vs, ns },
|
factions: Factions { tr, nc, vs, ns },
|
||||||
};
|
}
|
||||||
|
|
||||||
json!(response)
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
use rocket_db_pools::{deadpool_redis, Database};
|
use rocket_db_pools::{deadpool_redis, Database};
|
||||||
|
|
||||||
#[derive(Database)]
|
#[derive(Database, Clone)]
|
||||||
#[database("redis")]
|
#[database("redis")]
|
||||||
pub struct RedisPool(deadpool_redis::Pool);
|
pub struct RedisPool(deadpool_redis::Pool);
|
||||||
|
|
Loading…
Add table
Reference in a new issue