refactor: refactor graphql
This commit is contained in:
parent
d06acde882
commit
5b001f9584
185
Cargo.lock
generated
185
Cargo.lock
generated
@ -82,7 +82,6 @@ dependencies = [
|
|||||||
"cfg-if",
|
"cfg-if",
|
||||||
"getrandom 0.3.3",
|
"getrandom 0.3.3",
|
||||||
"once_cell",
|
"once_cell",
|
||||||
"serde",
|
|
||||||
"version_check",
|
"version_check",
|
||||||
"zerocopy",
|
"zerocopy",
|
||||||
]
|
]
|
||||||
@ -920,12 +919,6 @@ dependencies = [
|
|||||||
"serde_with",
|
"serde_with",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "borrow-or-share"
|
|
||||||
version = "0.2.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "3eeab4423108c5d7c744f4d234de88d18d636100093ae04caf4825134b9c3a32"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "borsh"
|
name = "borsh"
|
||||||
version = "1.5.7"
|
version = "1.5.7"
|
||||||
@ -1042,12 +1035,6 @@ dependencies = [
|
|||||||
"syn 1.0.109",
|
"syn 1.0.109",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "bytecount"
|
|
||||||
version = "0.6.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "175812e0be2bccb6abe50bb8d566126198344f707e304f45c648fd8f2cc0365e"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "bytemuck"
|
name = "bytemuck"
|
||||||
version = "1.23.1"
|
version = "1.23.1"
|
||||||
@ -2212,15 +2199,6 @@ dependencies = [
|
|||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "email_address"
|
|
||||||
version = "0.2.9"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "e079f19b08ca6239f47f8ba8509c11cf3ea30095831f7fed61441475edd8c449"
|
|
||||||
dependencies = [
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "encode_unicode"
|
name = "encode_unicode"
|
||||||
version = "1.0.0"
|
version = "1.0.0"
|
||||||
@ -2489,17 +2467,6 @@ dependencies = [
|
|||||||
"miniz_oxide",
|
"miniz_oxide",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "fluent-uri"
|
|
||||||
version = "0.3.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1918b65d96df47d3591bed19c5cca17e3fa5d0707318e4b5ef2eae01764df7e5"
|
|
||||||
dependencies = [
|
|
||||||
"borrow-or-share",
|
|
||||||
"ref-cast",
|
|
||||||
"serde",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "flume"
|
name = "flume"
|
||||||
version = "0.11.1"
|
version = "0.11.1"
|
||||||
@ -2547,16 +2514,6 @@ dependencies = [
|
|||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "fraction"
|
|
||||||
version = "0.15.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "0f158e3ff0a1b334408dc9fb811cd99b446986f4d8b741bb08f9df1604085ae7"
|
|
||||||
dependencies = [
|
|
||||||
"lazy_static",
|
|
||||||
"num 0.4.3",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "fs4"
|
name = "fs4"
|
||||||
version = "0.13.1"
|
version = "0.13.1"
|
||||||
@ -4129,33 +4086,6 @@ dependencies = [
|
|||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "jsonschema"
|
|
||||||
version = "0.30.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "f1b46a0365a611fbf1d2143104dcf910aada96fafd295bab16c60b802bf6fa1d"
|
|
||||||
dependencies = [
|
|
||||||
"ahash 0.8.12",
|
|
||||||
"base64 0.22.1",
|
|
||||||
"bytecount",
|
|
||||||
"email_address",
|
|
||||||
"fancy-regex",
|
|
||||||
"fraction",
|
|
||||||
"idna",
|
|
||||||
"itoa",
|
|
||||||
"num-cmp",
|
|
||||||
"num-traits",
|
|
||||||
"once_cell",
|
|
||||||
"percent-encoding",
|
|
||||||
"referencing",
|
|
||||||
"regex",
|
|
||||||
"regex-syntax 0.8.5",
|
|
||||||
"reqwest",
|
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
"uuid-simd",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "jwtk"
|
name = "jwtk"
|
||||||
version = "0.4.0"
|
version = "0.4.0"
|
||||||
@ -5063,27 +4993,13 @@ version = "0.2.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36"
|
checksum = "b8536030f9fea7127f841b45bb6243b27255787fb4eb83958aa1ef9d2fdc0c36"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"num-complex 0.2.4",
|
"num-complex",
|
||||||
"num-integer",
|
"num-integer",
|
||||||
"num-iter",
|
"num-iter",
|
||||||
"num-rational 0.2.4",
|
"num-rational 0.2.4",
|
||||||
"num-traits",
|
"num-traits",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num"
|
|
||||||
version = "0.4.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "35bd024e8b2ff75562e5f34e7f4905839deb4b22955ef5e73d2fea1b9813cb23"
|
|
||||||
dependencies = [
|
|
||||||
"num-bigint",
|
|
||||||
"num-complex 0.4.6",
|
|
||||||
"num-integer",
|
|
||||||
"num-iter",
|
|
||||||
"num-rational 0.4.2",
|
|
||||||
"num-traits",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-bigint"
|
name = "num-bigint"
|
||||||
version = "0.4.6"
|
version = "0.4.6"
|
||||||
@ -5111,12 +5027,6 @@ dependencies = [
|
|||||||
"zeroize",
|
"zeroize",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num-cmp"
|
|
||||||
version = "0.1.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "63335b2e2c34fae2fb0aa2cecfd9f0832a1e24b3b32ecec612c3426d46dc8aaa"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-complex"
|
name = "num-complex"
|
||||||
version = "0.2.4"
|
version = "0.2.4"
|
||||||
@ -5127,15 +5037,6 @@ dependencies = [
|
|||||||
"num-traits",
|
"num-traits",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "num-complex"
|
|
||||||
version = "0.4.6"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "73f88a1307638156682bada9d7604135552957b7818057dcef22705b4d509495"
|
|
||||||
dependencies = [
|
|
||||||
"num-traits",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "num-conv"
|
name = "num-conv"
|
||||||
version = "0.1.0"
|
version = "0.1.0"
|
||||||
@ -5453,12 +5354,6 @@ version = "0.1.0"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4"
|
checksum = "7f222829ae9293e33a9f5e9f440c6760a3d450a64affe1846486b140db81c1f4"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "outref"
|
|
||||||
version = "0.5.2"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1a80800c0488c3a21695ea981a54918fbb37abf04f4d0720c453632255e2ff0e"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "overload"
|
name = "overload"
|
||||||
version = "0.1.1"
|
version = "0.1.1"
|
||||||
@ -6884,7 +6779,6 @@ dependencies = [
|
|||||||
"itertools 0.14.0",
|
"itertools 0.14.0",
|
||||||
"jpegxl-rs",
|
"jpegxl-rs",
|
||||||
"jpegxl-sys",
|
"jpegxl-sys",
|
||||||
"jsonschema",
|
|
||||||
"jwtk",
|
"jwtk",
|
||||||
"lazy_static",
|
"lazy_static",
|
||||||
"lightningcss",
|
"lightningcss",
|
||||||
@ -6899,6 +6793,7 @@ dependencies = [
|
|||||||
"once_cell",
|
"once_cell",
|
||||||
"opendal",
|
"opendal",
|
||||||
"openidconnect",
|
"openidconnect",
|
||||||
|
"paste",
|
||||||
"percent-encoding",
|
"percent-encoding",
|
||||||
"polars",
|
"polars",
|
||||||
"quick-xml",
|
"quick-xml",
|
||||||
@ -6909,7 +6804,6 @@ dependencies = [
|
|||||||
"rss",
|
"rss",
|
||||||
"rstest",
|
"rstest",
|
||||||
"rust_decimal",
|
"rust_decimal",
|
||||||
"schemars 1.0.3",
|
|
||||||
"scraper",
|
"scraper",
|
||||||
"sea-orm",
|
"sea-orm",
|
||||||
"sea-orm-migration",
|
"sea-orm-migration",
|
||||||
@ -7019,20 +6913,6 @@ dependencies = [
|
|||||||
"syn 2.0.104",
|
"syn 2.0.104",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "referencing"
|
|
||||||
version = "0.30.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "c8eff4fa778b5c2a57e85c5f2fe3a709c52f0e60d23146e2151cbef5893f420e"
|
|
||||||
dependencies = [
|
|
||||||
"ahash 0.8.12",
|
|
||||||
"fluent-uri",
|
|
||||||
"once_cell",
|
|
||||||
"parking_lot 0.12.4",
|
|
||||||
"percent-encoding",
|
|
||||||
"serde_json",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "reflink-copy"
|
name = "reflink-copy"
|
||||||
version = "0.1.26"
|
version = "0.1.26"
|
||||||
@ -7115,7 +6995,6 @@ dependencies = [
|
|||||||
"cookie",
|
"cookie",
|
||||||
"cookie_store",
|
"cookie_store",
|
||||||
"encoding_rs",
|
"encoding_rs",
|
||||||
"futures-channel",
|
|
||||||
"futures-core",
|
"futures-core",
|
||||||
"futures-util",
|
"futures-util",
|
||||||
"h2",
|
"h2",
|
||||||
@ -7561,31 +7440,6 @@ dependencies = [
|
|||||||
"serde_json",
|
"serde_json",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "schemars"
|
|
||||||
version = "1.0.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "1375ba8ef45a6f15d83fa8748f1079428295d403d6ea991d09ab100155fbc06d"
|
|
||||||
dependencies = [
|
|
||||||
"dyn-clone",
|
|
||||||
"ref-cast",
|
|
||||||
"schemars_derive",
|
|
||||||
"serde",
|
|
||||||
"serde_json",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "schemars_derive"
|
|
||||||
version = "1.0.3"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "2b13ed22d6d49fe23712e068770b5c4df4a693a2b02eeff8e7ca3135627a24f6"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"serde_derive_internals",
|
|
||||||
"syn 2.0.104",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "scoped-tls"
|
name = "scoped-tls"
|
||||||
version = "1.0.1"
|
version = "1.0.1"
|
||||||
@ -7791,6 +7645,7 @@ checksum = "1c107b6f4780854c8b126e228ea8869f4d7b71260f962fefb57b996b8959ba6b"
|
|||||||
[[package]]
|
[[package]]
|
||||||
name = "seaography"
|
name = "seaography"
|
||||||
version = "1.1.4"
|
version = "1.1.4"
|
||||||
|
source = "git+https://github.com/dumtruck/seaography.git?rev=9f7fc7c#9f7fc7cf05234abe35fd9144c895321dd2b5db62"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"async-graphql",
|
"async-graphql",
|
||||||
"fnv",
|
"fnv",
|
||||||
@ -7917,17 +7772,6 @@ dependencies = [
|
|||||||
"syn 2.0.104",
|
"syn 2.0.104",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "serde_derive_internals"
|
|
||||||
version = "0.29.1"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "18d26a20a969b9e3fdf2fc2d9f21eda6c40e2de84c9408bb5d3b05d499aae711"
|
|
||||||
dependencies = [
|
|
||||||
"proc-macro2",
|
|
||||||
"quote",
|
|
||||||
"syn 2.0.104",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "serde_json"
|
name = "serde_json"
|
||||||
version = "1.0.140"
|
version = "1.0.140"
|
||||||
@ -8011,7 +7855,7 @@ dependencies = [
|
|||||||
"hex 0.4.3",
|
"hex 0.4.3",
|
||||||
"indexmap 1.9.3",
|
"indexmap 1.9.3",
|
||||||
"indexmap 2.9.0",
|
"indexmap 2.9.0",
|
||||||
"schemars 0.9.0",
|
"schemars",
|
||||||
"serde",
|
"serde",
|
||||||
"serde_derive",
|
"serde_derive",
|
||||||
"serde_json",
|
"serde_json",
|
||||||
@ -8185,7 +8029,7 @@ version = "0.7.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987"
|
checksum = "9cadb29c57caadc51ff8346233b5cec1d240b68ce55cf1afc764818791876987"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"outref 0.1.0",
|
"outref",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -8228,7 +8072,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
|
|||||||
checksum = "6ed5f6ab2122c6dec69dca18c72fa4590a27e581ad20d44960fe74c032a0b23b"
|
checksum = "6ed5f6ab2122c6dec69dca18c72fa4590a27e581ad20d44960fe74c032a0b23b"
|
||||||
dependencies = [
|
dependencies = [
|
||||||
"generic-array 0.12.4",
|
"generic-array 0.12.4",
|
||||||
"num 0.2.1",
|
"num",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
@ -9719,17 +9563,6 @@ dependencies = [
|
|||||||
"wasm-bindgen",
|
"wasm-bindgen",
|
||||||
]
|
]
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "uuid-simd"
|
|
||||||
version = "0.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "23b082222b4f6619906941c17eb2297fff4c2fb96cb60164170522942a200bd8"
|
|
||||||
dependencies = [
|
|
||||||
"outref 0.5.2",
|
|
||||||
"uuid",
|
|
||||||
"vsimd",
|
|
||||||
]
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "v_frame"
|
name = "v_frame"
|
||||||
version = "0.3.9"
|
version = "0.3.9"
|
||||||
@ -9771,12 +9604,6 @@ version = "0.5.1"
|
|||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||||
checksum = "65dd7eed29412da847b0f78bcec0ac98588165988a8cfe41d4ea1d429f8ccfff"
|
checksum = "65dd7eed29412da847b0f78bcec0ac98588165988a8cfe41d4ea1d429f8ccfff"
|
||||||
|
|
||||||
[[package]]
|
|
||||||
name = "vsimd"
|
|
||||||
version = "0.8.0"
|
|
||||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
|
||||||
checksum = "5c3082ca00d5a5ef149bb8b555a72ae84c9c59f7250f013ac822ac2e49b19c64"
|
|
||||||
|
|
||||||
[[package]]
|
[[package]]
|
||||||
name = "walkdir"
|
name = "walkdir"
|
||||||
version = "2.5.0"
|
version = "2.5.0"
|
||||||
|
@ -87,6 +87,4 @@ nanoid = "0.4.0"
|
|||||||
webp = "0.3.0"
|
webp = "0.3.0"
|
||||||
|
|
||||||
[patch.crates-io]
|
[patch.crates-io]
|
||||||
# seaography = { git = "https://github.com/dumtruck/seaography.git", rev = "395d50f" }
|
seaography = { git = "https://github.com/dumtruck/seaography.git", rev = "9f7fc7c" }
|
||||||
|
|
||||||
seaography = { path = "../seaography" }
|
|
||||||
|
@ -125,6 +125,7 @@ seaography = { version = "1.1", features = [
|
|||||||
"with-bigdecimal",
|
"with-bigdecimal",
|
||||||
"with-postgres-array",
|
"with-postgres-array",
|
||||||
"with-json-as-scalar",
|
"with-json-as-scalar",
|
||||||
|
"with-custom-as-json",
|
||||||
] }
|
] }
|
||||||
tower = { version = "0.5.2", features = ["util"] }
|
tower = { version = "0.5.2", features = ["util"] }
|
||||||
tower-http = { version = "0.6", features = [
|
tower-http = { version = "0.6", features = [
|
||||||
@ -167,8 +168,7 @@ quick-xml = { version = "0.37.5", features = [
|
|||||||
croner = "2.2.0"
|
croner = "2.2.0"
|
||||||
ts-rs = "11.0.1"
|
ts-rs = "11.0.1"
|
||||||
secrecy = { version = "0.10.3", features = ["serde"] }
|
secrecy = { version = "0.10.3", features = ["serde"] }
|
||||||
schemars = "1.0.3"
|
paste = "1.0.15"
|
||||||
jsonschema = "0.30.0"
|
|
||||||
|
|
||||||
[dev-dependencies]
|
[dev-dependencies]
|
||||||
inquire = { workspace = true }
|
inquire = { workspace = true }
|
||||||
|
6
apps/recorder/bindings/SubscriberTaskInput.ts
Normal file
6
apps/recorder/bindings/SubscriberTaskInput.ts
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||||
|
import type { SyncOneSubscriptionFeedsFullTaskInput } from "./SyncOneSubscriptionFeedsFullTaskInput";
|
||||||
|
import type { SyncOneSubscriptionFeedsIncrementalTaskInput } from "./SyncOneSubscriptionFeedsIncrementalTaskInput";
|
||||||
|
import type { SyncOneSubscriptionSourcesTaskInput } from "./SyncOneSubscriptionSourcesTaskInput";
|
||||||
|
|
||||||
|
export type SubscriberTaskInput = { "taskType": "sync_one_subscription_feeds_incremental" } & SyncOneSubscriptionFeedsIncrementalTaskInput | { "taskType": "sync_one_subscription_feeds_full" } & SyncOneSubscriptionFeedsFullTaskInput | { "taskType": "sync_one_subscription_sources" } & SyncOneSubscriptionSourcesTaskInput;
|
@ -3,4 +3,4 @@ import type { SyncOneSubscriptionFeedsFullTask } from "./SyncOneSubscriptionFeed
|
|||||||
import type { SyncOneSubscriptionFeedsIncrementalTask } from "./SyncOneSubscriptionFeedsIncrementalTask";
|
import type { SyncOneSubscriptionFeedsIncrementalTask } from "./SyncOneSubscriptionFeedsIncrementalTask";
|
||||||
import type { SyncOneSubscriptionSourcesTask } from "./SyncOneSubscriptionSourcesTask";
|
import type { SyncOneSubscriptionSourcesTask } from "./SyncOneSubscriptionSourcesTask";
|
||||||
|
|
||||||
export type SubscriberTask = { "taskType": "sync_one_subscription_feeds_incremental" } & SyncOneSubscriptionFeedsIncrementalTask | { "taskType": "sync_one_subscription_feeds_full" } & SyncOneSubscriptionFeedsFullTask | { "taskType": "sync_one_subscription_sources" } & SyncOneSubscriptionSourcesTask;
|
export type SubscriberTaskType = { "taskType": "sync_one_subscription_feeds_incremental" } & SyncOneSubscriptionFeedsIncrementalTask | { "taskType": "sync_one_subscription_feeds_full" } & SyncOneSubscriptionFeedsFullTask | { "taskType": "sync_one_subscription_sources" } & SyncOneSubscriptionSourcesTask;
|
@ -1,3 +1,3 @@
|
|||||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||||
|
|
||||||
export type SyncOneSubscriptionFeedsFullTask = { subscriptionId: number, subscriberId: number, cronId: number | null, };
|
export type SyncOneSubscriptionFeedsFullTask = { subscriptionId: number, subscriberId: number, cronId?: number | null, };
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||||
|
|
||||||
|
export type SyncOneSubscriptionFeedsFullTaskInput = { subscriptionId: number, subscriberId?: number | null, cronId?: number | null, };
|
@ -1,3 +1,3 @@
|
|||||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||||
|
|
||||||
export type SyncOneSubscriptionFeedsIncrementalTask = { subscriptionId: number, subscriberId: number, cronId: number | null, };
|
export type SyncOneSubscriptionFeedsIncrementalTask = { subscriptionId: number, subscriberId: number, cronId?: number | null, };
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||||
|
|
||||||
|
export type SyncOneSubscriptionFeedsIncrementalTaskInput = { subscriptionId: number, subscriberId?: number | null, cronId?: number | null, };
|
@ -1,3 +1,3 @@
|
|||||||
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||||
|
|
||||||
export type SyncOneSubscriptionSourcesTask = { subscriptionId: number, subscriberId: number, cronId: number | null, };
|
export type SyncOneSubscriptionSourcesTask = { subscriptionId: number, subscriberId: number, cronId?: number | null, };
|
||||||
|
@ -0,0 +1,3 @@
|
|||||||
|
// This file was generated by [ts-rs](https://github.com/Aleph-Alpha/ts-rs). Do not edit this file manually.
|
||||||
|
|
||||||
|
export type SyncOneSubscriptionSourcesTaskInput = { subscriptionId: number, subscriberId?: number | null, cronId?: number | null, };
|
@ -105,10 +105,10 @@ pub fn register_credential3rd_to_schema_builder(
|
|||||||
{
|
{
|
||||||
let check_available_mutation_name = get_entity_custom_mutation_field_name::<
|
let check_available_mutation_name = get_entity_custom_mutation_field_name::<
|
||||||
credential_3rd::Entity,
|
credential_3rd::Entity,
|
||||||
>(&builder_context, "CheckAvailable");
|
>(builder_context, "CheckAvailable");
|
||||||
let check_available_mutation =
|
let check_available_mutation =
|
||||||
generate_entity_filtered_mutation_field::<credential_3rd::Entity, _, _>(
|
generate_entity_filtered_mutation_field::<credential_3rd::Entity, _, _>(
|
||||||
builder_context.clone(),
|
builder_context,
|
||||||
check_available_mutation_name,
|
check_available_mutation_name,
|
||||||
TypeRef::named_nn(Credential3rdCheckAvailableInfo::object_type_name()),
|
TypeRef::named_nn(Credential3rdCheckAvailableInfo::object_type_name()),
|
||||||
Arc::new(|_resolver_ctx, app_ctx, filters| {
|
Arc::new(|_resolver_ctx, app_ctx, filters| {
|
||||||
|
@ -1,4 +1,3 @@
|
|||||||
use convert_case::Case;
|
|
||||||
use sea_orm::Iterable;
|
use sea_orm::Iterable;
|
||||||
use seaography::{Builder as SeaographyBuilder, BuilderContext};
|
use seaography::{Builder as SeaographyBuilder, BuilderContext};
|
||||||
|
|
||||||
@ -44,11 +43,7 @@ fn skip_columns_for_entity_input(context: &mut BuilderContext) {
|
|||||||
pub fn register_cron_to_schema_context(context: &mut BuilderContext) {
|
pub fn register_cron_to_schema_context(context: &mut BuilderContext) {
|
||||||
restrict_subscriber_for_entity::<cron::Entity>(context, &cron::Column::SubscriberId);
|
restrict_subscriber_for_entity::<cron::Entity>(context, &cron::Column::SubscriberId);
|
||||||
|
|
||||||
restrict_subscriber_tasks_for_entity::<cron::Entity>(
|
restrict_subscriber_tasks_for_entity::<cron::Entity>(context, &cron::Column::SubscriberTask);
|
||||||
context,
|
|
||||||
&cron::Column::SubscriberTask,
|
|
||||||
Some(Case::Snake),
|
|
||||||
);
|
|
||||||
skip_columns_for_entity_input(context);
|
skip_columns_for_entity_input(context);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -29,7 +29,7 @@ pub fn register_feeds_to_schema_context(context: &mut BuilderContext) {
|
|||||||
|
|
||||||
context.types.input_none_conversions.insert(
|
context.types.input_none_conversions.insert(
|
||||||
get_entity_and_column_name::<feeds::Entity>(context, &feeds::Column::Token),
|
get_entity_and_column_name::<feeds::Entity>(context, &feeds::Column::Token),
|
||||||
Arc::new(
|
Box::new(
|
||||||
move |context: &ResolverContext| -> SeaResult<Option<SeaValue>> {
|
move |context: &ResolverContext| -> SeaResult<Option<SeaValue>> {
|
||||||
let field_name = context.field().name();
|
let field_name = context.field().name();
|
||||||
if field_name == entity_create_one_mutation_field_name.as_str()
|
if field_name == entity_create_one_mutation_field_name.as_str()
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
use std::{ops::Deref, sync::Arc};
|
use std::{ops::Deref, sync::Arc};
|
||||||
|
|
||||||
use async_graphql::dynamic::{FieldValue, TypeRef};
|
use async_graphql::dynamic::{FieldValue, Scalar, TypeRef};
|
||||||
use convert_case::Case;
|
use convert_case::Case;
|
||||||
use sea_orm::{
|
use sea_orm::{
|
||||||
ActiveModelBehavior, ColumnTrait, ConnectionTrait, EntityTrait, Iterable, QueryFilter,
|
ActiveModelBehavior, ColumnTrait, ConnectionTrait, EntityTrait, Iterable, QueryFilter,
|
||||||
@ -9,9 +9,9 @@ use sea_orm::{
|
|||||||
use seaography::{
|
use seaography::{
|
||||||
Builder as SeaographyBuilder, BuilderContext, SeaographyError, prepare_active_model,
|
Builder as SeaographyBuilder, BuilderContext, SeaographyError, prepare_active_model,
|
||||||
};
|
};
|
||||||
|
use ts_rs::TS;
|
||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
app::AppContextTrait,
|
|
||||||
auth::AuthUserInfo,
|
auth::AuthUserInfo,
|
||||||
errors::RecorderError,
|
errors::RecorderError,
|
||||||
graphql::{
|
graphql::{
|
||||||
@ -32,7 +32,6 @@ use crate::{
|
|||||||
},
|
},
|
||||||
models::subscriber_tasks,
|
models::subscriber_tasks,
|
||||||
task::{ApalisJobs, ApalisSchema, SubscriberTaskTrait},
|
task::{ApalisJobs, ApalisSchema, SubscriberTaskTrait},
|
||||||
utils::json::convert_json_keys,
|
|
||||||
};
|
};
|
||||||
|
|
||||||
fn skip_columns_for_entity_input(context: &mut BuilderContext) {
|
fn skip_columns_for_entity_input(context: &mut BuilderContext) {
|
||||||
@ -49,11 +48,8 @@ fn skip_columns_for_entity_input(context: &mut BuilderContext) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn restrict_subscriber_tasks_for_entity<T>(
|
pub fn restrict_subscriber_tasks_for_entity<T>(context: &mut BuilderContext, column: &T::Column)
|
||||||
context: &mut BuilderContext,
|
where
|
||||||
column: &T::Column,
|
|
||||||
case: Option<Case<'static>>,
|
|
||||||
) where
|
|
||||||
T: EntityTrait,
|
T: EntityTrait,
|
||||||
<T as EntityTrait>::Model: Sync,
|
<T as EntityTrait>::Model: Sync,
|
||||||
{
|
{
|
||||||
@ -62,42 +58,33 @@ pub fn restrict_subscriber_tasks_for_entity<T>(
|
|||||||
restrict_jsonb_filter_input_for_entity::<T>(context, column);
|
restrict_jsonb_filter_input_for_entity::<T>(context, column);
|
||||||
convert_jsonb_output_for_entity::<T>(context, column, Some(Case::Camel));
|
convert_jsonb_output_for_entity::<T>(context, column, Some(Case::Camel));
|
||||||
let entity_column_name = get_entity_and_column_name::<T>(context, column);
|
let entity_column_name = get_entity_and_column_name::<T>(context, column);
|
||||||
|
|
||||||
|
context.types.input_type_overwrites.insert(
|
||||||
|
entity_column_name.clone(),
|
||||||
|
TypeRef::Named(subscriber_tasks::SubscriberTask::ident().into()),
|
||||||
|
);
|
||||||
|
context.types.output_type_overwrites.insert(
|
||||||
|
entity_column_name.clone(),
|
||||||
|
TypeRef::Named(subscriber_tasks::SubscriberTask::ident().into()),
|
||||||
|
);
|
||||||
context.types.input_conversions.insert(
|
context.types.input_conversions.insert(
|
||||||
entity_column_name.clone(),
|
entity_column_name.clone(),
|
||||||
Arc::new(move |resolve_context, value_accessor| {
|
Box::new(move |resolve_context, value_accessor| {
|
||||||
let mut json_value = value_accessor
|
let task: subscriber_tasks::SubscriberTaskInput = value_accessor.deserialize()?;
|
||||||
.as_value()
|
|
||||||
.clone()
|
|
||||||
.into_json()
|
|
||||||
.map_err(|err| {
|
|
||||||
SeaographyError::TypeConversionError(
|
|
||||||
err.to_string(),
|
|
||||||
format!("Json - {entity_column_name}"),
|
|
||||||
)
|
|
||||||
})?;
|
|
||||||
|
|
||||||
if let Some(case) = case {
|
|
||||||
json_value = convert_json_keys(json_value, case);
|
|
||||||
}
|
|
||||||
|
|
||||||
let subscriber_id = resolve_context
|
let subscriber_id = resolve_context
|
||||||
.data::<AuthUserInfo>()?
|
.data::<AuthUserInfo>()?
|
||||||
.subscriber_auth
|
.subscriber_auth
|
||||||
.subscriber_id;
|
.subscriber_id;
|
||||||
|
|
||||||
if let Some(obj) = json_value.as_object_mut() {
|
let task = subscriber_tasks::SubscriberTask::from_input(task, subscriber_id);
|
||||||
obj.entry("subscriber_id")
|
|
||||||
.or_insert_with(|| serde_json::Value::from(subscriber_id));
|
|
||||||
}
|
|
||||||
|
|
||||||
subscriber_tasks::subscriber_task_schema()
|
let json_value = serde_json::to_value(task).map_err(|err| {
|
||||||
.validate(&json_value)
|
SeaographyError::TypeConversionError(
|
||||||
.map_err(|err| {
|
err.to_string(),
|
||||||
SeaographyError::TypeConversionError(
|
format!("Json - {entity_column_name}"),
|
||||||
err.to_string(),
|
)
|
||||||
format!("Json - {entity_column_name}"),
|
})?;
|
||||||
)
|
|
||||||
})?;
|
|
||||||
|
|
||||||
Ok(sea_orm::Value::Json(Some(Box::new(json_value))))
|
Ok(sea_orm::Value::Json(Some(Box::new(json_value))))
|
||||||
}),
|
}),
|
||||||
@ -114,7 +101,6 @@ pub fn register_subscriber_tasks_to_schema_context(context: &mut BuilderContext)
|
|||||||
restrict_subscriber_tasks_for_entity::<subscriber_tasks::Entity>(
|
restrict_subscriber_tasks_for_entity::<subscriber_tasks::Entity>(
|
||||||
context,
|
context,
|
||||||
&subscriber_tasks::Column::Job,
|
&subscriber_tasks::Column::Job,
|
||||||
Some(Case::Snake),
|
|
||||||
);
|
);
|
||||||
|
|
||||||
skip_columns_for_entity_input(context);
|
skip_columns_for_entity_input(context);
|
||||||
@ -123,22 +109,26 @@ pub fn register_subscriber_tasks_to_schema_context(context: &mut BuilderContext)
|
|||||||
pub fn register_subscriber_tasks_to_schema_builder(
|
pub fn register_subscriber_tasks_to_schema_builder(
|
||||||
mut builder: SeaographyBuilder,
|
mut builder: SeaographyBuilder,
|
||||||
) -> SeaographyBuilder {
|
) -> SeaographyBuilder {
|
||||||
|
builder.schema = builder.schema.register(
|
||||||
|
Scalar::new(subscriber_tasks::SubscriberTask::ident())
|
||||||
|
.description(subscriber_tasks::SubscriberTask::decl()),
|
||||||
|
);
|
||||||
builder.register_enumeration::<subscriber_tasks::SubscriberTaskType>();
|
builder.register_enumeration::<subscriber_tasks::SubscriberTaskType>();
|
||||||
builder.register_enumeration::<subscriber_tasks::SubscriberTaskStatus>();
|
builder.register_enumeration::<subscriber_tasks::SubscriberTaskStatus>();
|
||||||
|
|
||||||
builder = register_entity_default_readonly!(builder, subscriber_tasks);
|
builder = register_entity_default_readonly!(builder, subscriber_tasks);
|
||||||
let builder_context = builder.context.clone();
|
let builder_context = builder.context;
|
||||||
|
|
||||||
{
|
{
|
||||||
builder
|
builder
|
||||||
.outputs
|
.outputs
|
||||||
.push(generate_entity_default_basic_entity_object::<
|
.push(generate_entity_default_basic_entity_object::<
|
||||||
subscriber_tasks::Entity,
|
subscriber_tasks::Entity,
|
||||||
>(builder_context.clone()));
|
>(builder_context));
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
let delete_mutation = generate_entity_delete_mutation_field::<subscriber_tasks::Entity>(
|
let delete_mutation = generate_entity_delete_mutation_field::<subscriber_tasks::Entity>(
|
||||||
builder_context.clone(),
|
builder_context,
|
||||||
Arc::new(|_resolver_ctx, app_ctx, filters| {
|
Arc::new(|_resolver_ctx, app_ctx, filters| {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
let db = app_ctx.db();
|
let db = app_ctx.db();
|
||||||
@ -169,13 +159,13 @@ pub fn register_subscriber_tasks_to_schema_builder(
|
|||||||
{
|
{
|
||||||
let entity_retry_one_mutation_name = get_entity_custom_mutation_field_name::<
|
let entity_retry_one_mutation_name = get_entity_custom_mutation_field_name::<
|
||||||
subscriber_tasks::Entity,
|
subscriber_tasks::Entity,
|
||||||
>(&builder_context, "RetryOne");
|
>(builder_context, "RetryOne");
|
||||||
let retry_one_mutation =
|
let retry_one_mutation =
|
||||||
generate_entity_filtered_mutation_field::<subscriber_tasks::Entity, _, _>(
|
generate_entity_filtered_mutation_field::<subscriber_tasks::Entity, _, _>(
|
||||||
builder_context.clone(),
|
builder_context,
|
||||||
entity_retry_one_mutation_name,
|
entity_retry_one_mutation_name,
|
||||||
TypeRef::named_nn(get_entity_basic_type_name::<subscriber_tasks::Entity>(
|
TypeRef::named_nn(get_entity_basic_type_name::<subscriber_tasks::Entity>(
|
||||||
&builder_context,
|
builder_context,
|
||||||
)),
|
)),
|
||||||
Arc::new(|_resolver_ctx, app_ctx, filters| {
|
Arc::new(|_resolver_ctx, app_ctx, filters| {
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
@ -214,15 +204,15 @@ pub fn register_subscriber_tasks_to_schema_builder(
|
|||||||
.inputs
|
.inputs
|
||||||
.push(generate_entity_default_insert_input_object::<
|
.push(generate_entity_default_insert_input_object::<
|
||||||
subscriber_tasks::Entity,
|
subscriber_tasks::Entity,
|
||||||
>(&builder.context));
|
>(builder_context));
|
||||||
let create_one_mutation =
|
let create_one_mutation =
|
||||||
generate_entity_create_one_mutation_field::<subscriber_tasks::Entity>(
|
generate_entity_create_one_mutation_field::<subscriber_tasks::Entity>(
|
||||||
builder.context.clone(),
|
builder_context,
|
||||||
Arc::new(move |resolver_ctx, app_ctx, input_object| {
|
Arc::new(move |resolver_ctx, app_ctx, input_object| {
|
||||||
let active_model: Result<subscriber_tasks::ActiveModel, _> =
|
|
||||||
prepare_active_model(&builder_context.clone(), &input_object, resolver_ctx);
|
|
||||||
|
|
||||||
Box::pin(async move {
|
Box::pin(async move {
|
||||||
|
let active_model: Result<subscriber_tasks::ActiveModel, _> =
|
||||||
|
prepare_active_model(builder_context, &input_object, resolver_ctx);
|
||||||
|
|
||||||
let task_service = app_ctx.task();
|
let task_service = app_ctx.task();
|
||||||
|
|
||||||
let active_model = active_model?;
|
let active_model = active_model?;
|
||||||
|
@ -79,7 +79,7 @@ where
|
|||||||
T: EntityTrait,
|
T: EntityTrait,
|
||||||
<T as EntityTrait>::Model: Sync,
|
<T as EntityTrait>::Model: Sync,
|
||||||
{
|
{
|
||||||
Arc::new(move |context: &ResolverContext| -> GuardAction {
|
Box::new(move |context: &ResolverContext| -> GuardAction {
|
||||||
match context.ctx.data::<AuthUserInfo>() {
|
match context.ctx.data::<AuthUserInfo>() {
|
||||||
Ok(_) => GuardAction::Allow,
|
Ok(_) => GuardAction::Allow,
|
||||||
Err(err) => GuardAction::Block(Some(err.message)),
|
Err(err) => GuardAction::Block(Some(err.message)),
|
||||||
@ -106,7 +106,7 @@ where
|
|||||||
let entity_update_mutation_data_field_name =
|
let entity_update_mutation_data_field_name =
|
||||||
Arc::new(get_entity_update_mutation_data_field_name(context).to_string());
|
Arc::new(get_entity_update_mutation_data_field_name(context).to_string());
|
||||||
|
|
||||||
Arc::new(move |context: &ResolverContext| -> GuardAction {
|
Box::new(move |context: &ResolverContext| -> GuardAction {
|
||||||
match context.ctx.data::<AuthUserInfo>() {
|
match context.ctx.data::<AuthUserInfo>() {
|
||||||
Ok(user_info) => {
|
Ok(user_info) => {
|
||||||
let subscriber_id = user_info.subscriber_auth.subscriber_id;
|
let subscriber_id = user_info.subscriber_auth.subscriber_id;
|
||||||
@ -253,7 +253,7 @@ where
|
|||||||
Arc::new(get_entity_create_one_mutation_field_name::<T>(context));
|
Arc::new(get_entity_create_one_mutation_field_name::<T>(context));
|
||||||
let entity_create_batch_mutation_field_name =
|
let entity_create_batch_mutation_field_name =
|
||||||
Arc::new(get_entity_create_batch_mutation_field_name::<T>(context));
|
Arc::new(get_entity_create_batch_mutation_field_name::<T>(context));
|
||||||
Arc::new(
|
Box::new(
|
||||||
move |context: &ResolverContext| -> SeaResult<Option<SeaValue>> {
|
move |context: &ResolverContext| -> SeaResult<Option<SeaValue>> {
|
||||||
let field_name = context.field().name();
|
let field_name = context.field().name();
|
||||||
if field_name == entity_create_one_mutation_field_name.as_str()
|
if field_name == entity_create_one_mutation_field_name.as_str()
|
||||||
|
@ -2,7 +2,7 @@ use seaography::{Builder as SeaographyBuilder, BuilderContext};
|
|||||||
|
|
||||||
use crate::{
|
use crate::{
|
||||||
graphql::{
|
graphql::{
|
||||||
domains::subscribers::restrict_subscriber_for_entity, infra,
|
domains::subscribers::restrict_subscriber_for_entity,
|
||||||
infra::custom::register_entity_default_writable,
|
infra::custom::register_entity_default_writable,
|
||||||
},
|
},
|
||||||
models::subscriptions,
|
models::subscriptions,
|
||||||
|
@ -16,7 +16,7 @@ pub fn register_crypto_column_input_conversion_to_schema_context<T>(
|
|||||||
{
|
{
|
||||||
context.types.input_conversions.insert(
|
context.types.input_conversions.insert(
|
||||||
get_entity_and_column_name::<T>(context, column),
|
get_entity_and_column_name::<T>(context, column),
|
||||||
Arc::new(
|
Box::new(
|
||||||
move |_resolve_context: &ResolverContext<'_>,
|
move |_resolve_context: &ResolverContext<'_>,
|
||||||
value: &ValueAccessor|
|
value: &ValueAccessor|
|
||||||
-> SeaResult<sea_orm::Value> {
|
-> SeaResult<sea_orm::Value> {
|
||||||
@ -38,7 +38,7 @@ pub fn register_crypto_column_output_conversion_to_schema_context<T>(
|
|||||||
{
|
{
|
||||||
context.types.output_conversions.insert(
|
context.types.output_conversions.insert(
|
||||||
get_entity_and_column_name::<T>(context, column),
|
get_entity_and_column_name::<T>(context, column),
|
||||||
Arc::new(
|
Box::new(
|
||||||
move |value: &sea_orm::Value| -> SeaResult<async_graphql::Value> {
|
move |value: &sea_orm::Value| -> SeaResult<async_graphql::Value> {
|
||||||
if let SeaValue::String(s) = value {
|
if let SeaValue::String(s) = value {
|
||||||
if let Some(s) = s {
|
if let Some(s) = s {
|
||||||
|
@ -34,9 +34,9 @@ pub type FilterMutationFn = Arc<
|
|||||||
|
|
||||||
pub type CreateOneMutationFn<M> = Arc<
|
pub type CreateOneMutationFn<M> = Arc<
|
||||||
dyn for<'a> Fn(
|
dyn for<'a> Fn(
|
||||||
&ResolverContext<'a>,
|
&'a ResolverContext<'a>,
|
||||||
Arc<dyn AppContextTrait>,
|
Arc<dyn AppContextTrait>,
|
||||||
ObjectAccessor<'_>,
|
ObjectAccessor<'a>,
|
||||||
) -> Pin<Box<dyn Future<Output = RecorderResult<M>> + Send + 'a>>
|
) -> Pin<Box<dyn Future<Output = RecorderResult<M>> + Send + 'a>>
|
||||||
+ Send
|
+ Send
|
||||||
+ Sync,
|
+ Sync,
|
||||||
@ -44,9 +44,9 @@ pub type CreateOneMutationFn<M> = Arc<
|
|||||||
|
|
||||||
pub type CreateBatchMutationFn<M> = Arc<
|
pub type CreateBatchMutationFn<M> = Arc<
|
||||||
dyn for<'a> Fn(
|
dyn for<'a> Fn(
|
||||||
&ResolverContext<'a>,
|
&'a ResolverContext<'a>,
|
||||||
Arc<dyn AppContextTrait>,
|
Arc<dyn AppContextTrait>,
|
||||||
Vec<ObjectAccessor<'_>>,
|
Vec<ObjectAccessor<'a>>,
|
||||||
) -> Pin<Box<dyn Future<Output = RecorderResult<Vec<M>>> + Send + 'a>>
|
) -> Pin<Box<dyn Future<Output = RecorderResult<Vec<M>>> + Send + 'a>>
|
||||||
+ Send
|
+ Send
|
||||||
+ Sync,
|
+ Sync,
|
||||||
@ -54,10 +54,10 @@ pub type CreateBatchMutationFn<M> = Arc<
|
|||||||
|
|
||||||
pub type UpdateMutationFn<M> = Arc<
|
pub type UpdateMutationFn<M> = Arc<
|
||||||
dyn for<'a> Fn(
|
dyn for<'a> Fn(
|
||||||
&ResolverContext<'a>,
|
&'a ResolverContext<'a>,
|
||||||
Arc<dyn AppContextTrait>,
|
Arc<dyn AppContextTrait>,
|
||||||
Condition,
|
Condition,
|
||||||
ObjectAccessor<'_>,
|
ObjectAccessor<'a>,
|
||||||
) -> Pin<Box<dyn Future<Output = RecorderResult<Vec<M>>> + Send + 'a>>
|
) -> Pin<Box<dyn Future<Output = RecorderResult<Vec<M>>> + Send + 'a>>
|
||||||
+ Send
|
+ Send
|
||||||
+ Sync,
|
+ Sync,
|
||||||
@ -89,12 +89,13 @@ where
|
|||||||
EntityInputBuilder::update_input_object::<T>(context)
|
EntityInputBuilder::update_input_object::<T>(context)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_entity_default_basic_entity_object<T>(context: Arc<BuilderContext>) -> Object
|
pub fn generate_entity_default_basic_entity_object<T>(context: &'static BuilderContext) -> Object
|
||||||
where
|
where
|
||||||
T: EntityTrait,
|
T: EntityTrait,
|
||||||
<T as EntityTrait>::Model: Sync,
|
<T as EntityTrait>::Model: Sync,
|
||||||
{
|
{
|
||||||
EntityObjectBuilder::basic_to_object::<T>(context)
|
let entity_object_builder = EntityObjectBuilder { context };
|
||||||
|
entity_object_builder.basic_to_object::<T>()
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_entity_input_object<T>(
|
pub fn generate_entity_input_object<T>(
|
||||||
@ -113,7 +114,7 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_entity_filtered_mutation_field<E, N, R>(
|
pub fn generate_entity_filtered_mutation_field<E, N, R>(
|
||||||
builder_context: Arc<BuilderContext>,
|
builder_context: &'static BuilderContext,
|
||||||
field_name: N,
|
field_name: N,
|
||||||
type_ref: R,
|
type_ref: R,
|
||||||
mutation_fn: FilterMutationFn,
|
mutation_fn: FilterMutationFn,
|
||||||
@ -124,189 +125,221 @@ where
|
|||||||
N: Into<String>,
|
N: Into<String>,
|
||||||
R: Into<TypeRef>,
|
R: Into<TypeRef>,
|
||||||
{
|
{
|
||||||
let object_name: String = get_entity_name::<E>(&builder_context);
|
let object_name: String = get_entity_name::<E>(builder_context);
|
||||||
|
|
||||||
let guard = builder_context
|
let guard = builder_context.guards.entity_guards.get(&object_name);
|
||||||
.guards
|
|
||||||
.entity_guards
|
|
||||||
.get(&object_name)
|
|
||||||
.cloned();
|
|
||||||
|
|
||||||
let filter_input_value = InputValue::new(
|
Field::new(field_name, type_ref, move |resolve_context| {
|
||||||
get_entity_renormalized_filter_field_name(),
|
|
||||||
TypeRef::named(get_entity_filter_input_type_name::<E>(&builder_context)),
|
|
||||||
);
|
|
||||||
|
|
||||||
Field::new(field_name, type_ref, move |ctx| {
|
|
||||||
let mutation_fn = mutation_fn.clone();
|
let mutation_fn = mutation_fn.clone();
|
||||||
let builder_context = builder_context.clone();
|
|
||||||
let guard_flag = if let Some(guard) = guard.as_ref() {
|
|
||||||
(*guard)(&ctx)
|
|
||||||
} else {
|
|
||||||
GuardAction::Allow
|
|
||||||
};
|
|
||||||
FieldFuture::new(async move {
|
FieldFuture::new(async move {
|
||||||
|
let guard_flag = if let Some(guard) = guard {
|
||||||
|
(*guard)(&resolve_context)
|
||||||
|
} else {
|
||||||
|
GuardAction::Allow
|
||||||
|
};
|
||||||
|
|
||||||
if let GuardAction::Block(reason) = guard_flag {
|
if let GuardAction::Block(reason) = guard_flag {
|
||||||
return Err::<Option<_>, async_graphql::Error>(async_graphql::Error::new(
|
return Err::<Option<_>, async_graphql::Error>(async_graphql::Error::new(
|
||||||
reason.unwrap_or("Entity guard triggered.".into()),
|
reason.unwrap_or("Entity guard triggered.".into()),
|
||||||
));
|
));
|
||||||
}
|
}
|
||||||
|
|
||||||
let app_ctx = ctx.data::<Arc<dyn AppContextTrait>>()?;
|
let filters = resolve_context
|
||||||
|
.args
|
||||||
|
.get(get_entity_renormalized_filter_field_name());
|
||||||
|
|
||||||
let filters = ctx.args.get(get_entity_renormalized_filter_field_name());
|
let filters = get_filter_conditions::<E>(&resolve_context, builder_context, filters);
|
||||||
|
|
||||||
let filters = get_filter_conditions::<E>(&ctx, &builder_context, filters);
|
let app_ctx = resolve_context.data::<Arc<dyn AppContextTrait>>()?;
|
||||||
|
|
||||||
let result = mutation_fn(&ctx, app_ctx.clone(), filters)
|
let result = mutation_fn(&resolve_context, app_ctx.clone(), filters).await?;
|
||||||
.await
|
|
||||||
.map_err(async_graphql::Error::new_with_source)?;
|
|
||||||
|
|
||||||
Ok(result)
|
Ok(result)
|
||||||
})
|
})
|
||||||
})
|
})
|
||||||
.argument(filter_input_value)
|
.argument(InputValue::new(
|
||||||
|
get_entity_renormalized_filter_field_name(),
|
||||||
|
TypeRef::named(get_entity_filter_input_type_name::<E>(builder_context)),
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_entity_create_one_mutation_field<E>(
|
pub fn generate_entity_create_one_mutation_field<E>(
|
||||||
builder_context: Arc<BuilderContext>,
|
builder_context: &'static BuilderContext,
|
||||||
mutation_fn: CreateOneMutationFn<E::Model>,
|
mutation_fn: CreateOneMutationFn<E::Model>,
|
||||||
) -> Field
|
) -> Field
|
||||||
where
|
where
|
||||||
E: EntityTrait,
|
E: EntityTrait,
|
||||||
<E as EntityTrait>::Model: Sync,
|
<E as EntityTrait>::Model: Sync,
|
||||||
{
|
{
|
||||||
EntityCreateOneMutationBuilder::to_field_with_mutation_fn::<E>(
|
let entity_create_one_mutation_builder = EntityCreateOneMutationBuilder {
|
||||||
builder_context.clone(),
|
context: builder_context,
|
||||||
Arc::new(move |resolver_ctx, input_object| {
|
};
|
||||||
let result = resolver_ctx
|
entity_create_one_mutation_builder.to_field_with_mutation_fn::<E>(Arc::new(
|
||||||
.data::<Arc<dyn AppContextTrait>>()
|
move |resolver_ctx, input_object| {
|
||||||
.map(|app_ctx| mutation_fn(&resolver_ctx, app_ctx.clone(), input_object));
|
let mutation_fn = mutation_fn.clone();
|
||||||
Box::pin(async move { result?.await.map_err(async_graphql::Error::new_with_source) })
|
|
||||||
}),
|
Box::pin(async move {
|
||||||
)
|
let app_ctx = resolver_ctx.data::<Arc<dyn AppContextTrait>>()?;
|
||||||
|
|
||||||
|
let result = mutation_fn(resolver_ctx, app_ctx.clone(), input_object).await?;
|
||||||
|
|
||||||
|
Ok(result)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_entity_default_create_one_mutation_field<E, A>(
|
pub fn generate_entity_default_create_one_mutation_field<E, A>(
|
||||||
builder_context: Arc<BuilderContext>,
|
builder_context: &'static BuilderContext,
|
||||||
active_model_hooks: bool,
|
active_model_hooks: bool,
|
||||||
) -> Field
|
) -> Field
|
||||||
where
|
where
|
||||||
E: EntityTrait,
|
E: EntityTrait,
|
||||||
<E as EntityTrait>::Model: Sync,
|
<E as EntityTrait>::Model: Sync + IntoActiveModel<A>,
|
||||||
<E as EntityTrait>::Model: IntoActiveModel<A>,
|
A: ActiveModelTrait<Entity = E> + sea_orm::ActiveModelBehavior + std::marker::Send,
|
||||||
A: ActiveModelTrait<Entity = E> + sea_orm::ActiveModelBehavior + std::marker::Send + 'static,
|
|
||||||
{
|
{
|
||||||
EntityCreateOneMutationBuilder::to_field::<E, A>(builder_context, active_model_hooks)
|
let entity_create_one_mutation_builder = EntityCreateOneMutationBuilder {
|
||||||
|
context: builder_context,
|
||||||
|
};
|
||||||
|
entity_create_one_mutation_builder.to_field::<E, A>(active_model_hooks)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_entity_create_batch_mutation_field<E, ID>(
|
pub fn generate_entity_create_batch_mutation_field<E, ID>(
|
||||||
builder_context: Arc<BuilderContext>,
|
builder_context: &'static BuilderContext,
|
||||||
mutation_fn: CreateBatchMutationFn<E::Model>,
|
mutation_fn: CreateBatchMutationFn<E::Model>,
|
||||||
) -> Field
|
) -> Field
|
||||||
where
|
where
|
||||||
E: EntityTrait,
|
E: EntityTrait,
|
||||||
<E as EntityTrait>::Model: Sync,
|
<E as EntityTrait>::Model: Sync,
|
||||||
{
|
{
|
||||||
EntityCreateBatchMutationBuilder::to_field_with_mutation_fn::<E>(
|
let entity_create_batch_mutation_builder = EntityCreateBatchMutationBuilder {
|
||||||
builder_context,
|
context: builder_context,
|
||||||
Arc::new(move |resolver_ctx, input_objects| {
|
};
|
||||||
let result = resolver_ctx
|
entity_create_batch_mutation_builder.to_field_with_mutation_fn::<E>(Arc::new(
|
||||||
.data::<Arc<dyn AppContextTrait>>()
|
move |resolver_ctx, input_objects| {
|
||||||
.map(|app_ctx| mutation_fn(&resolver_ctx, app_ctx.clone(), input_objects));
|
let mutation_fn = mutation_fn.clone();
|
||||||
Box::pin(async move { result?.await.map_err(async_graphql::Error::new_with_source) })
|
|
||||||
}),
|
Box::pin(async move {
|
||||||
)
|
let app_ctx = resolver_ctx.data::<Arc<dyn AppContextTrait>>()?;
|
||||||
|
|
||||||
|
let result = mutation_fn(resolver_ctx, app_ctx.clone(), input_objects).await?;
|
||||||
|
|
||||||
|
Ok(result)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_entity_default_create_batch_mutation_field<E, A>(
|
pub fn generate_entity_default_create_batch_mutation_field<E, A>(
|
||||||
builder_context: Arc<BuilderContext>,
|
builder_context: &'static BuilderContext,
|
||||||
active_model_hooks: bool,
|
active_model_hooks: bool,
|
||||||
) -> Field
|
) -> Field
|
||||||
where
|
where
|
||||||
E: EntityTrait,
|
E: EntityTrait,
|
||||||
<E as EntityTrait>::Model: Sync,
|
<E as EntityTrait>::Model: Sync,
|
||||||
<E as EntityTrait>::Model: IntoActiveModel<A>,
|
<E as EntityTrait>::Model: IntoActiveModel<A>,
|
||||||
A: ActiveModelTrait<Entity = E> + sea_orm::ActiveModelBehavior + std::marker::Send + 'static,
|
A: ActiveModelTrait<Entity = E> + sea_orm::ActiveModelBehavior + std::marker::Send,
|
||||||
{
|
{
|
||||||
EntityCreateBatchMutationBuilder::to_field::<E, A>(builder_context, active_model_hooks)
|
let entity_create_batch_mutation_builder = EntityCreateBatchMutationBuilder {
|
||||||
|
context: builder_context,
|
||||||
|
};
|
||||||
|
entity_create_batch_mutation_builder.to_field::<E, A>(active_model_hooks)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_entity_update_mutation_field<E>(
|
pub fn generate_entity_update_mutation_field<E>(
|
||||||
builder_context: Arc<BuilderContext>,
|
builder_context: &'static BuilderContext,
|
||||||
mutation_fn: UpdateMutationFn<E::Model>,
|
mutation_fn: UpdateMutationFn<E::Model>,
|
||||||
) -> Field
|
) -> Field
|
||||||
where
|
where
|
||||||
E: EntityTrait,
|
E: EntityTrait,
|
||||||
<E as EntityTrait>::Model: Sync,
|
<E as EntityTrait>::Model: Sync,
|
||||||
{
|
{
|
||||||
EntityUpdateMutationBuilder::to_field_with_mutation_fn::<E>(
|
let entity_update_mutation_builder = EntityUpdateMutationBuilder {
|
||||||
builder_context.clone(),
|
context: builder_context,
|
||||||
Arc::new(move |resolver_ctx, filters, input_object| {
|
};
|
||||||
let result = resolver_ctx
|
entity_update_mutation_builder.to_field_with_mutation_fn::<E>(Arc::new(
|
||||||
.data::<Arc<dyn AppContextTrait>>()
|
move |resolver_ctx, filters, input_object| {
|
||||||
.map(|app_ctx| {
|
let mutation_fn = mutation_fn.clone();
|
||||||
mutation_fn(
|
|
||||||
&resolver_ctx,
|
Box::pin(async move {
|
||||||
app_ctx.clone(),
|
let app_ctx = resolver_ctx.data::<Arc<dyn AppContextTrait>>()?;
|
||||||
get_filter_conditions::<E>(&resolver_ctx, &builder_context, filters),
|
|
||||||
input_object,
|
let result = mutation_fn(
|
||||||
)
|
resolver_ctx,
|
||||||
});
|
app_ctx.clone(),
|
||||||
Box::pin(async move { result?.await.map_err(async_graphql::Error::new_with_source) })
|
get_filter_conditions::<E>(resolver_ctx, builder_context, filters),
|
||||||
}),
|
input_object,
|
||||||
)
|
)
|
||||||
|
.await
|
||||||
|
.map_err(async_graphql::Error::new_with_source)?;
|
||||||
|
|
||||||
|
Ok(result)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_entity_default_update_mutation_field<E, A>(
|
pub fn generate_entity_default_update_mutation_field<E, A>(
|
||||||
builder_context: Arc<BuilderContext>,
|
builder_context: &'static BuilderContext,
|
||||||
active_model_hooks: bool,
|
active_model_hooks: bool,
|
||||||
) -> Field
|
) -> Field
|
||||||
where
|
where
|
||||||
E: EntityTrait,
|
E: EntityTrait,
|
||||||
<E as EntityTrait>::Model: Sync,
|
<E as EntityTrait>::Model: Sync,
|
||||||
<E as EntityTrait>::Model: IntoActiveModel<A>,
|
<E as EntityTrait>::Model: IntoActiveModel<A>,
|
||||||
A: ActiveModelTrait<Entity = E> + sea_orm::ActiveModelBehavior + std::marker::Send + 'static,
|
A: ActiveModelTrait<Entity = E> + sea_orm::ActiveModelBehavior + std::marker::Send,
|
||||||
{
|
{
|
||||||
EntityUpdateMutationBuilder::to_field::<E, A>(builder_context, active_model_hooks)
|
let entity_update_mutation_builder = EntityUpdateMutationBuilder {
|
||||||
|
context: builder_context,
|
||||||
|
};
|
||||||
|
entity_update_mutation_builder.to_field::<E, A>(active_model_hooks)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_entity_delete_mutation_field<E>(
|
pub fn generate_entity_delete_mutation_field<E>(
|
||||||
builder_context: Arc<BuilderContext>,
|
builder_context: &'static BuilderContext,
|
||||||
mutation_fn: DeleteMutationFn,
|
mutation_fn: DeleteMutationFn,
|
||||||
) -> Field
|
) -> Field
|
||||||
where
|
where
|
||||||
E: EntityTrait,
|
E: EntityTrait,
|
||||||
<E as EntityTrait>::Model: Sync,
|
<E as EntityTrait>::Model: Sync,
|
||||||
{
|
{
|
||||||
EntityDeleteMutationBuilder::to_field_with_mutation_fn::<E>(
|
let entity_delete_mutation_builder = EntityDeleteMutationBuilder {
|
||||||
builder_context.clone(),
|
context: builder_context,
|
||||||
Arc::new(move |resolver_ctx, filters| {
|
};
|
||||||
let result = resolver_ctx
|
entity_delete_mutation_builder.to_field_with_mutation_fn::<E>(Arc::new(
|
||||||
.data::<Arc<dyn AppContextTrait>>()
|
move |resolver_ctx, filters| {
|
||||||
.map(|app_ctx| {
|
let mutation_fn = mutation_fn.clone();
|
||||||
mutation_fn(
|
|
||||||
&resolver_ctx,
|
Box::pin(async move {
|
||||||
app_ctx.clone(),
|
let app_ctx = resolver_ctx.data::<Arc<dyn AppContextTrait>>()?;
|
||||||
get_filter_conditions::<E>(&resolver_ctx, &builder_context, filters),
|
let result = mutation_fn(
|
||||||
)
|
resolver_ctx,
|
||||||
});
|
app_ctx.clone(),
|
||||||
Box::pin(async move { result?.await.map_err(async_graphql::Error::new_with_source) })
|
get_filter_conditions::<E>(resolver_ctx, builder_context, filters),
|
||||||
}),
|
)
|
||||||
)
|
.await
|
||||||
|
.map_err(async_graphql::Error::new_with_source)?;
|
||||||
|
|
||||||
|
Ok(result)
|
||||||
|
})
|
||||||
|
},
|
||||||
|
))
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn generate_entity_default_delete_mutation_field<E, A>(
|
pub fn generate_entity_default_delete_mutation_field<E, A>(
|
||||||
builder_context: Arc<BuilderContext>,
|
builder_context: &'static BuilderContext,
|
||||||
active_model_hooks: bool,
|
active_model_hooks: bool,
|
||||||
) -> Field
|
) -> Field
|
||||||
where
|
where
|
||||||
E: EntityTrait,
|
E: EntityTrait,
|
||||||
<E as EntityTrait>::Model: Sync,
|
<E as EntityTrait>::Model: Sync + IntoActiveModel<A>,
|
||||||
<E as EntityTrait>::Model: IntoActiveModel<A>,
|
A: ActiveModelTrait<Entity = E> + sea_orm::ActiveModelBehavior + std::marker::Send,
|
||||||
A: ActiveModelTrait<Entity = E> + sea_orm::ActiveModelBehavior + std::marker::Send + 'static,
|
|
||||||
{
|
{
|
||||||
EntityDeleteMutationBuilder::to_field::<E, A>(builder_context, active_model_hooks)
|
let entity_delete_mutation_builder = EntityDeleteMutationBuilder {
|
||||||
|
context: builder_context,
|
||||||
|
};
|
||||||
|
entity_delete_mutation_builder.to_field::<E, A>(active_model_hooks)
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn register_entity_default_mutations<E, A>(
|
pub fn register_entity_default_mutations<E, A>(
|
||||||
@ -316,37 +349,31 @@ pub fn register_entity_default_mutations<E, A>(
|
|||||||
where
|
where
|
||||||
E: EntityTrait,
|
E: EntityTrait,
|
||||||
<E as EntityTrait>::Model: Sync + IntoActiveModel<A>,
|
<E as EntityTrait>::Model: Sync + IntoActiveModel<A>,
|
||||||
A: ActiveModelTrait<Entity = E> + sea_orm::ActiveModelBehavior + std::marker::Send + 'static,
|
A: ActiveModelTrait<Entity = E> + sea_orm::ActiveModelBehavior + std::marker::Send,
|
||||||
{
|
{
|
||||||
let builder_context = &builder.context;
|
let builder_context = builder.context;
|
||||||
builder
|
builder
|
||||||
.outputs
|
.outputs
|
||||||
.push(generate_entity_default_basic_entity_object::<E>(
|
.push(generate_entity_default_basic_entity_object::<E>(
|
||||||
builder_context.clone(),
|
builder_context,
|
||||||
));
|
));
|
||||||
|
|
||||||
builder.inputs.extend([
|
builder.inputs.extend([
|
||||||
generate_entity_default_insert_input_object::<E>(&builder.context),
|
generate_entity_default_insert_input_object::<E>(builder_context),
|
||||||
generate_entity_default_update_input_object::<E>(&builder.context),
|
generate_entity_default_update_input_object::<E>(builder_context),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
builder.mutations.extend([
|
builder.mutations.extend([
|
||||||
generate_entity_default_create_one_mutation_field::<E, A>(
|
generate_entity_default_create_one_mutation_field::<E, A>(
|
||||||
builder_context.clone(),
|
builder_context,
|
||||||
active_model_hooks,
|
active_model_hooks,
|
||||||
),
|
),
|
||||||
generate_entity_default_create_batch_mutation_field::<E, A>(
|
generate_entity_default_create_batch_mutation_field::<E, A>(
|
||||||
builder_context.clone(),
|
builder_context,
|
||||||
active_model_hooks,
|
|
||||||
),
|
|
||||||
generate_entity_default_update_mutation_field::<E, A>(
|
|
||||||
builder_context.clone(),
|
|
||||||
active_model_hooks,
|
|
||||||
),
|
|
||||||
generate_entity_default_delete_mutation_field::<E, A>(
|
|
||||||
builder_context.clone(),
|
|
||||||
active_model_hooks,
|
active_model_hooks,
|
||||||
),
|
),
|
||||||
|
generate_entity_default_update_mutation_field::<E, A>(builder_context, active_model_hooks),
|
||||||
|
generate_entity_default_delete_mutation_field::<E, A>(builder_context, active_model_hooks),
|
||||||
]);
|
]);
|
||||||
|
|
||||||
builder
|
builder
|
||||||
@ -364,7 +391,7 @@ where
|
|||||||
{
|
{
|
||||||
builder.register_entity::<T>(
|
builder.register_entity::<T>(
|
||||||
<RE as sea_orm::Iterable>::iter()
|
<RE as sea_orm::Iterable>::iter()
|
||||||
.map(|rel| RelationBuilder::get_relation(&rel, builder.context.clone()))
|
.map(|rel| RelationBuilder::get_relation(&rel, builder.context))
|
||||||
.collect(),
|
.collect(),
|
||||||
);
|
);
|
||||||
builder = builder.register_entity_dataloader_one_to_one(entity, tokio::spawn);
|
builder = builder.register_entity_dataloader_one_to_one(entity, tokio::spawn);
|
||||||
@ -380,7 +407,7 @@ pub(crate) fn register_entity_default_writable_impl<T, RE, A, I>(
|
|||||||
where
|
where
|
||||||
T: EntityTrait,
|
T: EntityTrait,
|
||||||
<T as EntityTrait>::Model: Sync + IntoActiveModel<A>,
|
<T as EntityTrait>::Model: Sync + IntoActiveModel<A>,
|
||||||
A: ActiveModelTrait<Entity = T> + sea_orm::ActiveModelBehavior + std::marker::Send + 'static,
|
A: ActiveModelTrait<Entity = T> + sea_orm::ActiveModelBehavior + std::marker::Send,
|
||||||
RE: sea_orm::Iterable<Iterator = I> + RelationBuilder,
|
RE: sea_orm::Iterable<Iterator = I> + RelationBuilder,
|
||||||
I: Iterator<Item = RE> + Clone + DoubleEndedIterator + ExactSizeIterator + FusedIterator,
|
I: Iterator<Item = RE> + Clone + DoubleEndedIterator + ExactSizeIterator + FusedIterator,
|
||||||
{
|
{
|
||||||
|
@ -1,5 +1,3 @@
|
|||||||
use std::sync::Arc;
|
|
||||||
|
|
||||||
use async_graphql::{
|
use async_graphql::{
|
||||||
Error as GraphqlError,
|
Error as GraphqlError,
|
||||||
dynamic::{ResolverContext, Scalar, SchemaError},
|
dynamic::{ResolverContext, Scalar, SchemaError},
|
||||||
@ -7,7 +5,6 @@ use async_graphql::{
|
|||||||
};
|
};
|
||||||
use convert_case::Case;
|
use convert_case::Case;
|
||||||
use itertools::Itertools;
|
use itertools::Itertools;
|
||||||
use jsonschema::Validator;
|
|
||||||
use rust_decimal::{Decimal, prelude::FromPrimitive};
|
use rust_decimal::{Decimal, prelude::FromPrimitive};
|
||||||
use sea_orm::{
|
use sea_orm::{
|
||||||
Condition, EntityTrait,
|
Condition, EntityTrait,
|
||||||
@ -946,16 +943,20 @@ where
|
|||||||
T: EntityTrait,
|
T: EntityTrait,
|
||||||
<T as EntityTrait>::Model: Sync,
|
<T as EntityTrait>::Model: Sync,
|
||||||
{
|
{
|
||||||
|
let entity_column_name = get_entity_and_column_name::<T>(context, column);
|
||||||
context.filter_types.overwrites.insert(
|
context.filter_types.overwrites.insert(
|
||||||
get_entity_and_column_name::<T>(context, column),
|
get_entity_and_column_name::<T>(context, column),
|
||||||
Some(FilterType::Custom(JSONB_FILTER_NAME.to_string())),
|
Some(FilterType::Custom(JSONB_FILTER_NAME.to_string())),
|
||||||
);
|
);
|
||||||
|
context.filter_types.condition_functions.insert(
|
||||||
|
entity_column_name.clone(),
|
||||||
|
generate_jsonb_filter_condition_function::<T>(context, column),
|
||||||
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn try_convert_jsonb_input_for_entity<T, S>(
|
pub fn try_convert_jsonb_input_for_entity<T, S>(
|
||||||
context: &mut BuilderContext,
|
context: &mut BuilderContext,
|
||||||
column: &T::Column,
|
column: &T::Column,
|
||||||
validator: &'static Validator,
|
|
||||||
case: Option<Case<'static>>,
|
case: Option<Case<'static>>,
|
||||||
) where
|
) where
|
||||||
T: EntityTrait,
|
T: EntityTrait,
|
||||||
@ -965,19 +966,14 @@ pub fn try_convert_jsonb_input_for_entity<T, S>(
|
|||||||
let entity_column_name = get_entity_and_column_name::<T>(context, column);
|
let entity_column_name = get_entity_and_column_name::<T>(context, column);
|
||||||
context.types.input_conversions.insert(
|
context.types.input_conversions.insert(
|
||||||
entity_column_name.clone(),
|
entity_column_name.clone(),
|
||||||
Arc::new(move |_resolve_context, accessor| {
|
Box::new(move |_resolve_context, accessor| {
|
||||||
let mut json_value = accessor.as_value().clone().into_json().map_err(|err| {
|
let mut json_value: serde_json::Value = accessor.deserialize()?;
|
||||||
SeaographyError::TypeConversionError(
|
|
||||||
err.to_string(),
|
|
||||||
format!("Json - {entity_column_name}"),
|
|
||||||
)
|
|
||||||
})?;
|
|
||||||
|
|
||||||
if let Some(case) = case {
|
if let Some(case) = case {
|
||||||
json_value = convert_json_keys(json_value, case);
|
json_value = convert_json_keys(json_value, case);
|
||||||
}
|
}
|
||||||
|
|
||||||
validator.validate(&json_value).map_err(|err| {
|
serde_json::from_value::<S>(json_value.clone()).map_err(|err| {
|
||||||
SeaographyError::TypeConversionError(
|
SeaographyError::TypeConversionError(
|
||||||
err.to_string(),
|
err.to_string(),
|
||||||
format!("Json - {entity_column_name}"),
|
format!("Json - {entity_column_name}"),
|
||||||
@ -997,10 +993,10 @@ pub fn convert_jsonb_output_for_entity<T>(
|
|||||||
T: EntityTrait,
|
T: EntityTrait,
|
||||||
<T as EntityTrait>::Model: Sync,
|
<T as EntityTrait>::Model: Sync,
|
||||||
{
|
{
|
||||||
let entity_column_key = get_entity_and_column_name::<T>(context, column);
|
let entity_column_name = get_entity_and_column_name::<T>(context, column);
|
||||||
context.types.output_conversions.insert(
|
context.types.output_conversions.insert(
|
||||||
entity_column_key.clone(),
|
entity_column_name.clone(),
|
||||||
Arc::new(move |value| {
|
Box::new(move |value| {
|
||||||
if let sea_orm::Value::Json(Some(json)) = value {
|
if let sea_orm::Value::Json(Some(json)) = value {
|
||||||
let mut json_value = json.as_ref().clone();
|
let mut json_value = json.as_ref().clone();
|
||||||
if let Some(case) = case {
|
if let Some(case) = case {
|
||||||
@ -1009,14 +1005,14 @@ pub fn convert_jsonb_output_for_entity<T>(
|
|||||||
let result = async_graphql::Value::from_json(json_value).map_err(|err| {
|
let result = async_graphql::Value::from_json(json_value).map_err(|err| {
|
||||||
SeaographyError::TypeConversionError(
|
SeaographyError::TypeConversionError(
|
||||||
err.to_string(),
|
err.to_string(),
|
||||||
format!("Json - {entity_column_key}"),
|
format!("Json - {entity_column_name}"),
|
||||||
)
|
)
|
||||||
})?;
|
})?;
|
||||||
Ok(result)
|
Ok(result)
|
||||||
} else {
|
} else {
|
||||||
Err(SeaographyError::TypeConversionError(
|
Err(SeaographyError::TypeConversionError(
|
||||||
"value should be json".to_string(),
|
"value should be json".to_string(),
|
||||||
format!("Json - {entity_column_key}"),
|
format!("Json - {entity_column_name}"),
|
||||||
))
|
))
|
||||||
}
|
}
|
||||||
}),
|
}),
|
||||||
|
@ -59,24 +59,27 @@ pub fn build_schema(
|
|||||||
) -> Result<Schema, SchemaError> {
|
) -> Result<Schema, SchemaError> {
|
||||||
let database = app_ctx.db().as_ref().clone();
|
let database = app_ctx.db().as_ref().clone();
|
||||||
|
|
||||||
let context = Arc::new({
|
let context = CONTEXT.get_or_init(|| {
|
||||||
let mut context = BuilderContext::default();
|
let mut context = BuilderContext::default();
|
||||||
// basic
|
|
||||||
renormalize_filter_field_names_to_schema_context(&mut context);
|
renormalize_filter_field_names_to_schema_context(&mut context);
|
||||||
renormalize_data_field_names_to_schema_context(&mut context);
|
renormalize_data_field_names_to_schema_context(&mut context);
|
||||||
// domains
|
|
||||||
register_feeds_to_schema_context(&mut context);
|
{
|
||||||
register_subscribers_to_schema_context(&mut context);
|
// domains
|
||||||
register_subscriptions_to_schema_context(&mut context);
|
register_feeds_to_schema_context(&mut context);
|
||||||
register_subscriber_tasks_to_schema_context(&mut context);
|
register_subscribers_to_schema_context(&mut context);
|
||||||
register_credential3rd_to_schema_context(&mut context, app_ctx.clone());
|
register_subscriptions_to_schema_context(&mut context);
|
||||||
register_downloaders_to_schema_context(&mut context);
|
register_subscriber_tasks_to_schema_context(&mut context);
|
||||||
register_downloads_to_schema_context(&mut context);
|
register_credential3rd_to_schema_context(&mut context, app_ctx.clone());
|
||||||
register_episodes_to_schema_context(&mut context);
|
register_downloaders_to_schema_context(&mut context);
|
||||||
register_subscription_bangumi_to_schema_context(&mut context);
|
register_downloads_to_schema_context(&mut context);
|
||||||
register_subscription_episode_to_schema_context(&mut context);
|
register_episodes_to_schema_context(&mut context);
|
||||||
register_bangumi_to_schema_context(&mut context);
|
register_subscription_bangumi_to_schema_context(&mut context);
|
||||||
register_cron_to_schema_context(&mut context);
|
register_subscription_episode_to_schema_context(&mut context);
|
||||||
|
register_bangumi_to_schema_context(&mut context);
|
||||||
|
register_cron_to_schema_context(&mut context);
|
||||||
|
}
|
||||||
context
|
context
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -3,8 +3,8 @@ use sea_orm::{ActiveValue, entity::prelude::*};
|
|||||||
|
|
||||||
use crate::task::SubscriberTaskTrait;
|
use crate::task::SubscriberTaskTrait;
|
||||||
pub use crate::task::{
|
pub use crate::task::{
|
||||||
SubscriberTask, SubscriberTaskType, SubscriberTaskTypeEnum, SubscriberTaskTypeVariant,
|
SubscriberTask, SubscriberTaskInput, SubscriberTaskType, SubscriberTaskTypeEnum,
|
||||||
SubscriberTaskTypeVariantIter, subscriber_task_schema,
|
SubscriberTaskTypeVariant, SubscriberTaskTypeVariantIter,
|
||||||
};
|
};
|
||||||
|
|
||||||
#[derive(Clone, Debug, PartialEq, Eq, DeriveActiveEnum, EnumIter, DeriveDisplay)]
|
#[derive(Clone, Debug, PartialEq, Eq, DeriveActiveEnum, EnumIter, DeriveDisplay)]
|
||||||
|
@ -42,9 +42,13 @@ where
|
|||||||
}
|
}
|
||||||
|
|
||||||
pub trait SubscriberTaskTrait: AsyncTaskTrait {
|
pub trait SubscriberTaskTrait: AsyncTaskTrait {
|
||||||
|
type InputType: Serialize + DeserializeOwned + Sized + Send;
|
||||||
|
|
||||||
fn get_subscriber_id(&self) -> i32;
|
fn get_subscriber_id(&self) -> i32;
|
||||||
|
|
||||||
fn get_cron_id(&self) -> Option<i32>;
|
fn get_cron_id(&self) -> Option<i32>;
|
||||||
|
|
||||||
|
fn from_input(input: Self::InputType, subscriber_id: i32) -> Self;
|
||||||
}
|
}
|
||||||
|
|
||||||
pub trait SystemTaskTrait: AsyncTaskTrait {}
|
pub trait SystemTaskTrait: AsyncTaskTrait {}
|
||||||
|
@ -12,10 +12,10 @@ pub use core::{
|
|||||||
pub use config::TaskConfig;
|
pub use config::TaskConfig;
|
||||||
pub use r#extern::{ApalisJobs, ApalisSchema};
|
pub use r#extern::{ApalisJobs, ApalisSchema};
|
||||||
pub use registry::{
|
pub use registry::{
|
||||||
OptimizeImageTask, SubscriberTask, SubscriberTaskType, SubscriberTaskTypeEnum,
|
OptimizeImageTask, SubscriberTask, SubscriberTaskInput, SubscriberTaskType,
|
||||||
SubscriberTaskTypeVariant, SubscriberTaskTypeVariantIter, SyncOneSubscriptionFeedsFullTask,
|
SubscriberTaskTypeEnum, SubscriberTaskTypeVariant, SubscriberTaskTypeVariantIter,
|
||||||
SyncOneSubscriptionFeedsIncrementalTask, SyncOneSubscriptionSourcesTask, SystemTask,
|
SyncOneSubscriptionFeedsFullTask, SyncOneSubscriptionFeedsIncrementalTask,
|
||||||
SystemTaskType, SystemTaskTypeEnum, SystemTaskTypeVariant, SystemTaskTypeVariantIter,
|
SyncOneSubscriptionSourcesTask, SystemTask, SystemTaskType, SystemTaskTypeEnum,
|
||||||
subscriber_task_schema,
|
SystemTaskTypeVariant, SystemTaskTypeVariantIter,
|
||||||
};
|
};
|
||||||
pub use service::TaskService;
|
pub use service::TaskService;
|
||||||
|
@ -2,10 +2,9 @@ mod subscriber;
|
|||||||
mod system;
|
mod system;
|
||||||
|
|
||||||
pub use subscriber::{
|
pub use subscriber::{
|
||||||
SubscriberTask, SubscriberTaskType, SubscriberTaskTypeEnum, SubscriberTaskTypeVariant,
|
SubscriberTask, SubscriberTaskInput, SubscriberTaskType, SubscriberTaskTypeEnum,
|
||||||
SubscriberTaskTypeVariantIter, SyncOneSubscriptionFeedsFullTask,
|
SubscriberTaskTypeVariant, SubscriberTaskTypeVariantIter, SyncOneSubscriptionFeedsFullTask,
|
||||||
SyncOneSubscriptionFeedsIncrementalTask, SyncOneSubscriptionSourcesTask,
|
SyncOneSubscriptionFeedsIncrementalTask, SyncOneSubscriptionSourcesTask,
|
||||||
subscriber_task_schema,
|
|
||||||
};
|
};
|
||||||
pub use system::{
|
pub use system::{
|
||||||
OptimizeImageTask, SystemTask, SystemTaskType, SystemTaskTypeEnum, SystemTaskTypeVariant,
|
OptimizeImageTask, SystemTask, SystemTaskType, SystemTaskTypeEnum, SystemTaskTypeVariant,
|
||||||
|
@ -6,16 +6,36 @@ macro_rules! register_subscriber_task_type {
|
|||||||
}
|
}
|
||||||
) => {
|
) => {
|
||||||
$(#[$type_meta])*
|
$(#[$type_meta])*
|
||||||
#[derive(typed_builder::TypedBuilder, schemars::JsonSchema, ts_rs::TS)]
|
#[derive(typed_builder::TypedBuilder, ts_rs::TS, serde::Serialize, serde::Deserialize)]
|
||||||
#[ts(export, rename_all = "camelCase")]
|
#[ts(export, rename_all = "camelCase")]
|
||||||
$task_vis struct $task_name {
|
$task_vis struct $task_name {
|
||||||
$($(#[$field_meta])* pub $field_name: $field_type,)*
|
$($(#[$field_meta])* pub $field_name: $field_type,)*
|
||||||
pub subscriber_id: i32,
|
pub subscriber_id: i32,
|
||||||
#[builder(default = None)]
|
#[builder(default = None)]
|
||||||
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
pub cron_id: Option<i32>,
|
pub cron_id: Option<i32>,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
paste::paste! {
|
||||||
|
$(#[$type_meta])*
|
||||||
|
#[derive(ts_rs::TS, serde::Serialize, serde::Deserialize)]
|
||||||
|
#[serde(rename_all = "camelCase")]
|
||||||
|
#[ts(export, rename_all = "camelCase")]
|
||||||
|
$task_vis struct [<$task_name Input>] {
|
||||||
|
$($(#[$field_meta])* pub $field_name: $field_type,)*
|
||||||
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
|
pub subscriber_id: Option<i32>,
|
||||||
|
#[serde(default, skip_serializing_if = "Option::is_none")]
|
||||||
|
pub cron_id: Option<i32>,
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
impl $crate::task::SubscriberTaskTrait for $task_name {
|
impl $crate::task::SubscriberTaskTrait for $task_name {
|
||||||
|
paste::paste! {
|
||||||
|
type InputType = [<$task_name Input>];
|
||||||
|
}
|
||||||
|
|
||||||
fn get_subscriber_id(&self) -> i32 {
|
fn get_subscriber_id(&self) -> i32 {
|
||||||
self.subscriber_id
|
self.subscriber_id
|
||||||
}
|
}
|
||||||
@ -23,6 +43,14 @@ macro_rules! register_subscriber_task_type {
|
|||||||
fn get_cron_id(&self) -> Option<i32> {
|
fn get_cron_id(&self) -> Option<i32> {
|
||||||
self.cron_id
|
self.cron_id
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn from_input(input: Self::InputType, subscriber_id: i32) -> Self {
|
||||||
|
Self {
|
||||||
|
$($field_name: input.$field_name,)*
|
||||||
|
cron_id: input.cron_id,
|
||||||
|
subscriber_id: input.subscriber_id.unwrap_or(subscriber_id),
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -1,22 +1,17 @@
|
|||||||
mod base;
|
mod base;
|
||||||
mod subscription;
|
mod subscription;
|
||||||
|
|
||||||
use jsonschema::Validator;
|
|
||||||
use once_cell::sync::OnceCell;
|
|
||||||
use schemars::JsonSchema;
|
|
||||||
use sea_orm::{DeriveActiveEnum, DeriveDisplay, EnumIter, FromJsonQueryResult};
|
use sea_orm::{DeriveActiveEnum, DeriveDisplay, EnumIter, FromJsonQueryResult};
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
pub use subscription::{
|
pub use subscription::{
|
||||||
SyncOneSubscriptionFeedsFullTask, SyncOneSubscriptionFeedsIncrementalTask,
|
SyncOneSubscriptionFeedsFullTask, SyncOneSubscriptionFeedsIncrementalTask,
|
||||||
SyncOneSubscriptionSourcesTask,
|
SyncOneSubscriptionSourcesTask,
|
||||||
};
|
};
|
||||||
use ts_rs::TS;
|
|
||||||
|
|
||||||
macro_rules! register_subscriber_task_types {
|
macro_rules! register_subscriber_task_types {
|
||||||
(
|
(
|
||||||
task_type_enum: {
|
task_type_enum: {
|
||||||
$(#[$type_enum_meta:meta])*
|
$(#[$type_enum_meta:meta])*
|
||||||
pub enum $type_enum_name:ident {
|
$type_vis:vis enum $type_enum_name:ident {
|
||||||
$(
|
$(
|
||||||
$(#[$variant_meta:meta])*
|
$(#[$variant_meta:meta])*
|
||||||
$variant:ident => $string_value:literal
|
$variant:ident => $string_value:literal
|
||||||
@ -25,7 +20,7 @@ macro_rules! register_subscriber_task_types {
|
|||||||
},
|
},
|
||||||
task_enum: {
|
task_enum: {
|
||||||
$(#[$task_enum_meta:meta])*
|
$(#[$task_enum_meta:meta])*
|
||||||
pub enum $task_enum_name:ident {
|
$task_vis:vis enum $task_enum_name:ident {
|
||||||
$(
|
$(
|
||||||
$(#[$task_variant_meta:meta])*
|
$(#[$task_variant_meta:meta])*
|
||||||
$task_variant:ident($task_type:ty)
|
$task_variant:ident($task_type:ty)
|
||||||
@ -34,8 +29,9 @@ macro_rules! register_subscriber_task_types {
|
|||||||
}
|
}
|
||||||
) => {
|
) => {
|
||||||
$(#[$type_enum_meta])*
|
$(#[$type_enum_meta])*
|
||||||
|
#[derive(serde::Serialize, serde::Deserialize)]
|
||||||
#[sea_orm(rs_type = "String", db_type = "Text")]
|
#[sea_orm(rs_type = "String", db_type = "Text")]
|
||||||
pub enum $type_enum_name {
|
$type_vis enum $type_enum_name {
|
||||||
$(
|
$(
|
||||||
$(#[$variant_meta])*
|
$(#[$variant_meta])*
|
||||||
#[serde(rename = $string_value)]
|
#[serde(rename = $string_value)]
|
||||||
@ -46,9 +42,10 @@ macro_rules! register_subscriber_task_types {
|
|||||||
|
|
||||||
|
|
||||||
$(#[$task_enum_meta])*
|
$(#[$task_enum_meta])*
|
||||||
|
#[derive(ts_rs::TS, serde::Serialize, serde::Deserialize)]
|
||||||
#[serde(tag = "task_type")]
|
#[serde(tag = "task_type")]
|
||||||
#[ts(export, rename_all = "camelCase", tag = "taskType")]
|
#[ts(export,rename = "SubscriberTaskType", rename_all = "camelCase", tag = "taskType")]
|
||||||
pub enum $task_enum_name {
|
$task_vis enum $task_enum_name {
|
||||||
$(
|
$(
|
||||||
$(#[$task_variant_meta])*
|
$(#[$task_variant_meta])*
|
||||||
#[serde(rename = $string_value)]
|
#[serde(rename = $string_value)]
|
||||||
@ -56,6 +53,20 @@ macro_rules! register_subscriber_task_types {
|
|||||||
)*
|
)*
|
||||||
}
|
}
|
||||||
|
|
||||||
|
paste::paste! {
|
||||||
|
$(#[$task_enum_meta])*
|
||||||
|
#[derive(ts_rs::TS, serde::Serialize, serde::Deserialize)]
|
||||||
|
#[serde(tag = "taskType", rename_all = "camelCase")]
|
||||||
|
#[ts(export,rename_all = "camelCase", tag = "taskType")]
|
||||||
|
$task_vis enum [<$task_enum_name Input>] {
|
||||||
|
$(
|
||||||
|
$(#[$task_variant_meta])*
|
||||||
|
#[serde(rename = $string_value)]
|
||||||
|
$task_variant(<$task_type as $crate::task::SubscriberTaskTrait>::InputType),
|
||||||
|
)*
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
impl TryFrom<$task_enum_name> for serde_json::Value {
|
impl TryFrom<$task_enum_name> for serde_json::Value {
|
||||||
type Error = $crate::errors::RecorderError;
|
type Error = $crate::errors::RecorderError;
|
||||||
|
|
||||||
@ -92,6 +103,10 @@ macro_rules! register_subscriber_task_types {
|
|||||||
}
|
}
|
||||||
|
|
||||||
impl $crate::task::SubscriberTaskTrait for $task_enum_name {
|
impl $crate::task::SubscriberTaskTrait for $task_enum_name {
|
||||||
|
paste::paste! {
|
||||||
|
type InputType = [<$task_enum_name Input>];
|
||||||
|
}
|
||||||
|
|
||||||
fn get_subscriber_id(&self) -> i32 {
|
fn get_subscriber_id(&self) -> i32 {
|
||||||
match self {
|
match self {
|
||||||
$(Self::$task_variant(t) =>
|
$(Self::$task_variant(t) =>
|
||||||
@ -105,6 +120,14 @@ macro_rules! register_subscriber_task_types {
|
|||||||
<$task_type as $crate::task::SubscriberTaskTrait>::get_cron_id(t),)*
|
<$task_type as $crate::task::SubscriberTaskTrait>::get_cron_id(t),)*
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fn from_input(input: Self::InputType, subscriber_id: i32) -> Self {
|
||||||
|
match input {
|
||||||
|
$(Self::InputType::$task_variant(t) =>
|
||||||
|
Self::$task_variant(<$task_type as $crate::task::SubscriberTaskTrait>::from_input(t, subscriber_id)),)*
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
$(
|
$(
|
||||||
@ -122,8 +145,6 @@ register_subscriber_task_types!(
|
|||||||
#[derive(
|
#[derive(
|
||||||
Clone,
|
Clone,
|
||||||
Debug,
|
Debug,
|
||||||
Serialize,
|
|
||||||
Deserialize,
|
|
||||||
PartialEq,
|
PartialEq,
|
||||||
Eq,
|
Eq,
|
||||||
Copy,
|
Copy,
|
||||||
@ -138,7 +159,7 @@ register_subscriber_task_types!(
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
task_enum: {
|
task_enum: {
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq, FromJsonQueryResult, JsonSchema, TS)]
|
#[derive(Clone, Debug, PartialEq, Eq, FromJsonQueryResult)]
|
||||||
pub enum SubscriberTask {
|
pub enum SubscriberTask {
|
||||||
SyncOneSubscriptionFeedsIncremental(SyncOneSubscriptionFeedsIncrementalTask),
|
SyncOneSubscriptionFeedsIncremental(SyncOneSubscriptionFeedsIncrementalTask),
|
||||||
SyncOneSubscriptionFeedsFull(SyncOneSubscriptionFeedsFullTask),
|
SyncOneSubscriptionFeedsFull(SyncOneSubscriptionFeedsFullTask),
|
||||||
@ -146,15 +167,3 @@ register_subscriber_task_types!(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
|
||||||
static SUBSCRIBER_TASK_SCHEMA: OnceCell<Validator> = OnceCell::new();
|
|
||||||
|
|
||||||
pub fn subscriber_task_schema() -> &'static Validator {
|
|
||||||
SUBSCRIBER_TASK_SCHEMA.get_or_init(|| {
|
|
||||||
let schema = schemars::schema_for!(SubscriberTask);
|
|
||||||
jsonschema::options()
|
|
||||||
.with_draft(jsonschema::Draft::Draft7)
|
|
||||||
.build(&serde_json::to_value(&schema).unwrap())
|
|
||||||
.unwrap()
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
@ -1,5 +1,4 @@
|
|||||||
use sea_orm::prelude::*;
|
use sea_orm::prelude::*;
|
||||||
use serde::{Deserialize, Serialize};
|
|
||||||
|
|
||||||
use super::base::register_subscriber_task_type;
|
use super::base::register_subscriber_task_type;
|
||||||
use crate::{errors::RecorderResult, models::subscriptions::SubscriptionTrait};
|
use crate::{errors::RecorderResult, models::subscriptions::SubscriptionTrait};
|
||||||
@ -40,7 +39,7 @@ macro_rules! register_subscription_task_type {
|
|||||||
}
|
}
|
||||||
|
|
||||||
register_subscription_task_type! {
|
register_subscription_task_type! {
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||||
pub struct SyncOneSubscriptionFeedsIncrementalTask {
|
pub struct SyncOneSubscriptionFeedsIncrementalTask {
|
||||||
} => async |subscription, ctx| -> RecorderResult<()> {
|
} => async |subscription, ctx| -> RecorderResult<()> {
|
||||||
subscription.sync_feeds_incremental(ctx).await?;
|
subscription.sync_feeds_incremental(ctx).await?;
|
||||||
@ -49,7 +48,7 @@ register_subscription_task_type! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
register_subscription_task_type! {
|
register_subscription_task_type! {
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||||
pub struct SyncOneSubscriptionFeedsFullTask {
|
pub struct SyncOneSubscriptionFeedsFullTask {
|
||||||
} => async |subscription, ctx| -> RecorderResult<()> {
|
} => async |subscription, ctx| -> RecorderResult<()> {
|
||||||
subscription.sync_feeds_full(ctx).await?;
|
subscription.sync_feeds_full(ctx).await?;
|
||||||
@ -58,7 +57,7 @@ register_subscription_task_type! {
|
|||||||
}
|
}
|
||||||
|
|
||||||
register_subscription_task_type! {
|
register_subscription_task_type! {
|
||||||
#[derive(Clone, Debug, Serialize, Deserialize, PartialEq, Eq)]
|
#[derive(Clone, Debug, PartialEq, Eq)]
|
||||||
pub struct SyncOneSubscriptionSourcesTask {
|
pub struct SyncOneSubscriptionSourcesTask {
|
||||||
} => async |subscription, ctx| -> RecorderResult<()> {
|
} => async |subscription, ctx| -> RecorderResult<()> {
|
||||||
subscription.sync_sources(ctx).await?;
|
subscription.sync_sources(ctx).await?;
|
||||||
|
@ -12,6 +12,12 @@ const config: CodegenConfig = {
|
|||||||
},
|
},
|
||||||
config: {
|
config: {
|
||||||
enumsAsConst: true,
|
enumsAsConst: true,
|
||||||
|
scalars: {
|
||||||
|
SubscriberTaskType: {
|
||||||
|
input: 'recorder/bindings/SubscriberTaskInput#SubscriberTaskInput',
|
||||||
|
output: 'recorder/bindings/SubscriberTaskType#SubscriberTaskType',
|
||||||
|
},
|
||||||
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
},
|
},
|
||||||
|
@ -1,6 +1,5 @@
|
|||||||
import type { GetTasksQuery } from '@/infra/graphql/gql/graphql';
|
import type { GetTasksQuery } from '@/infra/graphql/gql/graphql';
|
||||||
import { gql } from '@apollo/client';
|
import { gql } from '@apollo/client';
|
||||||
import type { SubscriberTask } from 'recorder/bindings/SubscriberTask';
|
|
||||||
|
|
||||||
export const GET_TASKS = gql`
|
export const GET_TASKS = gql`
|
||||||
query GetTasks($filter: SubscriberTasksFilterInput!, $orderBy: SubscriberTasksOrderInput!, $pagination: PaginationInput!) {
|
query GetTasks($filter: SubscriberTasksFilterInput!, $orderBy: SubscriberTasksOrderInput!, $pagination: PaginationInput!) {
|
||||||
@ -21,7 +20,11 @@ export const GET_TASKS = gql`
|
|||||||
lockAt,
|
lockAt,
|
||||||
lockBy,
|
lockBy,
|
||||||
doneAt,
|
doneAt,
|
||||||
priority
|
priority,
|
||||||
|
subscription {
|
||||||
|
displayName
|
||||||
|
sourceUrl
|
||||||
|
}
|
||||||
}
|
}
|
||||||
paginationInfo {
|
paginationInfo {
|
||||||
total
|
total
|
||||||
@ -64,11 +67,4 @@ export const RETRY_TASKS = gql`
|
|||||||
}
|
}
|
||||||
`;
|
`;
|
||||||
|
|
||||||
export type SubscriberTaskInsertDto = Omit<SubscriberTask, 'subscriberId'>;
|
export type TaskDto = GetTasksQuery['subscriberTasks']['nodes'][number];
|
||||||
|
|
||||||
export type TaskDto = Omit<
|
|
||||||
GetTasksQuery['subscriberTasks']['nodes'][number],
|
|
||||||
'job'
|
|
||||||
> & {
|
|
||||||
job: SubscriberTask;
|
|
||||||
};
|
|
||||||
|
@ -27,7 +27,7 @@ type Documents = {
|
|||||||
"\n mutation UpdateSubscriptions(\n $data: SubscriptionsUpdateInput!,\n $filter: SubscriptionsFilterInput!,\n ) {\n subscriptionsUpdate (\n data: $data\n filter: $filter\n ) {\n id\n createdAt\n updatedAt\n displayName\n category\n sourceUrl\n enabled\n }\n}\n": typeof types.UpdateSubscriptionsDocument,
|
"\n mutation UpdateSubscriptions(\n $data: SubscriptionsUpdateInput!,\n $filter: SubscriptionsFilterInput!,\n ) {\n subscriptionsUpdate (\n data: $data\n filter: $filter\n ) {\n id\n createdAt\n updatedAt\n displayName\n category\n sourceUrl\n enabled\n }\n}\n": typeof types.UpdateSubscriptionsDocument,
|
||||||
"\n mutation DeleteSubscriptions($filter: SubscriptionsFilterInput) {\n subscriptionsDelete(filter: $filter)\n }\n": typeof types.DeleteSubscriptionsDocument,
|
"\n mutation DeleteSubscriptions($filter: SubscriptionsFilterInput) {\n subscriptionsDelete(filter: $filter)\n }\n": typeof types.DeleteSubscriptionsDocument,
|
||||||
"\nquery GetSubscriptionDetail ($id: Int!) {\n subscriptions(filter: { id: {\n eq: $id\n } }) {\n nodes {\n id\n subscriberId\n displayName\n createdAt\n updatedAt\n category\n sourceUrl\n enabled\n feed {\n nodes {\n id\n createdAt\n updatedAt\n token\n feedType\n feedSource\n }\n }\n subscriberTask {\n nodes {\n id\n taskType\n status\n }\n }\n credential3rd {\n id\n username\n }\n bangumi {\n nodes {\n createdAt\n updatedAt\n id\n mikanBangumiId\n displayName\n season\n seasonRaw\n fansub\n mikanFansubId\n rssLink\n posterLink\n homepage\n }\n }\n }\n }\n}\n": typeof types.GetSubscriptionDetailDocument,
|
"\nquery GetSubscriptionDetail ($id: Int!) {\n subscriptions(filter: { id: {\n eq: $id\n } }) {\n nodes {\n id\n subscriberId\n displayName\n createdAt\n updatedAt\n category\n sourceUrl\n enabled\n feed {\n nodes {\n id\n createdAt\n updatedAt\n token\n feedType\n feedSource\n }\n }\n subscriberTask {\n nodes {\n id\n taskType\n status\n }\n }\n credential3rd {\n id\n username\n }\n bangumi {\n nodes {\n createdAt\n updatedAt\n id\n mikanBangumiId\n displayName\n season\n seasonRaw\n fansub\n mikanFansubId\n rssLink\n posterLink\n homepage\n }\n }\n }\n }\n}\n": typeof types.GetSubscriptionDetailDocument,
|
||||||
"\n query GetTasks($filter: SubscriberTasksFilterInput!, $orderBy: SubscriberTasksOrderInput!, $pagination: PaginationInput!) {\n subscriberTasks(\n pagination: $pagination\n filter: $filter\n orderBy: $orderBy\n ) {\n nodes {\n id,\n job,\n taskType,\n status,\n attempts,\n maxAttempts,\n runAt,\n lastError,\n lockAt,\n lockBy,\n doneAt,\n priority\n }\n paginationInfo {\n total\n pages\n }\n }\n }\n": typeof types.GetTasksDocument,
|
"\n query GetTasks($filter: SubscriberTasksFilterInput!, $orderBy: SubscriberTasksOrderInput!, $pagination: PaginationInput!) {\n subscriberTasks(\n pagination: $pagination\n filter: $filter\n orderBy: $orderBy\n ) {\n nodes {\n id,\n job,\n taskType,\n status,\n attempts,\n maxAttempts,\n runAt,\n lastError,\n lockAt,\n lockBy,\n doneAt,\n priority,\n subscription {\n displayName\n sourceUrl\n }\n }\n paginationInfo {\n total\n pages\n }\n }\n }\n": typeof types.GetTasksDocument,
|
||||||
"\n mutation InsertSubscriberTask($data: SubscriberTasksInsertInput!) {\n subscriberTasksCreateOne(data: $data) {\n id\n }\n }\n": typeof types.InsertSubscriberTaskDocument,
|
"\n mutation InsertSubscriberTask($data: SubscriberTasksInsertInput!) {\n subscriberTasksCreateOne(data: $data) {\n id\n }\n }\n": typeof types.InsertSubscriberTaskDocument,
|
||||||
"\n mutation DeleteTasks($filter: SubscriberTasksFilterInput!) {\n subscriberTasksDelete(filter: $filter)\n }\n": typeof types.DeleteTasksDocument,
|
"\n mutation DeleteTasks($filter: SubscriberTasksFilterInput!) {\n subscriberTasksDelete(filter: $filter)\n }\n": typeof types.DeleteTasksDocument,
|
||||||
"\n mutation RetryTasks($filter: SubscriberTasksFilterInput!) {\n subscriberTasksRetryOne(filter: $filter) {\n id,\n job,\n taskType,\n status,\n attempts,\n maxAttempts,\n runAt,\n lastError,\n lockAt,\n lockBy,\n doneAt,\n priority\n }\n }\n": typeof types.RetryTasksDocument,
|
"\n mutation RetryTasks($filter: SubscriberTasksFilterInput!) {\n subscriberTasksRetryOne(filter: $filter) {\n id,\n job,\n taskType,\n status,\n attempts,\n maxAttempts,\n runAt,\n lastError,\n lockAt,\n lockBy,\n doneAt,\n priority\n }\n }\n": typeof types.RetryTasksDocument,
|
||||||
@ -46,7 +46,7 @@ const documents: Documents = {
|
|||||||
"\n mutation UpdateSubscriptions(\n $data: SubscriptionsUpdateInput!,\n $filter: SubscriptionsFilterInput!,\n ) {\n subscriptionsUpdate (\n data: $data\n filter: $filter\n ) {\n id\n createdAt\n updatedAt\n displayName\n category\n sourceUrl\n enabled\n }\n}\n": types.UpdateSubscriptionsDocument,
|
"\n mutation UpdateSubscriptions(\n $data: SubscriptionsUpdateInput!,\n $filter: SubscriptionsFilterInput!,\n ) {\n subscriptionsUpdate (\n data: $data\n filter: $filter\n ) {\n id\n createdAt\n updatedAt\n displayName\n category\n sourceUrl\n enabled\n }\n}\n": types.UpdateSubscriptionsDocument,
|
||||||
"\n mutation DeleteSubscriptions($filter: SubscriptionsFilterInput) {\n subscriptionsDelete(filter: $filter)\n }\n": types.DeleteSubscriptionsDocument,
|
"\n mutation DeleteSubscriptions($filter: SubscriptionsFilterInput) {\n subscriptionsDelete(filter: $filter)\n }\n": types.DeleteSubscriptionsDocument,
|
||||||
"\nquery GetSubscriptionDetail ($id: Int!) {\n subscriptions(filter: { id: {\n eq: $id\n } }) {\n nodes {\n id\n subscriberId\n displayName\n createdAt\n updatedAt\n category\n sourceUrl\n enabled\n feed {\n nodes {\n id\n createdAt\n updatedAt\n token\n feedType\n feedSource\n }\n }\n subscriberTask {\n nodes {\n id\n taskType\n status\n }\n }\n credential3rd {\n id\n username\n }\n bangumi {\n nodes {\n createdAt\n updatedAt\n id\n mikanBangumiId\n displayName\n season\n seasonRaw\n fansub\n mikanFansubId\n rssLink\n posterLink\n homepage\n }\n }\n }\n }\n}\n": types.GetSubscriptionDetailDocument,
|
"\nquery GetSubscriptionDetail ($id: Int!) {\n subscriptions(filter: { id: {\n eq: $id\n } }) {\n nodes {\n id\n subscriberId\n displayName\n createdAt\n updatedAt\n category\n sourceUrl\n enabled\n feed {\n nodes {\n id\n createdAt\n updatedAt\n token\n feedType\n feedSource\n }\n }\n subscriberTask {\n nodes {\n id\n taskType\n status\n }\n }\n credential3rd {\n id\n username\n }\n bangumi {\n nodes {\n createdAt\n updatedAt\n id\n mikanBangumiId\n displayName\n season\n seasonRaw\n fansub\n mikanFansubId\n rssLink\n posterLink\n homepage\n }\n }\n }\n }\n}\n": types.GetSubscriptionDetailDocument,
|
||||||
"\n query GetTasks($filter: SubscriberTasksFilterInput!, $orderBy: SubscriberTasksOrderInput!, $pagination: PaginationInput!) {\n subscriberTasks(\n pagination: $pagination\n filter: $filter\n orderBy: $orderBy\n ) {\n nodes {\n id,\n job,\n taskType,\n status,\n attempts,\n maxAttempts,\n runAt,\n lastError,\n lockAt,\n lockBy,\n doneAt,\n priority\n }\n paginationInfo {\n total\n pages\n }\n }\n }\n": types.GetTasksDocument,
|
"\n query GetTasks($filter: SubscriberTasksFilterInput!, $orderBy: SubscriberTasksOrderInput!, $pagination: PaginationInput!) {\n subscriberTasks(\n pagination: $pagination\n filter: $filter\n orderBy: $orderBy\n ) {\n nodes {\n id,\n job,\n taskType,\n status,\n attempts,\n maxAttempts,\n runAt,\n lastError,\n lockAt,\n lockBy,\n doneAt,\n priority,\n subscription {\n displayName\n sourceUrl\n }\n }\n paginationInfo {\n total\n pages\n }\n }\n }\n": types.GetTasksDocument,
|
||||||
"\n mutation InsertSubscriberTask($data: SubscriberTasksInsertInput!) {\n subscriberTasksCreateOne(data: $data) {\n id\n }\n }\n": types.InsertSubscriberTaskDocument,
|
"\n mutation InsertSubscriberTask($data: SubscriberTasksInsertInput!) {\n subscriberTasksCreateOne(data: $data) {\n id\n }\n }\n": types.InsertSubscriberTaskDocument,
|
||||||
"\n mutation DeleteTasks($filter: SubscriberTasksFilterInput!) {\n subscriberTasksDelete(filter: $filter)\n }\n": types.DeleteTasksDocument,
|
"\n mutation DeleteTasks($filter: SubscriberTasksFilterInput!) {\n subscriberTasksDelete(filter: $filter)\n }\n": types.DeleteTasksDocument,
|
||||||
"\n mutation RetryTasks($filter: SubscriberTasksFilterInput!) {\n subscriberTasksRetryOne(filter: $filter) {\n id,\n job,\n taskType,\n status,\n attempts,\n maxAttempts,\n runAt,\n lastError,\n lockAt,\n lockBy,\n doneAt,\n priority\n }\n }\n": types.RetryTasksDocument,
|
"\n mutation RetryTasks($filter: SubscriberTasksFilterInput!) {\n subscriberTasksRetryOne(filter: $filter) {\n id,\n job,\n taskType,\n status,\n attempts,\n maxAttempts,\n runAt,\n lastError,\n lockAt,\n lockBy,\n doneAt,\n priority\n }\n }\n": types.RetryTasksDocument,
|
||||||
@ -121,7 +121,7 @@ export function gql(source: "\nquery GetSubscriptionDetail ($id: Int!) {\n subs
|
|||||||
/**
|
/**
|
||||||
* The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
* The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||||
*/
|
*/
|
||||||
export function gql(source: "\n query GetTasks($filter: SubscriberTasksFilterInput!, $orderBy: SubscriberTasksOrderInput!, $pagination: PaginationInput!) {\n subscriberTasks(\n pagination: $pagination\n filter: $filter\n orderBy: $orderBy\n ) {\n nodes {\n id,\n job,\n taskType,\n status,\n attempts,\n maxAttempts,\n runAt,\n lastError,\n lockAt,\n lockBy,\n doneAt,\n priority\n }\n paginationInfo {\n total\n pages\n }\n }\n }\n"): (typeof documents)["\n query GetTasks($filter: SubscriberTasksFilterInput!, $orderBy: SubscriberTasksOrderInput!, $pagination: PaginationInput!) {\n subscriberTasks(\n pagination: $pagination\n filter: $filter\n orderBy: $orderBy\n ) {\n nodes {\n id,\n job,\n taskType,\n status,\n attempts,\n maxAttempts,\n runAt,\n lastError,\n lockAt,\n lockBy,\n doneAt,\n priority\n }\n paginationInfo {\n total\n pages\n }\n }\n }\n"];
|
export function gql(source: "\n query GetTasks($filter: SubscriberTasksFilterInput!, $orderBy: SubscriberTasksOrderInput!, $pagination: PaginationInput!) {\n subscriberTasks(\n pagination: $pagination\n filter: $filter\n orderBy: $orderBy\n ) {\n nodes {\n id,\n job,\n taskType,\n status,\n attempts,\n maxAttempts,\n runAt,\n lastError,\n lockAt,\n lockBy,\n doneAt,\n priority,\n subscription {\n displayName\n sourceUrl\n }\n }\n paginationInfo {\n total\n pages\n }\n }\n }\n"): (typeof documents)["\n query GetTasks($filter: SubscriberTasksFilterInput!, $orderBy: SubscriberTasksOrderInput!, $pagination: PaginationInput!) {\n subscriberTasks(\n pagination: $pagination\n filter: $filter\n orderBy: $orderBy\n ) {\n nodes {\n id,\n job,\n taskType,\n status,\n attempts,\n maxAttempts,\n runAt,\n lastError,\n lockAt,\n lockBy,\n doneAt,\n priority,\n subscription {\n displayName\n sourceUrl\n }\n }\n paginationInfo {\n total\n pages\n }\n }\n }\n"];
|
||||||
/**
|
/**
|
||||||
* The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
* The gql function is used to parse GraphQL queries into a document that can be used by GraphQL clients.
|
||||||
*/
|
*/
|
||||||
|
@ -1,4 +1,6 @@
|
|||||||
/* eslint-disable */
|
/* eslint-disable */
|
||||||
|
import { SubscriberTaskInput } from 'recorder/bindings/SubscriberTaskInput';
|
||||||
|
import { SubscriberTaskType } from 'recorder/bindings/SubscriberTaskType';
|
||||||
import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';
|
import { TypedDocumentNode as DocumentNode } from '@graphql-typed-document-node/core';
|
||||||
export type Maybe<T> = T | null;
|
export type Maybe<T> = T | null;
|
||||||
export type InputMaybe<T> = Maybe<T>;
|
export type InputMaybe<T> = Maybe<T>;
|
||||||
@ -17,6 +19,8 @@ export type Scalars = {
|
|||||||
/** The `JSON` scalar type represents raw JSON values */
|
/** The `JSON` scalar type represents raw JSON values */
|
||||||
Json: { input: any; output: any; }
|
Json: { input: any; output: any; }
|
||||||
JsonbFilterInput: { input: any; output: any; }
|
JsonbFilterInput: { input: any; output: any; }
|
||||||
|
/** type SubscriberTaskType = { "taskType": "sync_one_subscription_feeds_incremental" } & SyncOneSubscriptionFeedsIncrementalTask | { "taskType": "sync_one_subscription_feeds_full" } & SyncOneSubscriptionFeedsFullTask | { "taskType": "sync_one_subscription_sources" } & SyncOneSubscriptionSourcesTask; */
|
||||||
|
SubscriberTaskType: { input: SubscriberTaskInput; output: SubscriberTaskType; }
|
||||||
};
|
};
|
||||||
|
|
||||||
export type Bangumi = {
|
export type Bangumi = {
|
||||||
@ -350,7 +354,7 @@ export type Cron = {
|
|||||||
status: CronStatusEnum;
|
status: CronStatusEnum;
|
||||||
subscriber?: Maybe<Subscribers>;
|
subscriber?: Maybe<Subscribers>;
|
||||||
subscriberId?: Maybe<Scalars['Int']['output']>;
|
subscriberId?: Maybe<Scalars['Int']['output']>;
|
||||||
subscriberTask?: Maybe<Scalars['Json']['output']>;
|
subscriberTask?: Maybe<Scalars['SubscriberTaskType']['output']>;
|
||||||
subscription?: Maybe<Subscriptions>;
|
subscription?: Maybe<Subscriptions>;
|
||||||
subscriptionId?: Maybe<Scalars['Int']['output']>;
|
subscriptionId?: Maybe<Scalars['Int']['output']>;
|
||||||
timeoutMs: Scalars['Int']['output'];
|
timeoutMs: Scalars['Int']['output'];
|
||||||
@ -373,7 +377,7 @@ export type CronBasic = {
|
|||||||
priority: Scalars['Int']['output'];
|
priority: Scalars['Int']['output'];
|
||||||
status: CronStatusEnum;
|
status: CronStatusEnum;
|
||||||
subscriberId?: Maybe<Scalars['Int']['output']>;
|
subscriberId?: Maybe<Scalars['Int']['output']>;
|
||||||
subscriberTask?: Maybe<Scalars['Json']['output']>;
|
subscriberTask?: Maybe<Scalars['SubscriberTaskType']['output']>;
|
||||||
subscriptionId?: Maybe<Scalars['Int']['output']>;
|
subscriptionId?: Maybe<Scalars['Int']['output']>;
|
||||||
timeoutMs: Scalars['Int']['output'];
|
timeoutMs: Scalars['Int']['output'];
|
||||||
updatedAt: Scalars['String']['output'];
|
updatedAt: Scalars['String']['output'];
|
||||||
@ -420,7 +424,7 @@ export type CronInsertInput = {
|
|||||||
cronExpr: Scalars['String']['input'];
|
cronExpr: Scalars['String']['input'];
|
||||||
enabled?: InputMaybe<Scalars['Boolean']['input']>;
|
enabled?: InputMaybe<Scalars['Boolean']['input']>;
|
||||||
maxAttempts?: InputMaybe<Scalars['Int']['input']>;
|
maxAttempts?: InputMaybe<Scalars['Int']['input']>;
|
||||||
subscriberTask?: InputMaybe<Scalars['Json']['input']>;
|
subscriberTask?: InputMaybe<Scalars['SubscriberTaskType']['input']>;
|
||||||
timeoutMs?: InputMaybe<Scalars['Int']['input']>;
|
timeoutMs?: InputMaybe<Scalars['Int']['input']>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1165,9 +1169,6 @@ export type Mutation = {
|
|||||||
subscriptionsCreateBatch: Array<SubscriptionsBasic>;
|
subscriptionsCreateBatch: Array<SubscriptionsBasic>;
|
||||||
subscriptionsCreateOne: SubscriptionsBasic;
|
subscriptionsCreateOne: SubscriptionsBasic;
|
||||||
subscriptionsDelete: Scalars['Int']['output'];
|
subscriptionsDelete: Scalars['Int']['output'];
|
||||||
subscriptionsSyncOneFeedsFull: SubscriberTasksBasic;
|
|
||||||
subscriptionsSyncOneFeedsIncremental: SubscriberTasksBasic;
|
|
||||||
subscriptionsSyncOneSources: SubscriberTasksBasic;
|
|
||||||
subscriptionsUpdate: Array<SubscriptionsBasic>;
|
subscriptionsUpdate: Array<SubscriptionsBasic>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -1396,21 +1397,6 @@ export type MutationSubscriptionsDeleteArgs = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
export type MutationSubscriptionsSyncOneFeedsFullArgs = {
|
|
||||||
filter?: InputMaybe<SubscriptionsFilterInput>;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
export type MutationSubscriptionsSyncOneFeedsIncrementalArgs = {
|
|
||||||
filter?: InputMaybe<SubscriptionsFilterInput>;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
export type MutationSubscriptionsSyncOneSourcesArgs = {
|
|
||||||
filter?: InputMaybe<SubscriptionsFilterInput>;
|
|
||||||
};
|
|
||||||
|
|
||||||
|
|
||||||
export type MutationSubscriptionsUpdateArgs = {
|
export type MutationSubscriptionsUpdateArgs = {
|
||||||
data: SubscriptionsUpdateInput;
|
data: SubscriptionsUpdateInput;
|
||||||
filter?: InputMaybe<SubscriptionsFilterInput>;
|
filter?: InputMaybe<SubscriptionsFilterInput>;
|
||||||
@ -1606,7 +1592,7 @@ export type SubscriberTasks = {
|
|||||||
attempts: Scalars['Int']['output'];
|
attempts: Scalars['Int']['output'];
|
||||||
doneAt?: Maybe<Scalars['String']['output']>;
|
doneAt?: Maybe<Scalars['String']['output']>;
|
||||||
id: Scalars['String']['output'];
|
id: Scalars['String']['output'];
|
||||||
job: Scalars['Json']['output'];
|
job: Scalars['SubscriberTaskType']['output'];
|
||||||
lastError?: Maybe<Scalars['String']['output']>;
|
lastError?: Maybe<Scalars['String']['output']>;
|
||||||
lockAt?: Maybe<Scalars['String']['output']>;
|
lockAt?: Maybe<Scalars['String']['output']>;
|
||||||
lockBy?: Maybe<Scalars['String']['output']>;
|
lockBy?: Maybe<Scalars['String']['output']>;
|
||||||
@ -1626,7 +1612,7 @@ export type SubscriberTasksBasic = {
|
|||||||
attempts: Scalars['Int']['output'];
|
attempts: Scalars['Int']['output'];
|
||||||
doneAt?: Maybe<Scalars['String']['output']>;
|
doneAt?: Maybe<Scalars['String']['output']>;
|
||||||
id: Scalars['String']['output'];
|
id: Scalars['String']['output'];
|
||||||
job: Scalars['Json']['output'];
|
job: Scalars['SubscriberTaskType']['output'];
|
||||||
lastError?: Maybe<Scalars['String']['output']>;
|
lastError?: Maybe<Scalars['String']['output']>;
|
||||||
lockAt?: Maybe<Scalars['String']['output']>;
|
lockAt?: Maybe<Scalars['String']['output']>;
|
||||||
lockBy?: Maybe<Scalars['String']['output']>;
|
lockBy?: Maybe<Scalars['String']['output']>;
|
||||||
@ -1673,7 +1659,7 @@ export type SubscriberTasksFilterInput = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
export type SubscriberTasksInsertInput = {
|
export type SubscriberTasksInsertInput = {
|
||||||
job: Scalars['Json']['input'];
|
job: Scalars['SubscriberTaskType']['input'];
|
||||||
subscriberId?: InputMaybe<Scalars['Int']['input']>;
|
subscriberId?: InputMaybe<Scalars['Int']['input']>;
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -2189,7 +2175,7 @@ export type GetTasksQueryVariables = Exact<{
|
|||||||
}>;
|
}>;
|
||||||
|
|
||||||
|
|
||||||
export type GetTasksQuery = { __typename?: 'Query', subscriberTasks: { __typename?: 'SubscriberTasksConnection', nodes: Array<{ __typename?: 'SubscriberTasks', id: string, job: any, taskType: SubscriberTaskTypeEnum, status: SubscriberTaskStatusEnum, attempts: number, maxAttempts: number, runAt: string, lastError?: string | null, lockAt?: string | null, lockBy?: string | null, doneAt?: string | null, priority: number }>, paginationInfo?: { __typename?: 'PaginationInfo', total: number, pages: number } | null } };
|
export type GetTasksQuery = { __typename?: 'Query', subscriberTasks: { __typename?: 'SubscriberTasksConnection', nodes: Array<{ __typename?: 'SubscriberTasks', id: string, job: SubscriberTaskType, taskType: SubscriberTaskTypeEnum, status: SubscriberTaskStatusEnum, attempts: number, maxAttempts: number, runAt: string, lastError?: string | null, lockAt?: string | null, lockBy?: string | null, doneAt?: string | null, priority: number, subscription?: { __typename?: 'Subscriptions', displayName: string, sourceUrl: string } | null }>, paginationInfo?: { __typename?: 'PaginationInfo', total: number, pages: number } | null } };
|
||||||
|
|
||||||
export type InsertSubscriberTaskMutationVariables = Exact<{
|
export type InsertSubscriberTaskMutationVariables = Exact<{
|
||||||
data: SubscriberTasksInsertInput;
|
data: SubscriberTasksInsertInput;
|
||||||
@ -2210,7 +2196,7 @@ export type RetryTasksMutationVariables = Exact<{
|
|||||||
}>;
|
}>;
|
||||||
|
|
||||||
|
|
||||||
export type RetryTasksMutation = { __typename?: 'Mutation', subscriberTasksRetryOne: { __typename?: 'SubscriberTasksBasic', id: string, job: any, taskType: SubscriberTaskTypeEnum, status: SubscriberTaskStatusEnum, attempts: number, maxAttempts: number, runAt: string, lastError?: string | null, lockAt?: string | null, lockBy?: string | null, doneAt?: string | null, priority: number } };
|
export type RetryTasksMutation = { __typename?: 'Mutation', subscriberTasksRetryOne: { __typename?: 'SubscriberTasksBasic', id: string, job: SubscriberTaskType, taskType: SubscriberTaskTypeEnum, status: SubscriberTaskStatusEnum, attempts: number, maxAttempts: number, runAt: string, lastError?: string | null, lockAt?: string | null, lockBy?: string | null, doneAt?: string | null, priority: number } };
|
||||||
|
|
||||||
|
|
||||||
export const GetCredential3rdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCredential3rd"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Credential3rdFilterInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"orderBy"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Credential3rdOrderInput"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pagination"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PaginationInput"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"credential3rd"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"Variable","name":{"kind":"Name","value":"orderBy"}}},{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pagination"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"cookies"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"password"}},{"kind":"Field","name":{"kind":"Name","value":"userAgent"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"credentialType"}}]}},{"kind":"Field","name":{"kind":"Name","value":"paginationInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"pages"}}]}}]}}]}}]} as unknown as DocumentNode<GetCredential3rdQuery, GetCredential3rdQueryVariables>;
|
export const GetCredential3rdDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetCredential3rd"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Credential3rdFilterInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"orderBy"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"Credential3rdOrderInput"}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pagination"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"PaginationInput"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"credential3rd"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"Variable","name":{"kind":"Name","value":"orderBy"}}},{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pagination"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"cookies"}},{"kind":"Field","name":{"kind":"Name","value":"username"}},{"kind":"Field","name":{"kind":"Name","value":"password"}},{"kind":"Field","name":{"kind":"Name","value":"userAgent"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"credentialType"}}]}},{"kind":"Field","name":{"kind":"Name","value":"paginationInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"pages"}}]}}]}}]}}]} as unknown as DocumentNode<GetCredential3rdQuery, GetCredential3rdQueryVariables>;
|
||||||
@ -2226,7 +2212,7 @@ export const InsertSubscriptionDocument = {"kind":"Document","definitions":[{"ki
|
|||||||
export const UpdateSubscriptionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateSubscriptions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsUpdateInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsUpdate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}}]}}]}}]} as unknown as DocumentNode<UpdateSubscriptionsMutation, UpdateSubscriptionsMutationVariables>;
|
export const UpdateSubscriptionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"UpdateSubscriptions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsUpdateInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsUpdate"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}}]}}]}}]} as unknown as DocumentNode<UpdateSubscriptionsMutation, UpdateSubscriptionsMutationVariables>;
|
||||||
export const DeleteSubscriptionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteSubscriptions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsDelete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}]}]}}]} as unknown as DocumentNode<DeleteSubscriptionsMutation, DeleteSubscriptionsMutationVariables>;
|
export const DeleteSubscriptionsDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteSubscriptions"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriptionsFilterInput"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptionsDelete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}]}]}}]} as unknown as DocumentNode<DeleteSubscriptionsMutation, DeleteSubscriptionsMutationVariables>;
|
||||||
export const GetSubscriptionDetailDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetSubscriptionDetail"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"subscriberId"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}},{"kind":"Field","name":{"kind":"Name","value":"feed"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"feedType"}},{"kind":"Field","name":{"kind":"Name","value":"feedSource"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"subscriberTask"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"taskType"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"credential3rd"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"username"}}]}},{"kind":"Field","name":{"kind":"Name","value":"bangumi"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"mikanBangumiId"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"seasonRaw"}},{"kind":"Field","name":{"kind":"Name","value":"fansub"}},{"kind":"Field","name":{"kind":"Name","value":"mikanFansubId"}},{"kind":"Field","name":{"kind":"Name","value":"rssLink"}},{"kind":"Field","name":{"kind":"Name","value":"posterLink"}},{"kind":"Field","name":{"kind":"Name","value":"homepage"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode<GetSubscriptionDetailQuery, GetSubscriptionDetailQueryVariables>;
|
export const GetSubscriptionDetailDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetSubscriptionDetail"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"id"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"Int"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriptions"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"id"},"value":{"kind":"ObjectValue","fields":[{"kind":"ObjectField","name":{"kind":"Name","value":"eq"},"value":{"kind":"Variable","name":{"kind":"Name","value":"id"}}}]}}]}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"subscriberId"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"category"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}},{"kind":"Field","name":{"kind":"Name","value":"enabled"}},{"kind":"Field","name":{"kind":"Name","value":"feed"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"token"}},{"kind":"Field","name":{"kind":"Name","value":"feedType"}},{"kind":"Field","name":{"kind":"Name","value":"feedSource"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"subscriberTask"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"taskType"}},{"kind":"Field","name":{"kind":"Name","value":"status"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"credential3rd"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"username"}}]}},{"kind":"Field","name":{"kind":"Name","value":"bangumi"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"createdAt"}},{"kind":"Field","name":{"kind":"Name","value":"updatedAt"}},{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"mikanBangumiId"}},{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"season"}},{"kind":"Field","name":{"kind":"Name","value":"seasonRaw"}},{"kind":"Field","name":{"kind":"Name","value":"fansub"}},{"kind":"Field","name":{"kind":"Name","value":"mikanFansubId"}},{"kind":"Field","name":{"kind":"Name","value":"rssLink"}},{"kind":"Field","name":{"kind":"Name","value":"posterLink"}},{"kind":"Field","name":{"kind":"Name","value":"homepage"}}]}}]}}]}}]}}]}}]} as unknown as DocumentNode<GetSubscriptionDetailQuery, GetSubscriptionDetailQueryVariables>;
|
||||||
export const GetTasksDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetTasks"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriberTasksFilterInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"orderBy"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriberTasksOrderInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pagination"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"PaginationInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriberTasks"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pagination"}}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"Variable","name":{"kind":"Name","value":"orderBy"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"job"}},{"kind":"Field","name":{"kind":"Name","value":"taskType"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"attempts"}},{"kind":"Field","name":{"kind":"Name","value":"maxAttempts"}},{"kind":"Field","name":{"kind":"Name","value":"runAt"}},{"kind":"Field","name":{"kind":"Name","value":"lastError"}},{"kind":"Field","name":{"kind":"Name","value":"lockAt"}},{"kind":"Field","name":{"kind":"Name","value":"lockBy"}},{"kind":"Field","name":{"kind":"Name","value":"doneAt"}},{"kind":"Field","name":{"kind":"Name","value":"priority"}}]}},{"kind":"Field","name":{"kind":"Name","value":"paginationInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"pages"}}]}}]}}]}}]} as unknown as DocumentNode<GetTasksQuery, GetTasksQueryVariables>;
|
export const GetTasksDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"query","name":{"kind":"Name","value":"GetTasks"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriberTasksFilterInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"orderBy"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriberTasksOrderInput"}}}},{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"pagination"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"PaginationInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriberTasks"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"pagination"},"value":{"kind":"Variable","name":{"kind":"Name","value":"pagination"}}},{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}},{"kind":"Argument","name":{"kind":"Name","value":"orderBy"},"value":{"kind":"Variable","name":{"kind":"Name","value":"orderBy"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"nodes"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"job"}},{"kind":"Field","name":{"kind":"Name","value":"taskType"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"attempts"}},{"kind":"Field","name":{"kind":"Name","value":"maxAttempts"}},{"kind":"Field","name":{"kind":"Name","value":"runAt"}},{"kind":"Field","name":{"kind":"Name","value":"lastError"}},{"kind":"Field","name":{"kind":"Name","value":"lockAt"}},{"kind":"Field","name":{"kind":"Name","value":"lockBy"}},{"kind":"Field","name":{"kind":"Name","value":"doneAt"}},{"kind":"Field","name":{"kind":"Name","value":"priority"}},{"kind":"Field","name":{"kind":"Name","value":"subscription"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"displayName"}},{"kind":"Field","name":{"kind":"Name","value":"sourceUrl"}}]}}]}},{"kind":"Field","name":{"kind":"Name","value":"paginationInfo"},"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"total"}},{"kind":"Field","name":{"kind":"Name","value":"pages"}}]}}]}}]}}]} as unknown as DocumentNode<GetTasksQuery, GetTasksQueryVariables>;
|
||||||
export const InsertSubscriberTaskDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"InsertSubscriberTask"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriberTasksInsertInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriberTasksCreateOne"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<InsertSubscriberTaskMutation, InsertSubscriberTaskMutationVariables>;
|
export const InsertSubscriberTaskDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"InsertSubscriberTask"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"data"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriberTasksInsertInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriberTasksCreateOne"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"data"},"value":{"kind":"Variable","name":{"kind":"Name","value":"data"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}}]}}]}}]} as unknown as DocumentNode<InsertSubscriberTaskMutation, InsertSubscriberTaskMutationVariables>;
|
||||||
export const DeleteTasksDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteTasks"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriberTasksFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriberTasksDelete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}]}]}}]} as unknown as DocumentNode<DeleteTasksMutation, DeleteTasksMutationVariables>;
|
export const DeleteTasksDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"DeleteTasks"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriberTasksFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriberTasksDelete"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}]}]}}]} as unknown as DocumentNode<DeleteTasksMutation, DeleteTasksMutationVariables>;
|
||||||
export const RetryTasksDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"RetryTasks"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriberTasksFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriberTasksRetryOne"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"job"}},{"kind":"Field","name":{"kind":"Name","value":"taskType"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"attempts"}},{"kind":"Field","name":{"kind":"Name","value":"maxAttempts"}},{"kind":"Field","name":{"kind":"Name","value":"runAt"}},{"kind":"Field","name":{"kind":"Name","value":"lastError"}},{"kind":"Field","name":{"kind":"Name","value":"lockAt"}},{"kind":"Field","name":{"kind":"Name","value":"lockBy"}},{"kind":"Field","name":{"kind":"Name","value":"doneAt"}},{"kind":"Field","name":{"kind":"Name","value":"priority"}}]}}]}}]} as unknown as DocumentNode<RetryTasksMutation, RetryTasksMutationVariables>;
|
export const RetryTasksDocument = {"kind":"Document","definitions":[{"kind":"OperationDefinition","operation":"mutation","name":{"kind":"Name","value":"RetryTasks"},"variableDefinitions":[{"kind":"VariableDefinition","variable":{"kind":"Variable","name":{"kind":"Name","value":"filter"}},"type":{"kind":"NonNullType","type":{"kind":"NamedType","name":{"kind":"Name","value":"SubscriberTasksFilterInput"}}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"subscriberTasksRetryOne"},"arguments":[{"kind":"Argument","name":{"kind":"Name","value":"filter"},"value":{"kind":"Variable","name":{"kind":"Name","value":"filter"}}}],"selectionSet":{"kind":"SelectionSet","selections":[{"kind":"Field","name":{"kind":"Name","value":"id"}},{"kind":"Field","name":{"kind":"Name","value":"job"}},{"kind":"Field","name":{"kind":"Name","value":"taskType"}},{"kind":"Field","name":{"kind":"Name","value":"status"}},{"kind":"Field","name":{"kind":"Name","value":"attempts"}},{"kind":"Field","name":{"kind":"Name","value":"maxAttempts"}},{"kind":"Field","name":{"kind":"Name","value":"runAt"}},{"kind":"Field","name":{"kind":"Name","value":"lastError"}},{"kind":"Field","name":{"kind":"Name","value":"lockAt"}},{"kind":"Field","name":{"kind":"Name","value":"lockBy"}},{"kind":"Field","name":{"kind":"Name","value":"doneAt"}},{"kind":"Field","name":{"kind":"Name","value":"priority"}}]}}]}}]} as unknown as DocumentNode<RetryTasksMutation, RetryTasksMutationVariables>;
|
@ -32,6 +32,7 @@ import {
|
|||||||
} from '@tanstack/react-router';
|
} from '@tanstack/react-router';
|
||||||
import { format } from 'date-fns';
|
import { format } from 'date-fns';
|
||||||
import { ArrowLeft, RefreshCw } from 'lucide-react';
|
import { ArrowLeft, RefreshCw } from 'lucide-react';
|
||||||
|
import { useMemo } from 'react';
|
||||||
import { toast } from 'sonner';
|
import { toast } from 'sonner';
|
||||||
import { prettyTaskType } from './-pretty-task-type';
|
import { prettyTaskType } from './-pretty-task-type';
|
||||||
import { getStatusBadge } from './-status-badge';
|
import { getStatusBadge } from './-status-badge';
|
||||||
@ -104,6 +105,16 @@ function TaskDetailRouteComponent() {
|
|||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
const job = useMemo(() => {
|
||||||
|
if (!task) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
return {
|
||||||
|
...task.job,
|
||||||
|
subscription: task.subscription,
|
||||||
|
};
|
||||||
|
}, [task]);
|
||||||
|
|
||||||
if (loading) {
|
if (loading) {
|
||||||
return <DetailCardSkeleton />;
|
return <DetailCardSkeleton />;
|
||||||
}
|
}
|
||||||
@ -247,14 +258,14 @@ function TaskDetailRouteComponent() {
|
|||||||
</div>
|
</div>
|
||||||
|
|
||||||
{/* Job Details */}
|
{/* Job Details */}
|
||||||
{task.job && (
|
{job && (
|
||||||
<>
|
<>
|
||||||
<Separator />
|
<Separator />
|
||||||
<div className="space-y-2">
|
<div className="space-y-2">
|
||||||
<Label className="font-medium text-sm">Job Details</Label>
|
<Label className="font-medium text-sm">Job Details</Label>
|
||||||
<div className="rounded-md bg-muted p-3">
|
<div className="rounded-md bg-muted p-3">
|
||||||
<pre className="overflow-x-auto whitespace-pre-wrap text-sm">
|
<pre className="overflow-x-auto whitespace-pre-wrap text-sm">
|
||||||
<code>{JSON.stringify(task.job, null, 2)}</code>
|
<code>{JSON.stringify(job, null, 2)}</code>
|
||||||
</pre>
|
</pre>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -2,14 +2,10 @@ extern crate proc_macro;
|
|||||||
|
|
||||||
use convert_case::{Case, Casing};
|
use convert_case::{Case, Casing};
|
||||||
use darling::{FromDeriveInput, FromField, ast::Data, util::Ignored};
|
use darling::{FromDeriveInput, FromField, ast::Data, util::Ignored};
|
||||||
use heck::ToLowerCamelCase;
|
|
||||||
use proc_macro::TokenStream;
|
use proc_macro::TokenStream;
|
||||||
use proc_macro_crate::{FoundCrate, crate_name};
|
use proc_macro2::Ident;
|
||||||
use proc_macro2::{Ident, Span, TokenStream};
|
use quote::{format_ident, quote};
|
||||||
use quote::{format_ident, quote, quote_spanned};
|
use syn::{Attribute, DeriveInput, Generics, parse_macro_input};
|
||||||
use syn::{Attribute, DeriveInput, Generics, Ident, parse_macro_input};
|
|
||||||
|
|
||||||
use crate::derives::attributes::related_attr;
|
|
||||||
|
|
||||||
#[derive(snafu::Snafu, Debug)]
|
#[derive(snafu::Snafu, Debug)]
|
||||||
enum GeneratorError {
|
enum GeneratorError {
|
||||||
@ -165,135 +161,3 @@ pub fn derive_dynamic_graphql(input: TokenStream) -> TokenStream {
|
|||||||
Err(err) => err.write_errors().into(),
|
Err(err) => err.write_errors().into(),
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
enum Error {
|
|
||||||
InputNotEnum,
|
|
||||||
InvalidEntityPath,
|
|
||||||
Syn(syn::Error),
|
|
||||||
}
|
|
||||||
|
|
||||||
struct DeriveRelatedEntity {
|
|
||||||
entity_ident: TokenStream,
|
|
||||||
ident: syn::Ident,
|
|
||||||
variants: syn::punctuated::Punctuated<syn::Variant, syn::token::Comma>,
|
|
||||||
}
|
|
||||||
|
|
||||||
impl DeriveRelatedEntity {
|
|
||||||
fn new(input: syn::DeriveInput) -> Result<Self, Error> {
|
|
||||||
let sea_attr = related_attr::SeaOrm::try_from_attributes(&input.attrs)
|
|
||||||
.map_err(Error::Syn)?
|
|
||||||
.unwrap_or_default();
|
|
||||||
|
|
||||||
let ident = input.ident;
|
|
||||||
let entity_ident = match sea_attr.entity.as_ref().map(Self::parse_lit_string) {
|
|
||||||
Some(entity_ident) => entity_ident.map_err(|_| Error::InvalidEntityPath)?,
|
|
||||||
None => quote! { Entity },
|
|
||||||
};
|
|
||||||
|
|
||||||
let variants = match input.data {
|
|
||||||
syn::Data::Enum(syn::DataEnum { variants, .. }) => variants,
|
|
||||||
_ => return Err(Error::InputNotEnum),
|
|
||||||
};
|
|
||||||
|
|
||||||
Ok(DeriveRelatedEntity {
|
|
||||||
entity_ident,
|
|
||||||
ident,
|
|
||||||
variants,
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
fn expand(&self) -> syn::Result<TokenStream> {
|
|
||||||
let ident = &self.ident;
|
|
||||||
let entity_ident = &self.entity_ident;
|
|
||||||
|
|
||||||
let variant_implementations: Vec<TokenStream> = self
|
|
||||||
.variants
|
|
||||||
.iter()
|
|
||||||
.map(|variant| {
|
|
||||||
let attr = related_attr::SeaOrm::from_attributes(&variant.attrs)?;
|
|
||||||
|
|
||||||
let enum_name = &variant.ident;
|
|
||||||
|
|
||||||
let target_entity = attr
|
|
||||||
.entity
|
|
||||||
.as_ref()
|
|
||||||
.map(Self::parse_lit_string)
|
|
||||||
.ok_or_else(|| {
|
|
||||||
syn::Error::new_spanned(variant, "Missing value for 'entity'")
|
|
||||||
})??;
|
|
||||||
|
|
||||||
let def = match attr.def {
|
|
||||||
Some(def) => Some(Self::parse_lit_string(&def).map_err(|_| {
|
|
||||||
syn::Error::new_spanned(variant, "Missing value for 'def'")
|
|
||||||
})?),
|
|
||||||
None => None,
|
|
||||||
};
|
|
||||||
|
|
||||||
let name = enum_name.to_string().to_lower_camel_case();
|
|
||||||
|
|
||||||
if let Some(def) = def {
|
|
||||||
Result::<_, syn::Error>::Ok(quote! {
|
|
||||||
Self::#enum_name => builder.get_relation::<#entity_ident, #target_entity>(#name, #def)
|
|
||||||
})
|
|
||||||
} else {
|
|
||||||
Result::<_, syn::Error>::Ok(quote! {
|
|
||||||
Self::#enum_name => via_builder.get_relation::<#entity_ident, #target_entity>(#name)
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
})
|
|
||||||
.collect::<Result<Vec<_>, _>>()?;
|
|
||||||
|
|
||||||
// Get the path of the `async-graphql` on the application's Cargo.toml
|
|
||||||
let async_graphql_crate = match crate_name("async-graphql") {
|
|
||||||
// if found, use application's `async-graphql`
|
|
||||||
Ok(FoundCrate::Name(name)) => {
|
|
||||||
let ident = Ident::new(&name, Span::call_site());
|
|
||||||
quote! { #ident }
|
|
||||||
}
|
|
||||||
Ok(FoundCrate::Itself) => quote! { async_graphql },
|
|
||||||
// if not, then use the `async-graphql` re-exported by `seaography`
|
|
||||||
Err(_) => quote! { seaography::async_graphql },
|
|
||||||
};
|
|
||||||
|
|
||||||
Ok(quote! {
|
|
||||||
impl seaography::RelationBuilder for #ident {
|
|
||||||
fn get_relation(&self, context: & 'static seaography::BuilderContext) -> #async_graphql_crate::dynamic::Field {
|
|
||||||
let builder = seaography::EntityObjectRelationBuilder { context };
|
|
||||||
let via_builder = seaography::EntityObjectViaRelationBuilder { context };
|
|
||||||
match self {
|
|
||||||
#(#variant_implementations,)*
|
|
||||||
_ => panic!("No relations for this entity"),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
})
|
|
||||||
}
|
|
||||||
|
|
||||||
fn parse_lit_string(lit: &syn::Lit) -> syn::Result<TokenStream> {
|
|
||||||
match lit {
|
|
||||||
syn::Lit::Str(lit_str) => lit_str
|
|
||||||
.value()
|
|
||||||
.parse()
|
|
||||||
.map_err(|_| syn::Error::new_spanned(lit, "attribute not valid")),
|
|
||||||
_ => Err(syn::Error::new_spanned(lit, "attribute must be a string")),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/// Method to derive a Related enumeration
|
|
||||||
fn expand_derive_related_entity(input: syn::DeriveInput) -> syn::Result<TokenStream> {
|
|
||||||
let ident_span = input.ident.span();
|
|
||||||
|
|
||||||
match DeriveRelatedEntity::new(input) {
|
|
||||||
Ok(model) => model.expand(),
|
|
||||||
Err(Error::InputNotEnum) => Ok(quote_spanned! {
|
|
||||||
ident_span => compile_error!("you can only derive DeriveRelation on enums");
|
|
||||||
}),
|
|
||||||
Err(Error::InvalidEntityPath) => Ok(quote_spanned! {
|
|
||||||
ident_span => compile_error!("invalid attribute value for 'entity'");
|
|
||||||
}),
|
|
||||||
Err(Error::Syn(err)) => Err(err),
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
Loading…
Reference in New Issue
Block a user