fix: fix webui compability
This commit is contained in:
@@ -1,6 +1,12 @@
|
||||
use seaography::{Builder as SeaographyBuilder, BuilderContext};
|
||||
|
||||
use crate::{graphql::domains::subscribers::restrict_subscriber_for_entity, models::bangumi};
|
||||
use crate::{
|
||||
graphql::{
|
||||
domains::subscribers::restrict_subscriber_for_entity,
|
||||
infra::custom::register_entity_default_writable,
|
||||
},
|
||||
models::bangumi,
|
||||
};
|
||||
|
||||
pub fn register_bangumi_to_schema_context(context: &mut BuilderContext) {
|
||||
restrict_subscriber_for_entity::<bangumi::Entity>(context, &bangumi::Column::SubscriberId);
|
||||
@@ -8,7 +14,6 @@ pub fn register_bangumi_to_schema_context(context: &mut BuilderContext) {
|
||||
|
||||
pub fn register_bangumi_to_schema_builder(mut builder: SeaographyBuilder) -> SeaographyBuilder {
|
||||
builder.register_enumeration::<bangumi::BangumiType>();
|
||||
seaography::register_entity!(builder, bangumi);
|
||||
|
||||
builder
|
||||
register_entity_default_writable!(builder, bangumi, false)
|
||||
}
|
||||
|
||||
@@ -2,7 +2,7 @@ use std::sync::Arc;
|
||||
|
||||
use async_graphql::dynamic::{Field, FieldFuture, FieldValue, Object, TypeRef};
|
||||
use sea_orm::{EntityTrait, QueryFilter};
|
||||
use seaography::{Builder as SeaographyBuilder, BuilderContext, get_filter_conditions};
|
||||
use seaography::{Builder as SeaographyBuilder, BuilderContext};
|
||||
use serde::{Deserialize, Serialize};
|
||||
use util_derive::DynamicGraphql;
|
||||
|
||||
@@ -16,7 +16,7 @@ use crate::{
|
||||
register_crypto_column_input_conversion_to_schema_context,
|
||||
register_crypto_column_output_conversion_to_schema_context,
|
||||
},
|
||||
custom::generate_entity_filtered_mutation_field,
|
||||
custom::{generate_entity_filtered_mutation_field, register_entity_default_writable},
|
||||
name::get_entity_custom_mutation_field_name,
|
||||
},
|
||||
},
|
||||
@@ -95,7 +95,7 @@ pub fn register_credential3rd_to_schema_builder(
|
||||
mut builder: SeaographyBuilder,
|
||||
) -> SeaographyBuilder {
|
||||
builder.register_enumeration::<credential_3rd::Credential3rdType>();
|
||||
seaography::register_entity!(builder, credential_3rd);
|
||||
builder = register_entity_default_writable!(builder, credential_3rd, false);
|
||||
|
||||
builder.schema = builder
|
||||
.schema
|
||||
@@ -111,18 +111,12 @@ pub fn register_credential3rd_to_schema_builder(
|
||||
builder_context,
|
||||
check_available_mutation_name,
|
||||
TypeRef::named_nn(Credential3rdCheckAvailableInfo::object_type_name()),
|
||||
Arc::new(|resolver_ctx, app_ctx, filters| {
|
||||
let filters_condition = get_filter_conditions::<credential_3rd::Entity>(
|
||||
resolver_ctx,
|
||||
builder_context,
|
||||
filters,
|
||||
);
|
||||
|
||||
Arc::new(|_resolver_ctx, app_ctx, filters| {
|
||||
Box::pin(async move {
|
||||
let db = app_ctx.db();
|
||||
|
||||
let credential_model = credential_3rd::Entity::find()
|
||||
.filter(filters_condition)
|
||||
.filter(filters)
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
|
||||
@@ -6,14 +6,7 @@ use crate::{
|
||||
graphql::{
|
||||
domains::subscribers::restrict_subscriber_for_entity,
|
||||
infra::{
|
||||
custom::{
|
||||
generate_entity_default_create_batch_mutation_field,
|
||||
generate_entity_default_create_one_mutation_field,
|
||||
generate_entity_default_delete_mutation_field,
|
||||
generate_entity_default_insert_input_object,
|
||||
generate_entity_default_update_input_object,
|
||||
generate_entity_default_update_mutation_field,
|
||||
},
|
||||
custom::register_entity_default_writable,
|
||||
json::{
|
||||
convert_jsonb_output_case_for_entity, restrict_jsonb_filter_input_for_entity,
|
||||
validate_jsonb_input_for_entity,
|
||||
@@ -70,58 +63,9 @@ pub fn register_cron_to_schema_context(context: &mut BuilderContext) {
|
||||
}
|
||||
|
||||
pub fn register_cron_to_schema_builder(mut builder: SeaographyBuilder) -> SeaographyBuilder {
|
||||
builder.register_entity::<cron::Entity>(
|
||||
<cron::RelatedEntity as sea_orm::Iterable>::iter()
|
||||
.map(|rel| seaography::RelationBuilder::get_relation(&rel, builder.context))
|
||||
.collect(),
|
||||
);
|
||||
builder = builder.register_entity_dataloader_one_to_one(cron::Entity, tokio::spawn);
|
||||
builder = builder.register_entity_dataloader_one_to_many(cron::Entity, tokio::spawn);
|
||||
|
||||
builder.register_enumeration::<cron::CronStatus>();
|
||||
|
||||
let builder_context = builder.context;
|
||||
|
||||
{
|
||||
builder
|
||||
.inputs
|
||||
.push(generate_entity_default_insert_input_object::<cron::Entity>(
|
||||
builder_context,
|
||||
));
|
||||
builder
|
||||
.mutations
|
||||
.push(generate_entity_default_create_one_mutation_field::<
|
||||
cron::Entity,
|
||||
_,
|
||||
>(builder_context, true));
|
||||
builder
|
||||
.mutations
|
||||
.push(generate_entity_default_create_batch_mutation_field::<
|
||||
cron::Entity,
|
||||
_,
|
||||
>(builder_context, true));
|
||||
}
|
||||
{
|
||||
builder
|
||||
.inputs
|
||||
.push(generate_entity_default_update_input_object::<cron::Entity>(
|
||||
builder_context,
|
||||
));
|
||||
builder
|
||||
.mutations
|
||||
.push(generate_entity_default_update_mutation_field::<
|
||||
cron::Entity,
|
||||
_,
|
||||
>(builder_context, true));
|
||||
}
|
||||
{
|
||||
builder
|
||||
.mutations
|
||||
.push(generate_entity_default_delete_mutation_field::<
|
||||
cron::Entity,
|
||||
_,
|
||||
>(builder_context, false));
|
||||
}
|
||||
builder = register_entity_default_writable!(builder, cron, true);
|
||||
|
||||
builder
|
||||
}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
use seaography::{Builder as SeaographyBuilder, BuilderContext};
|
||||
|
||||
use crate::{graphql::domains::subscribers::restrict_subscriber_for_entity, models::downloaders};
|
||||
use crate::{
|
||||
graphql::{
|
||||
domains::subscribers::restrict_subscriber_for_entity,
|
||||
infra::custom::register_entity_default_writable,
|
||||
},
|
||||
models::downloaders,
|
||||
};
|
||||
|
||||
pub fn register_downloaders_to_schema_context(context: &mut BuilderContext) {
|
||||
restrict_subscriber_for_entity::<downloaders::Entity>(
|
||||
@@ -11,7 +17,7 @@ pub fn register_downloaders_to_schema_context(context: &mut BuilderContext) {
|
||||
|
||||
pub fn register_downloaders_to_schema_builder(mut builder: SeaographyBuilder) -> SeaographyBuilder {
|
||||
builder.register_enumeration::<downloaders::DownloaderCategory>();
|
||||
seaography::register_entity!(builder, downloaders);
|
||||
builder = register_entity_default_writable!(builder, downloaders, false);
|
||||
|
||||
builder
|
||||
}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
use seaography::{Builder as SeaographyBuilder, BuilderContext};
|
||||
|
||||
use crate::{graphql::domains::subscribers::restrict_subscriber_for_entity, models::downloads};
|
||||
use crate::{
|
||||
graphql::{
|
||||
domains::subscribers::restrict_subscriber_for_entity,
|
||||
infra::custom::register_entity_default_writable,
|
||||
},
|
||||
models::downloads,
|
||||
};
|
||||
|
||||
pub fn register_downloads_to_schema_context(context: &mut BuilderContext) {
|
||||
restrict_subscriber_for_entity::<downloads::Entity>(context, &downloads::Column::SubscriberId);
|
||||
@@ -9,7 +15,7 @@ pub fn register_downloads_to_schema_context(context: &mut BuilderContext) {
|
||||
pub fn register_downloads_to_schema_builder(mut builder: SeaographyBuilder) -> SeaographyBuilder {
|
||||
builder.register_enumeration::<downloads::DownloadStatus>();
|
||||
builder.register_enumeration::<downloads::DownloadMime>();
|
||||
seaography::register_entity!(builder, downloads);
|
||||
builder = register_entity_default_writable!(builder, downloads, false);
|
||||
|
||||
builder
|
||||
}
|
||||
|
||||
@@ -1,6 +1,12 @@
|
||||
use seaography::{Builder as SeaographyBuilder, BuilderContext};
|
||||
|
||||
use crate::{graphql::domains::subscribers::restrict_subscriber_for_entity, models::episodes};
|
||||
use crate::{
|
||||
graphql::{
|
||||
domains::subscribers::restrict_subscriber_for_entity,
|
||||
infra::custom::register_entity_default_writable,
|
||||
},
|
||||
models::episodes,
|
||||
};
|
||||
|
||||
pub fn register_episodes_to_schema_context(context: &mut BuilderContext) {
|
||||
restrict_subscriber_for_entity::<episodes::Entity>(context, &episodes::Column::SubscriberId);
|
||||
@@ -8,7 +14,7 @@ pub fn register_episodes_to_schema_context(context: &mut BuilderContext) {
|
||||
|
||||
pub fn register_episodes_to_schema_builder(mut builder: SeaographyBuilder) -> SeaographyBuilder {
|
||||
builder.register_enumeration::<episodes::EpisodeType>();
|
||||
seaography::register_entity!(builder, episodes);
|
||||
builder = register_entity_default_writable!(builder, episodes, false);
|
||||
|
||||
builder
|
||||
}
|
||||
|
||||
@@ -7,9 +7,12 @@ use seaography::{Builder as SeaographyBuilder, BuilderContext, SeaResult};
|
||||
use crate::{
|
||||
graphql::{
|
||||
domains::subscribers::restrict_subscriber_for_entity,
|
||||
infra::name::{
|
||||
get_entity_and_column_name, get_entity_create_batch_mutation_field_name,
|
||||
get_entity_create_one_mutation_field_name,
|
||||
infra::{
|
||||
custom::register_entity_default_writable,
|
||||
name::{
|
||||
get_entity_and_column_name, get_entity_create_batch_mutation_field_name,
|
||||
get_entity_create_one_mutation_field_name,
|
||||
},
|
||||
},
|
||||
},
|
||||
models::feeds,
|
||||
@@ -45,7 +48,8 @@ pub fn register_feeds_to_schema_context(context: &mut BuilderContext) {
|
||||
pub fn register_feeds_to_schema_builder(mut builder: SeaographyBuilder) -> SeaographyBuilder {
|
||||
builder.register_enumeration::<feeds::FeedType>();
|
||||
builder.register_enumeration::<feeds::FeedSource>();
|
||||
seaography::register_entity!(builder, feeds);
|
||||
|
||||
builder = register_entity_default_writable!(builder, feeds, false);
|
||||
|
||||
builder
|
||||
}
|
||||
|
||||
@@ -6,9 +6,7 @@ use sea_orm::{
|
||||
ColumnTrait, ConnectionTrait, EntityTrait, Iterable, QueryFilter, QuerySelect, QueryTrait,
|
||||
prelude::Expr, sea_query::Query,
|
||||
};
|
||||
use seaography::{
|
||||
Builder as SeaographyBuilder, BuilderContext, GuardAction, get_filter_conditions,
|
||||
};
|
||||
use seaography::{Builder as SeaographyBuilder, BuilderContext, GuardAction};
|
||||
|
||||
use crate::{
|
||||
auth::AuthUserInfo,
|
||||
@@ -18,8 +16,9 @@ use crate::{
|
||||
infra::{
|
||||
custom::{
|
||||
generate_entity_create_one_mutation_field,
|
||||
generate_entity_default_insert_input_object,
|
||||
generate_entity_filtered_mutation_field,
|
||||
generate_entity_default_basic_entity_object,
|
||||
generate_entity_default_insert_input_object, generate_entity_delete_mutation_field,
|
||||
generate_entity_filtered_mutation_field, register_entity_default_readonly,
|
||||
},
|
||||
json::{
|
||||
convert_jsonb_output_case_for_entity, restrict_jsonb_filter_input_for_entity,
|
||||
@@ -31,7 +30,7 @@ use crate::{
|
||||
get_entity_create_batch_mutation_field_name,
|
||||
get_entity_create_one_mutation_data_field_name,
|
||||
get_entity_create_one_mutation_field_name, get_entity_custom_mutation_field_name,
|
||||
get_entity_delete_mutation_field_name, get_entity_update_mutation_field_name,
|
||||
get_entity_update_mutation_field_name,
|
||||
},
|
||||
},
|
||||
},
|
||||
@@ -186,79 +185,66 @@ pub fn register_subscriber_tasks_to_schema_context(context: &mut BuilderContext)
|
||||
pub fn register_subscriber_tasks_to_schema_builder(
|
||||
mut builder: SeaographyBuilder,
|
||||
) -> SeaographyBuilder {
|
||||
builder.register_entity::<subscriber_tasks::Entity>(
|
||||
<subscriber_tasks::RelatedEntity as sea_orm::Iterable>::iter()
|
||||
.map(|rel| seaography::RelationBuilder::get_relation(&rel, builder.context))
|
||||
.collect(),
|
||||
);
|
||||
builder = builder.register_entity_dataloader_one_to_one(subscriber_tasks::Entity, tokio::spawn);
|
||||
builder =
|
||||
builder.register_entity_dataloader_one_to_many(subscriber_tasks::Entity, tokio::spawn);
|
||||
builder.register_enumeration::<subscriber_tasks::SubscriberTaskType>();
|
||||
builder.register_enumeration::<subscriber_tasks::SubscriberTaskStatus>();
|
||||
|
||||
let context = builder.context;
|
||||
builder = register_entity_default_readonly!(builder, subscriber_tasks);
|
||||
|
||||
let builder_context = builder.context;
|
||||
{
|
||||
let delete_mutation =
|
||||
generate_entity_filtered_mutation_field::<subscriber_tasks::Entity, _, _>(
|
||||
context,
|
||||
get_entity_delete_mutation_field_name::<subscriber_tasks::Entity>(context),
|
||||
TypeRef::named_nn(TypeRef::INT),
|
||||
Arc::new(|resolver_ctx, app_ctx, filters| {
|
||||
let filters_condition = get_filter_conditions::<subscriber_tasks::Entity>(
|
||||
resolver_ctx,
|
||||
context,
|
||||
filters,
|
||||
);
|
||||
Box::pin(async move {
|
||||
let db = app_ctx.db();
|
||||
builder
|
||||
.outputs
|
||||
.push(generate_entity_default_basic_entity_object::<
|
||||
subscriber_tasks::Entity,
|
||||
>(builder_context));
|
||||
}
|
||||
{
|
||||
let delete_mutation = generate_entity_delete_mutation_field::<subscriber_tasks::Entity>(
|
||||
builder_context,
|
||||
Arc::new(|_resolver_ctx, app_ctx, filters| {
|
||||
Box::pin(async move {
|
||||
let db = app_ctx.db();
|
||||
|
||||
let select_subquery = subscriber_tasks::Entity::find()
|
||||
.select_only()
|
||||
.column(subscriber_tasks::Column::Id)
|
||||
.filter(filters_condition);
|
||||
let select_subquery = subscriber_tasks::Entity::find()
|
||||
.select_only()
|
||||
.column(subscriber_tasks::Column::Id)
|
||||
.filter(filters);
|
||||
|
||||
let delete_query = Query::delete()
|
||||
.from_table((ApalisSchema::Schema, ApalisJobs::Table))
|
||||
.and_where(
|
||||
Expr::col(ApalisJobs::Id).in_subquery(select_subquery.into_query()),
|
||||
)
|
||||
.to_owned();
|
||||
let delete_query = Query::delete()
|
||||
.from_table((ApalisSchema::Schema, ApalisJobs::Table))
|
||||
.and_where(
|
||||
Expr::col(ApalisJobs::Id).in_subquery(select_subquery.into_query()),
|
||||
)
|
||||
.to_owned();
|
||||
|
||||
let db_backend = db.deref().get_database_backend();
|
||||
let delete_statement = db_backend.build(&delete_query);
|
||||
let db_backend = db.deref().get_database_backend();
|
||||
let delete_statement = db_backend.build(&delete_query);
|
||||
|
||||
let result = db.execute(delete_statement).await?;
|
||||
let result = db.execute(delete_statement).await?;
|
||||
|
||||
Ok::<_, RecorderError>(Some(FieldValue::value(
|
||||
result.rows_affected() as i32
|
||||
)))
|
||||
})
|
||||
}),
|
||||
);
|
||||
Ok::<_, RecorderError>(result.rows_affected())
|
||||
})
|
||||
}),
|
||||
);
|
||||
builder.mutations.push(delete_mutation);
|
||||
}
|
||||
{
|
||||
let entity_retry_one_mutation_name =
|
||||
get_entity_custom_mutation_field_name::<subscriber_tasks::Entity>(context, "RetryOne");
|
||||
let entity_retry_one_mutation_name = get_entity_custom_mutation_field_name::<
|
||||
subscriber_tasks::Entity,
|
||||
>(builder_context, "RetryOne");
|
||||
let retry_one_mutation =
|
||||
generate_entity_filtered_mutation_field::<subscriber_tasks::Entity, _, _>(
|
||||
context,
|
||||
builder_context,
|
||||
entity_retry_one_mutation_name,
|
||||
TypeRef::named_nn(get_entity_basic_type_name::<subscriber_tasks::Entity>(
|
||||
context,
|
||||
builder_context,
|
||||
)),
|
||||
Arc::new(|resolver_ctx, app_ctx, filters| {
|
||||
let filters_condition = get_filter_conditions::<subscriber_tasks::Entity>(
|
||||
resolver_ctx,
|
||||
context,
|
||||
filters,
|
||||
);
|
||||
Arc::new(|_resolver_ctx, app_ctx, filters| {
|
||||
Box::pin(async move {
|
||||
let db = app_ctx.db();
|
||||
|
||||
let job_id = subscriber_tasks::Entity::find()
|
||||
.filter(filters_condition)
|
||||
.filter(filters)
|
||||
.select_only()
|
||||
.column(subscriber_tasks::Column::Id)
|
||||
.into_tuple::<String>()
|
||||
@@ -290,14 +276,14 @@ pub fn register_subscriber_tasks_to_schema_builder(
|
||||
.inputs
|
||||
.push(generate_entity_default_insert_input_object::<
|
||||
subscriber_tasks::Entity,
|
||||
>(context));
|
||||
>(builder_context));
|
||||
let create_one_mutation =
|
||||
generate_entity_create_one_mutation_field::<subscriber_tasks::Entity, TypeRef>(
|
||||
context,
|
||||
builder_context,
|
||||
None,
|
||||
Arc::new(|_resolver_ctx, app_ctx, input_object| {
|
||||
let job_column_name = get_column_name::<subscriber_tasks::Entity>(
|
||||
context,
|
||||
builder_context,
|
||||
&subscriber_tasks::Column::Job,
|
||||
);
|
||||
let task = input_object
|
||||
|
||||
@@ -12,13 +12,16 @@ use seaography::{
|
||||
|
||||
use crate::{
|
||||
auth::{AuthError, AuthUserInfo},
|
||||
graphql::infra::name::{
|
||||
get_column_name, get_entity_and_column_name,
|
||||
get_entity_create_batch_mutation_data_field_name,
|
||||
get_entity_create_batch_mutation_field_name,
|
||||
get_entity_create_one_mutation_data_field_name, get_entity_create_one_mutation_field_name,
|
||||
get_entity_name, get_entity_update_mutation_data_field_name,
|
||||
get_entity_update_mutation_field_name,
|
||||
graphql::infra::{
|
||||
custom::register_entity_default_readonly,
|
||||
name::{
|
||||
get_column_name, get_entity_and_column_name,
|
||||
get_entity_create_batch_mutation_data_field_name,
|
||||
get_entity_create_batch_mutation_field_name,
|
||||
get_entity_create_one_mutation_data_field_name,
|
||||
get_entity_create_one_mutation_field_name, get_entity_name,
|
||||
get_entity_update_mutation_data_field_name, get_entity_update_mutation_field_name,
|
||||
},
|
||||
},
|
||||
models::subscribers,
|
||||
};
|
||||
@@ -325,15 +328,7 @@ pub fn register_subscribers_to_schema_builder(mut builder: SeaographyBuilder) ->
|
||||
.register(filter_types_map_helper.generate_filter_input(&SUBSCRIBER_ID_FILTER_INFO));
|
||||
}
|
||||
|
||||
{
|
||||
builder.register_entity::<subscribers::Entity>(
|
||||
<subscribers::RelatedEntity as sea_orm::Iterable>::iter()
|
||||
.map(|rel| seaography::RelationBuilder::get_relation(&rel, builder.context))
|
||||
.collect(),
|
||||
);
|
||||
builder = builder.register_entity_dataloader_one_to_one(subscribers::Entity, tokio::spawn);
|
||||
builder = builder.register_entity_dataloader_one_to_many(subscribers::Entity, tokio::spawn);
|
||||
}
|
||||
builder = register_entity_default_readonly!(builder, subscribers);
|
||||
|
||||
builder
|
||||
}
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
use seaography::{Builder as SeaographyBuilder, BuilderContext};
|
||||
|
||||
use crate::{
|
||||
graphql::domains::subscribers::restrict_subscriber_for_entity, models::subscription_bangumi,
|
||||
graphql::{
|
||||
domains::subscribers::restrict_subscriber_for_entity,
|
||||
infra::custom::register_entity_default_writable,
|
||||
},
|
||||
models::subscription_bangumi,
|
||||
};
|
||||
|
||||
pub fn register_subscription_bangumi_to_schema_context(context: &mut BuilderContext) {
|
||||
@@ -14,7 +18,7 @@ pub fn register_subscription_bangumi_to_schema_context(context: &mut BuilderCont
|
||||
pub fn register_subscription_bangumi_to_schema_builder(
|
||||
mut builder: SeaographyBuilder,
|
||||
) -> SeaographyBuilder {
|
||||
seaography::register_entity!(builder, subscription_bangumi);
|
||||
builder = register_entity_default_writable!(builder, subscription_bangumi, false);
|
||||
|
||||
builder
|
||||
}
|
||||
|
||||
@@ -1,7 +1,11 @@
|
||||
use seaography::{Builder as SeaographyBuilder, BuilderContext};
|
||||
|
||||
use crate::{
|
||||
graphql::domains::subscribers::restrict_subscriber_for_entity, models::subscription_episode,
|
||||
graphql::{
|
||||
domains::subscribers::restrict_subscriber_for_entity,
|
||||
infra::custom::register_entity_default_writable,
|
||||
},
|
||||
models::subscription_episode,
|
||||
};
|
||||
|
||||
pub fn register_subscription_episode_to_schema_context(context: &mut BuilderContext) {
|
||||
@@ -14,7 +18,7 @@ pub fn register_subscription_episode_to_schema_context(context: &mut BuilderCont
|
||||
pub fn register_subscription_episode_to_schema_builder(
|
||||
mut builder: SeaographyBuilder,
|
||||
) -> SeaographyBuilder {
|
||||
seaography::register_entity!(builder, subscription_episode);
|
||||
builder = register_entity_default_writable!(builder, subscription_episode, false);
|
||||
|
||||
builder
|
||||
}
|
||||
|
||||
@@ -2,14 +2,14 @@ use std::sync::Arc;
|
||||
|
||||
use async_graphql::dynamic::{FieldValue, TypeRef};
|
||||
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter};
|
||||
use seaography::{Builder as SeaographyBuilder, BuilderContext, get_filter_conditions};
|
||||
use seaography::{Builder as SeaographyBuilder, BuilderContext};
|
||||
|
||||
use crate::{
|
||||
errors::RecorderError,
|
||||
graphql::{
|
||||
domains::subscribers::restrict_subscriber_for_entity,
|
||||
infra::{
|
||||
custom::generate_entity_filtered_mutation_field,
|
||||
custom::{generate_entity_filtered_mutation_field, register_entity_default_writable},
|
||||
name::{get_entity_basic_type_name, get_entity_custom_mutation_field_name},
|
||||
},
|
||||
},
|
||||
@@ -31,7 +31,7 @@ pub fn register_subscriptions_to_schema_builder(
|
||||
mut builder: SeaographyBuilder,
|
||||
) -> SeaographyBuilder {
|
||||
builder.register_enumeration::<subscriptions::SubscriptionCategory>();
|
||||
seaography::register_entity!(builder, subscriptions);
|
||||
builder = register_entity_default_writable!(builder, subscriptions, false);
|
||||
|
||||
let context = builder.context;
|
||||
|
||||
@@ -40,55 +40,49 @@ pub fn register_subscriptions_to_schema_builder(
|
||||
subscriptions::Entity,
|
||||
>(context, "SyncOneFeedsIncremental");
|
||||
|
||||
let sync_one_feeds_incremental_mutation = generate_entity_filtered_mutation_field::<
|
||||
subscriptions::Entity,
|
||||
_,
|
||||
_,
|
||||
>(
|
||||
builder.context,
|
||||
sync_one_feeds_incremental_mutation_name,
|
||||
TypeRef::named_nn(get_entity_basic_type_name::<subscriber_tasks::Entity>(
|
||||
context,
|
||||
)),
|
||||
Arc::new(|resolver_ctx, app_ctx, filters| {
|
||||
let filters_condition =
|
||||
get_filter_conditions::<subscriptions::Entity>(resolver_ctx, context, filters);
|
||||
let sync_one_feeds_incremental_mutation =
|
||||
generate_entity_filtered_mutation_field::<subscriptions::Entity, _, _>(
|
||||
builder.context,
|
||||
sync_one_feeds_incremental_mutation_name,
|
||||
TypeRef::named_nn(get_entity_basic_type_name::<subscriber_tasks::Entity>(
|
||||
context,
|
||||
)),
|
||||
Arc::new(|_resolver_ctx, app_ctx, filters| {
|
||||
Box::pin(async move {
|
||||
let db = app_ctx.db();
|
||||
|
||||
Box::pin(async move {
|
||||
let db = app_ctx.db();
|
||||
let subscription_model = subscriptions::Entity::find()
|
||||
.filter(filters)
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
RecorderError::from_entity_not_found::<subscriptions::Entity>()
|
||||
})?;
|
||||
|
||||
let subscription_model = subscriptions::Entity::find()
|
||||
.filter(filters_condition)
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
RecorderError::from_entity_not_found::<subscriptions::Entity>()
|
||||
})?;
|
||||
let task_service = app_ctx.task();
|
||||
|
||||
let task_service = app_ctx.task();
|
||||
let task_id = task_service
|
||||
.add_subscriber_task(
|
||||
SyncOneSubscriptionFeedsIncrementalTask::builder()
|
||||
.subscriber_id(subscription_model.subscriber_id)
|
||||
.subscription_id(subscription_model.id)
|
||||
.build()
|
||||
.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
let task_id = task_service
|
||||
.add_subscriber_task(
|
||||
SyncOneSubscriptionFeedsIncrementalTask::builder()
|
||||
.subscriber_id(subscription_model.subscriber_id)
|
||||
.subscription_id(subscription_model.id)
|
||||
.build()
|
||||
.into(),
|
||||
)
|
||||
.await?;
|
||||
let task_model = subscriber_tasks::Entity::find()
|
||||
.filter(subscriber_tasks::Column::Id.eq(task_id.to_string()))
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
RecorderError::from_entity_not_found::<subscriber_tasks::Entity>()
|
||||
})?;
|
||||
|
||||
let task_model = subscriber_tasks::Entity::find()
|
||||
.filter(subscriber_tasks::Column::Id.eq(task_id.to_string()))
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
RecorderError::from_entity_not_found::<subscriber_tasks::Entity>()
|
||||
})?;
|
||||
|
||||
Ok(Some(FieldValue::owned_any(task_model)))
|
||||
})
|
||||
}),
|
||||
);
|
||||
Ok(Some(FieldValue::owned_any(task_model)))
|
||||
})
|
||||
}),
|
||||
);
|
||||
|
||||
builder.mutations.push(sync_one_feeds_incremental_mutation);
|
||||
}
|
||||
@@ -96,55 +90,49 @@ pub fn register_subscriptions_to_schema_builder(
|
||||
let sync_one_feeds_full_mutation_name = get_entity_custom_mutation_field_name::<
|
||||
subscriptions::Entity,
|
||||
>(builder.context, "SyncOneFeedsFull");
|
||||
let sync_one_feeds_full_mutation = generate_entity_filtered_mutation_field::<
|
||||
subscriptions::Entity,
|
||||
_,
|
||||
_,
|
||||
>(
|
||||
builder.context,
|
||||
sync_one_feeds_full_mutation_name,
|
||||
TypeRef::named_nn(get_entity_basic_type_name::<subscriber_tasks::Entity>(
|
||||
context,
|
||||
)),
|
||||
Arc::new(|resolver_ctx, app_ctx, filters| {
|
||||
let filters_condition =
|
||||
get_filter_conditions::<subscriptions::Entity>(resolver_ctx, context, filters);
|
||||
let sync_one_feeds_full_mutation =
|
||||
generate_entity_filtered_mutation_field::<subscriptions::Entity, _, _>(
|
||||
builder.context,
|
||||
sync_one_feeds_full_mutation_name,
|
||||
TypeRef::named_nn(get_entity_basic_type_name::<subscriber_tasks::Entity>(
|
||||
context,
|
||||
)),
|
||||
Arc::new(|_resolver_ctx, app_ctx, filters| {
|
||||
Box::pin(async move {
|
||||
let db = app_ctx.db();
|
||||
|
||||
Box::pin(async move {
|
||||
let db = app_ctx.db();
|
||||
let subscription_model = subscriptions::Entity::find()
|
||||
.filter(filters)
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
RecorderError::from_entity_not_found::<subscriptions::Entity>()
|
||||
})?;
|
||||
|
||||
let subscription_model = subscriptions::Entity::find()
|
||||
.filter(filters_condition)
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
RecorderError::from_entity_not_found::<subscriptions::Entity>()
|
||||
})?;
|
||||
let task_service = app_ctx.task();
|
||||
|
||||
let task_service = app_ctx.task();
|
||||
let task_id = task_service
|
||||
.add_subscriber_task(
|
||||
SyncOneSubscriptionFeedsFullTask::builder()
|
||||
.subscriber_id(subscription_model.subscriber_id)
|
||||
.subscription_id(subscription_model.id)
|
||||
.build()
|
||||
.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
let task_id = task_service
|
||||
.add_subscriber_task(
|
||||
SyncOneSubscriptionFeedsFullTask::builder()
|
||||
.subscriber_id(subscription_model.subscriber_id)
|
||||
.subscription_id(subscription_model.id)
|
||||
.build()
|
||||
.into(),
|
||||
)
|
||||
.await?;
|
||||
let task_model = subscriber_tasks::Entity::find()
|
||||
.filter(subscriber_tasks::Column::Id.eq(task_id.to_string()))
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
RecorderError::from_entity_not_found::<subscriber_tasks::Entity>()
|
||||
})?;
|
||||
|
||||
let task_model = subscriber_tasks::Entity::find()
|
||||
.filter(subscriber_tasks::Column::Id.eq(task_id.to_string()))
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
RecorderError::from_entity_not_found::<subscriber_tasks::Entity>()
|
||||
})?;
|
||||
|
||||
Ok(Some(FieldValue::owned_any(task_model)))
|
||||
})
|
||||
}),
|
||||
);
|
||||
Ok(Some(FieldValue::owned_any(task_model)))
|
||||
})
|
||||
}),
|
||||
);
|
||||
|
||||
builder.mutations.push(sync_one_feeds_full_mutation);
|
||||
}
|
||||
@@ -154,55 +142,49 @@ pub fn register_subscriptions_to_schema_builder(
|
||||
subscriptions::Entity,
|
||||
>(context, "SyncOneSources");
|
||||
|
||||
let sync_one_sources_mutation = generate_entity_filtered_mutation_field::<
|
||||
subscriptions::Entity,
|
||||
_,
|
||||
_,
|
||||
>(
|
||||
builder.context,
|
||||
sync_one_sources_mutation_name,
|
||||
TypeRef::named_nn(get_entity_basic_type_name::<subscriber_tasks::Entity>(
|
||||
context,
|
||||
)),
|
||||
Arc::new(|resolver_ctx, app_ctx, filters| {
|
||||
let filters_condition =
|
||||
get_filter_conditions::<subscriptions::Entity>(resolver_ctx, context, filters);
|
||||
let sync_one_sources_mutation =
|
||||
generate_entity_filtered_mutation_field::<subscriptions::Entity, _, _>(
|
||||
builder.context,
|
||||
sync_one_sources_mutation_name,
|
||||
TypeRef::named_nn(get_entity_basic_type_name::<subscriber_tasks::Entity>(
|
||||
context,
|
||||
)),
|
||||
Arc::new(|_resolver_ctx, app_ctx, filters| {
|
||||
Box::pin(async move {
|
||||
let db = app_ctx.db();
|
||||
|
||||
Box::pin(async move {
|
||||
let db = app_ctx.db();
|
||||
let subscription_model = subscriptions::Entity::find()
|
||||
.filter(filters)
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
RecorderError::from_entity_not_found::<subscriptions::Entity>()
|
||||
})?;
|
||||
|
||||
let subscription_model = subscriptions::Entity::find()
|
||||
.filter(filters_condition)
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
RecorderError::from_entity_not_found::<subscriptions::Entity>()
|
||||
})?;
|
||||
let task_service = app_ctx.task();
|
||||
|
||||
let task_service = app_ctx.task();
|
||||
let task_id = task_service
|
||||
.add_subscriber_task(
|
||||
SyncOneSubscriptionSourcesTask::builder()
|
||||
.subscriber_id(subscription_model.subscriber_id)
|
||||
.subscription_id(subscription_model.id)
|
||||
.build()
|
||||
.into(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
let task_id = task_service
|
||||
.add_subscriber_task(
|
||||
SyncOneSubscriptionSourcesTask::builder()
|
||||
.subscriber_id(subscription_model.subscriber_id)
|
||||
.subscription_id(subscription_model.id)
|
||||
.build()
|
||||
.into(),
|
||||
)
|
||||
.await?;
|
||||
let task_model = subscriber_tasks::Entity::find()
|
||||
.filter(subscriber_tasks::Column::Id.eq(task_id.to_string()))
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
RecorderError::from_entity_not_found::<subscriber_tasks::Entity>()
|
||||
})?;
|
||||
|
||||
let task_model = subscriber_tasks::Entity::find()
|
||||
.filter(subscriber_tasks::Column::Id.eq(task_id.to_string()))
|
||||
.one(db)
|
||||
.await?
|
||||
.ok_or_else(|| {
|
||||
RecorderError::from_entity_not_found::<subscriber_tasks::Entity>()
|
||||
})?;
|
||||
|
||||
Ok(Some(FieldValue::owned_any(task_model)))
|
||||
})
|
||||
}),
|
||||
);
|
||||
Ok(Some(FieldValue::owned_any(task_model)))
|
||||
})
|
||||
}),
|
||||
);
|
||||
|
||||
builder.mutations.push(sync_one_sources_mutation);
|
||||
}
|
||||
|
||||
@@ -1,14 +1,15 @@
|
||||
use std::{pin::Pin, sync::Arc};
|
||||
use std::{iter::FusedIterator, pin::Pin, sync::Arc};
|
||||
|
||||
use async_graphql::dynamic::{
|
||||
Field, FieldFuture, FieldValue, InputObject, InputValue, Object, ObjectAccessor,
|
||||
ResolverContext, TypeRef, ValueAccessor,
|
||||
ResolverContext, TypeRef,
|
||||
};
|
||||
use sea_orm::{
|
||||
ActiveModelTrait, Condition, EntityTrait, IntoActiveModel, QueryFilter, TransactionTrait,
|
||||
};
|
||||
use seaography::{
|
||||
BuilderContext, GuardAction, SeaographyError, get_filter_conditions, prepare_active_model,
|
||||
Builder as SeaographyBuilder, BuilderContext, GuardAction, RelationBuilder, SeaographyError,
|
||||
get_filter_conditions, prepare_active_model,
|
||||
};
|
||||
|
||||
use crate::{
|
||||
@@ -31,7 +32,7 @@ pub type FilterMutationFn = Arc<
|
||||
dyn for<'a> Fn(
|
||||
&ResolverContext<'a>,
|
||||
Arc<dyn AppContextTrait>,
|
||||
Option<ValueAccessor<'_>>,
|
||||
Condition,
|
||||
) -> Pin<
|
||||
Box<dyn Future<Output = RecorderResult<Option<FieldValue<'a>>>> + Send + 'a>,
|
||||
> + Send
|
||||
@@ -156,6 +157,8 @@ where
|
||||
|
||||
let filters = ctx.args.get(get_entity_renormalized_filter_field_name());
|
||||
|
||||
let filters = get_filter_conditions::<E>(&ctx, builder_context, filters);
|
||||
|
||||
let result = mutation_fn(&ctx, app_ctx.clone(), filters)
|
||||
.await
|
||||
.map_err(async_graphql::Error::new_with_source)?;
|
||||
@@ -791,3 +794,100 @@ where
|
||||
generate_entity_default_delete_mutation_fn::<E, A>(builder_context, active_model_hooks),
|
||||
)
|
||||
}
|
||||
|
||||
pub fn register_entity_default_mutations<E, A>(
|
||||
mut builder: SeaographyBuilder,
|
||||
active_model_hooks: bool,
|
||||
) -> SeaographyBuilder
|
||||
where
|
||||
E: EntityTrait,
|
||||
<E as EntityTrait>::Model: Sync + IntoActiveModel<A>,
|
||||
A: ActiveModelTrait<Entity = E> + sea_orm::ActiveModelBehavior + std::marker::Send + 'static,
|
||||
{
|
||||
builder
|
||||
.outputs
|
||||
.push(generate_entity_default_basic_entity_object::<E>(
|
||||
builder.context,
|
||||
));
|
||||
|
||||
builder.inputs.extend([
|
||||
generate_entity_default_insert_input_object::<E>(builder.context),
|
||||
generate_entity_default_update_input_object::<E>(builder.context),
|
||||
]);
|
||||
|
||||
builder.mutations.extend([
|
||||
generate_entity_default_create_one_mutation_field::<E, A>(
|
||||
builder.context,
|
||||
active_model_hooks,
|
||||
),
|
||||
generate_entity_default_create_batch_mutation_field::<E, A>(
|
||||
builder.context,
|
||||
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
|
||||
}
|
||||
|
||||
pub(crate) fn register_entity_default_readonly_impl<T, RE, I>(
|
||||
mut builder: SeaographyBuilder,
|
||||
entity: T,
|
||||
) -> SeaographyBuilder
|
||||
where
|
||||
T: EntityTrait,
|
||||
<T as EntityTrait>::Model: Sync,
|
||||
RE: sea_orm::Iterable<Iterator = I> + RelationBuilder,
|
||||
I: Iterator<Item = RE> + Clone + DoubleEndedIterator + ExactSizeIterator + FusedIterator,
|
||||
{
|
||||
builder.register_entity::<T>(
|
||||
<RE as sea_orm::Iterable>::iter()
|
||||
.map(|rel| RelationBuilder::get_relation(&rel, builder.context))
|
||||
.collect(),
|
||||
);
|
||||
builder = builder.register_entity_dataloader_one_to_one(entity, tokio::spawn);
|
||||
builder = builder.register_entity_dataloader_one_to_many(entity, tokio::spawn);
|
||||
builder
|
||||
}
|
||||
|
||||
pub(crate) fn register_entity_default_writable_impl<T, RE, A, I>(
|
||||
mut builder: SeaographyBuilder,
|
||||
entity: T,
|
||||
active_model_hooks: bool,
|
||||
) -> SeaographyBuilder
|
||||
where
|
||||
T: EntityTrait,
|
||||
<T as EntityTrait>::Model: Sync + IntoActiveModel<A>,
|
||||
A: ActiveModelTrait<Entity = T> + sea_orm::ActiveModelBehavior + std::marker::Send + 'static,
|
||||
RE: sea_orm::Iterable<Iterator = I> + RelationBuilder,
|
||||
I: Iterator<Item = RE> + Clone + DoubleEndedIterator + ExactSizeIterator + FusedIterator,
|
||||
{
|
||||
builder = register_entity_default_readonly_impl::<T, RE, I>(builder, entity);
|
||||
builder = register_entity_default_mutations::<T, A>(builder, active_model_hooks);
|
||||
builder
|
||||
}
|
||||
|
||||
macro_rules! register_entity_default_readonly {
|
||||
($builder:expr, $module_path:ident) => {
|
||||
$crate::graphql::infra::custom::register_entity_default_readonly_impl::<
|
||||
$module_path::Entity,
|
||||
$module_path::RelatedEntity,
|
||||
_,
|
||||
>($builder, $module_path::Entity)
|
||||
};
|
||||
}
|
||||
|
||||
macro_rules! register_entity_default_writable {
|
||||
($builder:expr, $module_path:ident, $active_model_hooks:expr) => {
|
||||
$crate::graphql::infra::custom::register_entity_default_writable_impl::<
|
||||
$module_path::Entity,
|
||||
$module_path::RelatedEntity,
|
||||
$module_path::ActiveModel,
|
||||
_,
|
||||
>($builder, $module_path::Entity, $active_model_hooks)
|
||||
};
|
||||
}
|
||||
|
||||
pub(crate) use register_entity_default_readonly;
|
||||
pub(crate) use register_entity_default_writable;
|
||||
|
||||
@@ -12,6 +12,7 @@ use crate::{
|
||||
credential_3rd::{
|
||||
register_credential3rd_to_schema_builder, register_credential3rd_to_schema_context,
|
||||
},
|
||||
cron::{register_cron_to_schema_builder, register_cron_to_schema_context},
|
||||
downloaders::{
|
||||
register_downloaders_to_schema_builder, register_downloaders_to_schema_context,
|
||||
},
|
||||
@@ -77,6 +78,7 @@ pub fn build_schema(
|
||||
register_subscription_bangumi_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
|
||||
});
|
||||
@@ -100,6 +102,7 @@ pub fn build_schema(
|
||||
builder = register_credential3rd_to_schema_builder(builder);
|
||||
builder = register_subscriber_tasks_to_schema_builder(builder);
|
||||
builder = register_bangumi_to_schema_builder(builder);
|
||||
builder = register_cron_to_schema_builder(builder);
|
||||
}
|
||||
|
||||
let schema = builder.schema_builder();
|
||||
|
||||
@@ -23,6 +23,7 @@ macro_rules! register_subscriber_task_types {
|
||||
$(#[$task_enum_meta:meta])*
|
||||
pub enum $task_enum_name:ident {
|
||||
$(
|
||||
$(#[$task_variant_meta:meta])*
|
||||
$task_variant:ident($task_type:ty)
|
||||
),* $(,)?
|
||||
}
|
||||
@@ -44,6 +45,8 @@ macro_rules! register_subscriber_task_types {
|
||||
#[serde(tag = "task_type")]
|
||||
pub enum $task_enum_name {
|
||||
$(
|
||||
$(#[$task_variant_meta])*
|
||||
#[serde(rename = $string_value)]
|
||||
$task_variant($task_type),
|
||||
)*
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user