fix: fix migrations
This commit is contained in:
parent
1d0aa8d7f1
commit
b5b3c77ba3
12
Cargo.lock
generated
12
Cargo.lock
generated
@ -356,9 +356,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "async-channel"
|
||||
version = "2.3.1"
|
||||
version = "2.4.0"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "89b47800b0be77592da0afd425cc03468052844aff33b84e33cc696f64e77b6a"
|
||||
checksum = "16c74e56284d2188cabb6ad99603d1ace887a5d7e7b695d01b728155ed9ed427"
|
||||
dependencies = [
|
||||
"concurrent-queue",
|
||||
"event-listener-strategy",
|
||||
@ -4169,9 +4169,9 @@ checksum = "1171693293099992e19cddea4e8b849964e9846f4acee11b3948bcc337be8776"
|
||||
|
||||
[[package]]
|
||||
name = "libfuzzer-sys"
|
||||
version = "0.4.9"
|
||||
version = "0.4.10"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "cf78f52d400cf2d84a3a973a78a592b4adc535739e0a5597a0da6f0c357adc75"
|
||||
checksum = "5037190e1f70cbeef565bd267599242926f724d3b8a9f510fd7e0b540cfa4404"
|
||||
dependencies = [
|
||||
"arbitrary",
|
||||
"cc",
|
||||
@ -10426,9 +10426,9 @@ dependencies = [
|
||||
|
||||
[[package]]
|
||||
name = "zune-jpeg"
|
||||
version = "0.4.18"
|
||||
version = "0.4.19"
|
||||
source = "registry+https://github.com/rust-lang/crates.io-index"
|
||||
checksum = "7384255a918371b5af158218d131530f694de9ad3815ebdd0453a940485cb0fa"
|
||||
checksum = "2c9e525af0a6a658e031e95f14b7f889976b74a11ba0eca5a5fc9ac8a1c43a6a"
|
||||
dependencies = [
|
||||
"zune-core",
|
||||
]
|
||||
|
@ -13,9 +13,6 @@ members = [
|
||||
resolver = "2"
|
||||
|
||||
[profile.dev]
|
||||
debug = 0
|
||||
# https://github.com/rust-lang/rust/issues/141540
|
||||
incremental = true # Then only change rust-analyzer incremental
|
||||
# [simd not supported by cranelift](https://github.com/rust-lang/rustc_codegen_cranelift/issues/171)
|
||||
# codegen-backend = "cranelift"
|
||||
|
||||
|
@ -17,8 +17,8 @@ fn skip_columns_for_entity_input(context: &mut BuilderContext) {
|
||||
for column in cron::Column::iter() {
|
||||
if matches!(
|
||||
column,
|
||||
cron::Column::SubscriberTask
|
||||
| cron::Column::SystemTask
|
||||
cron::Column::SubscriberTaskCron
|
||||
| cron::Column::SystemTaskCron
|
||||
| cron::Column::CronExpr
|
||||
| cron::Column::Enabled
|
||||
| cron::Column::TimeoutMs
|
||||
@ -45,8 +45,11 @@ fn skip_columns_for_entity_input(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_tasks_for_entity::<cron::Entity>(context, &cron::Column::SubscriberTask);
|
||||
restrict_system_tasks_for_entity::<cron::Entity>(context, &cron::Column::SystemTask);
|
||||
restrict_subscriber_tasks_for_entity::<cron::Entity>(
|
||||
context,
|
||||
&cron::Column::SubscriberTaskCron,
|
||||
);
|
||||
restrict_system_tasks_for_entity::<cron::Entity>(context, &cron::Column::SystemTaskCron);
|
||||
skip_columns_for_entity_input(context);
|
||||
}
|
||||
|
||||
|
@ -7,7 +7,8 @@ use sea_orm::{
|
||||
QuerySelect, QueryTrait, prelude::Expr, sea_query::Query,
|
||||
};
|
||||
use seaography::{
|
||||
Builder as SeaographyBuilder, BuilderContext, SeaographyError, prepare_active_model,
|
||||
Builder as SeaographyBuilder, BuilderContext, GuardAction, SeaographyError,
|
||||
prepare_active_model,
|
||||
};
|
||||
use ts_rs::TS;
|
||||
|
||||
@ -59,6 +60,14 @@ where
|
||||
restrict_jsonb_filter_input_for_entity::<T>(context, column);
|
||||
convert_jsonb_output_for_entity::<T>(context, column, Some(Case::Camel));
|
||||
let entity_column_name = get_entity_and_column_name::<T>(context, column);
|
||||
context.guards.field_guards.insert(
|
||||
entity_column_name.clone(),
|
||||
Box::new(|_resolver_ctx| {
|
||||
GuardAction::Block(Some(
|
||||
"SystemTask can not be created by subscribers now".to_string(),
|
||||
))
|
||||
}),
|
||||
);
|
||||
|
||||
context.types.input_type_overwrites.insert(
|
||||
entity_column_name.clone(),
|
||||
@ -112,6 +121,7 @@ pub fn register_system_tasks_to_schema_builder(
|
||||
.description(system_tasks::SystemTask::decl()),
|
||||
);
|
||||
builder.register_enumeration::<system_tasks::SystemTaskType>();
|
||||
builder.register_enumeration::<system_tasks::SystemTaskStatus>();
|
||||
|
||||
builder = register_entity_default_readonly!(builder, system_tasks);
|
||||
let builder_context = builder.context;
|
||||
|
@ -189,8 +189,8 @@ pub enum Cron {
|
||||
MaxAttempts,
|
||||
Priority,
|
||||
Status,
|
||||
SubscriberTask,
|
||||
SystemTask,
|
||||
SubscriberTaskCron,
|
||||
SystemTaskCron,
|
||||
}
|
||||
|
||||
#[derive(sea_query::Iden)]
|
||||
@ -317,6 +317,26 @@ pub trait CustomSchemaManagerExt {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn create_foreign_key_if_not_exists<
|
||||
T: IntoIden + 'static + Send,
|
||||
S: IntoIden + 'static + Send,
|
||||
>(
|
||||
&self,
|
||||
from_tbl: T,
|
||||
foreign_key: S,
|
||||
stmt: ForeignKeyCreateStatement,
|
||||
) -> Result<(), DbErr>;
|
||||
|
||||
async fn drop_foreign_key_if_exists<
|
||||
T: IntoIden + 'static + Send,
|
||||
S: IntoIden + 'static + Send,
|
||||
>(
|
||||
&self,
|
||||
from_tbl: T,
|
||||
foreign_key: S,
|
||||
stmt: ForeignKeyDropStatement,
|
||||
) -> Result<(), DbErr>;
|
||||
|
||||
async fn create_postgres_enum_for_active_enum<
|
||||
E: IntoTypeRef + IntoIden + Send + Clone,
|
||||
I: IntoIterator<Item = String> + Send,
|
||||
@ -403,6 +423,71 @@ impl CustomSchemaManagerExt for SchemaManager<'_> {
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn create_foreign_key_if_not_exists<
|
||||
T: IntoIden + 'static + Send,
|
||||
S: IntoIden + 'static + Send,
|
||||
>(
|
||||
&self,
|
||||
from_tbl: T,
|
||||
foreign_key: S,
|
||||
stmt: ForeignKeyCreateStatement,
|
||||
) -> Result<(), DbErr> {
|
||||
let from_tbl = from_tbl.into_iden().to_string();
|
||||
let foreign_key = foreign_key.into_iden().to_string();
|
||||
let db = self
|
||||
.get_connection()
|
||||
.query_one(Statement::from_string(
|
||||
self.get_database_backend(),
|
||||
format!(
|
||||
"
|
||||
SELECT CONSTRAINT_NAME
|
||||
FROM information_schema.KEY_COLUMN_USAGE
|
||||
WHERE TABLE_NAME = '{from_tbl}' AND CONSTRAINT_NAME = '{foreign_key}'
|
||||
"
|
||||
),
|
||||
))
|
||||
.await?;
|
||||
|
||||
if db.is_some() {
|
||||
return Ok(());
|
||||
}
|
||||
|
||||
self.create_foreign_key(stmt).await?;
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn drop_foreign_key_if_exists<
|
||||
T: IntoIden + 'static + Send,
|
||||
S: IntoIden + 'static + Send,
|
||||
>(
|
||||
&self,
|
||||
from_tbl: T,
|
||||
foreign_key: S,
|
||||
stmt: ForeignKeyDropStatement,
|
||||
) -> Result<(), DbErr> {
|
||||
let from_tbl = from_tbl.into_iden().to_string();
|
||||
let foreign_key = foreign_key.into_iden().to_string();
|
||||
let db = self
|
||||
.get_connection()
|
||||
.query_one(Statement::from_string(
|
||||
self.get_database_backend(),
|
||||
format!(
|
||||
"
|
||||
SELECT CONSTRAINT_NAME
|
||||
FROM information_schema.KEY_COLUMN_USAGE
|
||||
WHERE TABLE_NAME = '{from_tbl}' AND CONSTRAINT_NAME = '{foreign_key}'
|
||||
"
|
||||
),
|
||||
))
|
||||
.await?;
|
||||
|
||||
if db.is_some() {
|
||||
self.drop_foreign_key(stmt).await?;
|
||||
}
|
||||
|
||||
Ok(())
|
||||
}
|
||||
|
||||
async fn create_postgres_enum_for_active_enum<
|
||||
E: IntoTypeRef + IntoIden + Send + Clone,
|
||||
I: IntoIterator<Item = String> + Send,
|
||||
|
@ -90,6 +90,11 @@ impl MigrationTrait for Migration {
|
||||
SimpleExpr::from(AuthType::Basic).as_enum(AuthTypeEnum),
|
||||
seed_subscriber_id.into(),
|
||||
])
|
||||
.on_conflict(
|
||||
OnConflict::columns([Auth::Pid, Auth::AuthType])
|
||||
.do_nothing()
|
||||
.to_owned(),
|
||||
)
|
||||
.to_owned(),
|
||||
)
|
||||
.await?;
|
||||
|
@ -72,16 +72,22 @@ impl MigrationTrait for Migration {
|
||||
Table::alter()
|
||||
.table(Subscriptions::Table)
|
||||
.add_column_if_not_exists(integer_null(Subscriptions::CredentialId))
|
||||
.add_foreign_key(
|
||||
TableForeignKey::new()
|
||||
.to_owned(),
|
||||
)
|
||||
.await?;
|
||||
|
||||
manager
|
||||
.create_foreign_key_if_not_exists(
|
||||
Subscriptions::Table,
|
||||
"fk_subscriptions_credential_id",
|
||||
ForeignKeyCreateStatement::new()
|
||||
.name("fk_subscriptions_credential_id")
|
||||
.from_tbl(Subscriptions::Table)
|
||||
.from_col(Subscriptions::CredentialId)
|
||||
.to_tbl(Credential3rd::Table)
|
||||
.to_col(Credential3rd::Id)
|
||||
.on_update(ForeignKeyAction::Cascade)
|
||||
.on_delete(ForeignKeyAction::SetNull),
|
||||
)
|
||||
.on_delete(ForeignKeyAction::SetNull)
|
||||
.to_owned(),
|
||||
)
|
||||
.await?;
|
||||
|
@ -23,7 +23,7 @@ impl MigrationTrait for Migration {
|
||||
.table((ApalisSchema::Schema, ApalisJobs::Table))
|
||||
.add_column_if_not_exists(integer_null(ApalisJobs::SubscriberId))
|
||||
.add_column_if_not_exists(integer_null(ApalisJobs::SubscriptionId))
|
||||
.add_column_if_not_exists(string_null(ApalisJobs::TaskType))
|
||||
.add_column_if_not_exists(text_null(ApalisJobs::TaskType))
|
||||
.add_foreign_key(
|
||||
TableForeignKey::new()
|
||||
.name("fk_apalis_jobs_subscriber_id")
|
||||
|
@ -56,8 +56,8 @@ impl MigrationTrait for Migration {
|
||||
CronStatusEnum,
|
||||
CronStatus::iden_values(),
|
||||
))
|
||||
.col(json_binary_null(Cron::SubscriberTask))
|
||||
.col(json_binary_null(Cron::SystemTask))
|
||||
.col(json_binary_null(Cron::SubscriberTaskCron))
|
||||
.col(json_binary_null(Cron::SystemTaskCron))
|
||||
.foreign_key(
|
||||
ForeignKey::create()
|
||||
.name("fk_cron_subscriber_id")
|
||||
@ -102,25 +102,25 @@ impl MigrationTrait for Migration {
|
||||
new_subscriber_task_subscription_id integer;
|
||||
new_system_task_subscriber_id integer;
|
||||
BEGIN
|
||||
new_subscriber_task_subscriber_id = (NEW.{subscriber_task} ->> 'subscriber_id')::integer;
|
||||
new_subscriber_task_subscription_id = (NEW.{subscriber_task} ->> 'subscription_id')::integer;
|
||||
new_system_task_subscriber_id = (NEW.{system_task} ->> 'subscriber_id')::integer;
|
||||
IF new_subscriber_task_subscriber_id != (OLD.{subscriber_task} ->> 'subscriber_id')::integer AND new_subscriber_task_subscriber_id != NEW.{subscriber_id} THEN
|
||||
new_subscriber_task_subscriber_id = (NEW.{subscriber_task_cron} ->> 'subscriber_id')::integer;
|
||||
new_subscriber_task_subscription_id = (NEW.{subscriber_task_cron} ->> 'subscription_id')::integer;
|
||||
new_system_task_subscriber_id = (NEW.{system_task_cron} ->> 'subscriber_id')::integer;
|
||||
IF new_subscriber_task_subscriber_id != (OLD.{subscriber_task_cron} ->> 'subscriber_id')::integer AND new_subscriber_task_subscriber_id != NEW.{subscriber_id} THEN
|
||||
NEW.{subscriber_id} = new_subscriber_task_subscriber_id;
|
||||
END IF;
|
||||
IF new_subscriber_task_subscription_id != (OLD.{subscriber_task} ->> 'subscription_id')::integer AND new_subscriber_task_subscription_id != NEW.{subscription_id} THEN
|
||||
IF new_subscriber_task_subscription_id != (OLD.{subscriber_task_cron} ->> 'subscription_id')::integer AND new_subscriber_task_subscription_id != NEW.{subscription_id} THEN
|
||||
NEW.{subscription_id} = new_subscriber_task_subscription_id;
|
||||
END IF;
|
||||
IF new_system_task_subscriber_id != (OLD.{system_task} ->> 'subscriber_id')::integer AND new_system_task_subscriber_id != NEW.{subscriber_id} THEN
|
||||
IF new_system_task_subscriber_id != (OLD.{system_task_cron} ->> 'subscriber_id')::integer AND new_system_task_subscriber_id != NEW.{subscriber_id} THEN
|
||||
NEW.{subscriber_id} = new_system_task_subscriber_id;
|
||||
END IF;
|
||||
RETURN NEW;
|
||||
END;
|
||||
$$ LANGUAGE plpgsql;"#,
|
||||
subscriber_task = &Cron::SubscriberTask.to_string(),
|
||||
subscriber_task_cron = &Cron::SubscriberTaskCron.to_string(),
|
||||
subscriber_id = &Cron::SubscriberId.to_string(),
|
||||
subscription_id = &Cron::SubscriptionId.to_string(),
|
||||
system_task = &Cron::SystemTask.to_string(),
|
||||
system_task_cron = &Cron::SystemTaskCron.to_string(),
|
||||
)).await?;
|
||||
|
||||
db.execute_unprepared(&format!(
|
||||
|
@ -1,5 +1,4 @@
|
||||
mod core;
|
||||
mod registry;
|
||||
|
||||
pub use core::{
|
||||
CHECK_AND_TRIGGER_DUE_CRONS_FUNCTION_NAME, CRON_DUE_EVENT,
|
||||
@ -71,8 +70,8 @@ pub struct Model {
|
||||
pub status: CronStatus,
|
||||
#[sea_orm(default_expr = "true")]
|
||||
pub enabled: bool,
|
||||
pub subscriber_task: Option<subscriber_tasks::SubscriberTask>,
|
||||
pub system_task: Option<system_tasks::SystemTask>,
|
||||
pub subscriber_task_cron: Option<subscriber_tasks::SubscriberTask>,
|
||||
pub system_task_cron: Option<system_tasks::SystemTask>,
|
||||
}
|
||||
|
||||
#[derive(Copy, Clone, Debug, EnumIter, DeriveRelation)]
|
||||
@ -152,19 +151,19 @@ impl ActiveModelBehavior for ActiveModel {
|
||||
self.next_run = Set(Some(next_run));
|
||||
}
|
||||
if let ActiveValue::Set(Some(subscriber_id)) = self.subscriber_id
|
||||
&& let ActiveValue::Set(Some(ref subscriber_task)) = self.subscriber_task
|
||||
&& let ActiveValue::Set(Some(ref subscriber_task)) = self.subscriber_task_cron
|
||||
&& subscriber_task.get_subscriber_id() != subscriber_id
|
||||
{
|
||||
return Err(DbErr::Custom(
|
||||
"Cron subscriber_id does not match subscriber_task.subscriber_id".to_string(),
|
||||
"Cron subscriber_id does not match subscriber_task_cron.subscriber_id".to_string(),
|
||||
));
|
||||
}
|
||||
if let ActiveValue::Set(Some(subscriber_id)) = self.subscriber_id
|
||||
&& let ActiveValue::Set(Some(ref system_task)) = self.system_task
|
||||
&& let ActiveValue::Set(Some(ref system_task)) = self.system_task_cron
|
||||
&& system_task.get_subscriber_id() != Some(subscriber_id)
|
||||
{
|
||||
return Err(DbErr::Custom(
|
||||
"Cron subscriber_id does not match system_task.subscriber_id".to_string(),
|
||||
"Cron subscriber_id does not match system_task_cron.subscriber_id".to_string(),
|
||||
));
|
||||
}
|
||||
|
||||
@ -248,14 +247,14 @@ impl Model {
|
||||
}
|
||||
|
||||
async fn exec_cron(&self, ctx: &dyn AppContextTrait) -> RecorderResult<()> {
|
||||
if let Some(subscriber_task) = self.subscriber_task.as_ref() {
|
||||
if let Some(subscriber_task) = self.subscriber_task_cron.as_ref() {
|
||||
let task_service = ctx.task();
|
||||
let mut new_subscriber_task = subscriber_task.clone();
|
||||
new_subscriber_task.set_cron_id(Some(self.id));
|
||||
task_service
|
||||
.add_subscriber_task(new_subscriber_task)
|
||||
.await?;
|
||||
} else if let Some(system_task) = self.system_task.as_ref() {
|
||||
} else if let Some(system_task) = self.system_task_cron.as_ref() {
|
||||
let task_service = ctx.task();
|
||||
let mut new_system_task = system_task.clone();
|
||||
new_system_task.set_cron_id(Some(self.id));
|
||||
|
@ -1 +0,0 @@
|
||||
|
@ -302,7 +302,10 @@ mod tests {
|
||||
use tracing::Level;
|
||||
|
||||
use super::*;
|
||||
use crate::test_utils::{app::TestingPreset, tracing::try_init_testing_tracing};
|
||||
use crate::test_utils::{
|
||||
// app::TestingPreset,
|
||||
tracing::try_init_testing_tracing,
|
||||
};
|
||||
|
||||
#[fixture]
|
||||
fn before_each() {
|
||||
@ -312,13 +315,6 @@ mod tests {
|
||||
#[rstest]
|
||||
#[tokio::test]
|
||||
async fn test_cron_due_listening(before_each: ()) -> RecorderResult<()> {
|
||||
let mut preset = TestingPreset::default().await?;
|
||||
let app_ctx = preset.app_ctx.clone();
|
||||
|
||||
let db = app_ctx.db();
|
||||
|
||||
todo!();
|
||||
|
||||
Ok(())
|
||||
todo!()
|
||||
}
|
||||
}
|
||||
|
@ -21,6 +21,8 @@ export type Scalars = {
|
||||
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; }
|
||||
/** type SystemTaskType = { "taskType": "optimize_image" } & OptimizeImageTask; */
|
||||
SystemTaskType: { input: any; output: any; }
|
||||
};
|
||||
|
||||
export type Bangumi = {
|
||||
@ -354,13 +356,30 @@ export type Cron = {
|
||||
status: CronStatusEnum;
|
||||
subscriber?: Maybe<Subscribers>;
|
||||
subscriberId?: Maybe<Scalars['Int']['output']>;
|
||||
subscriberTask?: Maybe<Scalars['SubscriberTaskType']['output']>;
|
||||
subscriberTask: SubscriberTasksConnection;
|
||||
subscriberTaskCron?: Maybe<Scalars['SubscriberTaskType']['output']>;
|
||||
subscription?: Maybe<Subscriptions>;
|
||||
subscriptionId?: Maybe<Scalars['Int']['output']>;
|
||||
systemTask: SystemTasksConnection;
|
||||
systemTaskCron?: Maybe<Scalars['SystemTaskType']['output']>;
|
||||
timeoutMs: Scalars['Int']['output'];
|
||||
updatedAt: Scalars['String']['output'];
|
||||
};
|
||||
|
||||
|
||||
export type CronSubscriberTaskArgs = {
|
||||
filter?: InputMaybe<SubscriberTasksFilterInput>;
|
||||
orderBy?: InputMaybe<SubscriberTasksOrderInput>;
|
||||
pagination?: InputMaybe<PaginationInput>;
|
||||
};
|
||||
|
||||
|
||||
export type CronSystemTaskArgs = {
|
||||
filter?: InputMaybe<SystemTasksFilterInput>;
|
||||
orderBy?: InputMaybe<SystemTasksOrderInput>;
|
||||
pagination?: InputMaybe<PaginationInput>;
|
||||
};
|
||||
|
||||
export type CronBasic = {
|
||||
__typename?: 'CronBasic';
|
||||
attempts: Scalars['Int']['output'];
|
||||
@ -377,8 +396,9 @@ export type CronBasic = {
|
||||
priority: Scalars['Int']['output'];
|
||||
status: CronStatusEnum;
|
||||
subscriberId?: Maybe<Scalars['Int']['output']>;
|
||||
subscriberTask?: Maybe<Scalars['SubscriberTaskType']['output']>;
|
||||
subscriberTaskCron?: Maybe<Scalars['SubscriberTaskType']['output']>;
|
||||
subscriptionId?: Maybe<Scalars['Int']['output']>;
|
||||
systemTaskCron?: Maybe<Scalars['SystemTaskType']['output']>;
|
||||
timeoutMs: Scalars['Int']['output'];
|
||||
updatedAt: Scalars['String']['output'];
|
||||
};
|
||||
@ -414,8 +434,9 @@ export type CronFilterInput = {
|
||||
priority?: InputMaybe<IntegerFilterInput>;
|
||||
status?: InputMaybe<CronStatusEnumFilterInput>;
|
||||
subscriberId?: InputMaybe<SubscriberIdFilterInput>;
|
||||
subscriberTask?: InputMaybe<Scalars['JsonbFilterInput']['input']>;
|
||||
subscriberTaskCron?: InputMaybe<Scalars['JsonbFilterInput']['input']>;
|
||||
subscriptionId?: InputMaybe<IntegerFilterInput>;
|
||||
systemTaskCron?: InputMaybe<Scalars['JsonbFilterInput']['input']>;
|
||||
timeoutMs?: InputMaybe<IntegerFilterInput>;
|
||||
updatedAt?: InputMaybe<TextFilterInput>;
|
||||
};
|
||||
@ -424,7 +445,8 @@ export type CronInsertInput = {
|
||||
cronExpr: Scalars['String']['input'];
|
||||
enabled?: InputMaybe<Scalars['Boolean']['input']>;
|
||||
maxAttempts?: InputMaybe<Scalars['Int']['input']>;
|
||||
subscriberTask?: InputMaybe<Scalars['SubscriberTaskType']['input']>;
|
||||
subscriberTaskCron?: InputMaybe<Scalars['SubscriberTaskType']['input']>;
|
||||
systemTaskCron?: InputMaybe<Scalars['SystemTaskType']['input']>;
|
||||
timeoutMs?: InputMaybe<Scalars['Int']['input']>;
|
||||
};
|
||||
|
||||
@ -443,8 +465,9 @@ export type CronOrderInput = {
|
||||
priority?: InputMaybe<OrderByEnum>;
|
||||
status?: InputMaybe<OrderByEnum>;
|
||||
subscriberId?: InputMaybe<OrderByEnum>;
|
||||
subscriberTask?: InputMaybe<OrderByEnum>;
|
||||
subscriberTaskCron?: InputMaybe<OrderByEnum>;
|
||||
subscriptionId?: InputMaybe<OrderByEnum>;
|
||||
systemTaskCron?: InputMaybe<OrderByEnum>;
|
||||
timeoutMs?: InputMaybe<OrderByEnum>;
|
||||
updatedAt?: InputMaybe<OrderByEnum>;
|
||||
};
|
||||
@ -1170,6 +1193,9 @@ export type Mutation = {
|
||||
subscriptionsCreateOne: SubscriptionsBasic;
|
||||
subscriptionsDelete: Scalars['Int']['output'];
|
||||
subscriptionsUpdate: Array<SubscriptionsBasic>;
|
||||
systemTasksCreateOne: SystemTasksBasic;
|
||||
systemTasksDelete: Scalars['Int']['output'];
|
||||
systemTasksRetryOne: SystemTasksBasic;
|
||||
};
|
||||
|
||||
|
||||
@ -1402,6 +1428,21 @@ export type MutationSubscriptionsUpdateArgs = {
|
||||
filter?: InputMaybe<SubscriptionsFilterInput>;
|
||||
};
|
||||
|
||||
|
||||
export type MutationSystemTasksCreateOneArgs = {
|
||||
data: SystemTasksInsertInput;
|
||||
};
|
||||
|
||||
|
||||
export type MutationSystemTasksDeleteArgs = {
|
||||
filter?: InputMaybe<SystemTasksFilterInput>;
|
||||
};
|
||||
|
||||
|
||||
export type MutationSystemTasksRetryOneArgs = {
|
||||
filter?: InputMaybe<SystemTasksFilterInput>;
|
||||
};
|
||||
|
||||
export type OffsetInput = {
|
||||
limit: Scalars['Int']['input'];
|
||||
offset: Scalars['Int']['input'];
|
||||
@ -1455,6 +1496,7 @@ export type Query = {
|
||||
subscriptionBangumi: SubscriptionBangumiConnection;
|
||||
subscriptionEpisode: SubscriptionEpisodeConnection;
|
||||
subscriptions: SubscriptionsConnection;
|
||||
systemTasks: SystemTasksConnection;
|
||||
};
|
||||
|
||||
|
||||
@ -1546,6 +1588,13 @@ export type QuerySubscriptionsArgs = {
|
||||
pagination?: InputMaybe<PaginationInput>;
|
||||
};
|
||||
|
||||
|
||||
export type QuerySystemTasksArgs = {
|
||||
filter?: InputMaybe<SystemTasksFilterInput>;
|
||||
orderBy?: InputMaybe<SystemTasksOrderInput>;
|
||||
pagination?: InputMaybe<PaginationInput>;
|
||||
};
|
||||
|
||||
export type StringFilterInput = {
|
||||
between?: InputMaybe<Array<Scalars['String']['input']>>;
|
||||
contains?: InputMaybe<Scalars['String']['input']>;
|
||||
@ -1590,6 +1639,8 @@ export type SubscriberTaskTypeEnum = typeof SubscriberTaskTypeEnum[keyof typeof
|
||||
export type SubscriberTasks = {
|
||||
__typename?: 'SubscriberTasks';
|
||||
attempts: Scalars['Int']['output'];
|
||||
cron?: Maybe<Cron>;
|
||||
cronId?: Maybe<Scalars['Int']['output']>;
|
||||
doneAt?: Maybe<Scalars['String']['output']>;
|
||||
id: Scalars['String']['output'];
|
||||
job: Scalars['SubscriberTaskType']['output'];
|
||||
@ -1610,6 +1661,7 @@ export type SubscriberTasks = {
|
||||
export type SubscriberTasksBasic = {
|
||||
__typename?: 'SubscriberTasksBasic';
|
||||
attempts: Scalars['Int']['output'];
|
||||
cronId?: Maybe<Scalars['Int']['output']>;
|
||||
doneAt?: Maybe<Scalars['String']['output']>;
|
||||
id: Scalars['String']['output'];
|
||||
job: Scalars['SubscriberTaskType']['output'];
|
||||
@ -1642,6 +1694,7 @@ export type SubscriberTasksEdge = {
|
||||
export type SubscriberTasksFilterInput = {
|
||||
and?: InputMaybe<Array<SubscriberTasksFilterInput>>;
|
||||
attempts?: InputMaybe<IntegerFilterInput>;
|
||||
cronId?: InputMaybe<IntegerFilterInput>;
|
||||
doneAt?: InputMaybe<TextFilterInput>;
|
||||
id?: InputMaybe<StringFilterInput>;
|
||||
job?: InputMaybe<Scalars['JsonbFilterInput']['input']>;
|
||||
@ -1665,6 +1718,7 @@ export type SubscriberTasksInsertInput = {
|
||||
|
||||
export type SubscriberTasksOrderInput = {
|
||||
attempts?: InputMaybe<OrderByEnum>;
|
||||
cronId?: InputMaybe<OrderByEnum>;
|
||||
doneAt?: InputMaybe<OrderByEnum>;
|
||||
id?: InputMaybe<OrderByEnum>;
|
||||
job?: InputMaybe<OrderByEnum>;
|
||||
@ -1693,6 +1747,7 @@ export type Subscribers = {
|
||||
id: Scalars['Int']['output'];
|
||||
subscriberTask: SubscriberTasksConnection;
|
||||
subscription: SubscriptionsConnection;
|
||||
systemTask: SystemTasksConnection;
|
||||
updatedAt: Scalars['String']['output'];
|
||||
};
|
||||
|
||||
@ -1745,6 +1800,13 @@ export type SubscribersSubscriptionArgs = {
|
||||
pagination?: InputMaybe<PaginationInput>;
|
||||
};
|
||||
|
||||
|
||||
export type SubscribersSystemTaskArgs = {
|
||||
filter?: InputMaybe<SystemTasksFilterInput>;
|
||||
orderBy?: InputMaybe<SystemTasksOrderInput>;
|
||||
pagination?: InputMaybe<PaginationInput>;
|
||||
};
|
||||
|
||||
export type SubscribersConnection = {
|
||||
__typename?: 'SubscribersConnection';
|
||||
edges: Array<SubscribersEdge>;
|
||||
@ -2056,6 +2118,114 @@ export type SubscriptionsUpdateInput = {
|
||||
updatedAt?: InputMaybe<Scalars['String']['input']>;
|
||||
};
|
||||
|
||||
export const SystemTaskStatusEnum = {
|
||||
Done: 'Done',
|
||||
Failed: 'Failed',
|
||||
Killed: 'Killed',
|
||||
Pending: 'Pending',
|
||||
Running: 'Running',
|
||||
Scheduled: 'Scheduled'
|
||||
} as const;
|
||||
|
||||
export type SystemTaskStatusEnum = typeof SystemTaskStatusEnum[keyof typeof SystemTaskStatusEnum];
|
||||
export const SystemTaskTypeEnum = {
|
||||
OptimizeImage: 'optimize_image'
|
||||
} as const;
|
||||
|
||||
export type SystemTaskTypeEnum = typeof SystemTaskTypeEnum[keyof typeof SystemTaskTypeEnum];
|
||||
export type SystemTasks = {
|
||||
__typename?: 'SystemTasks';
|
||||
attempts: Scalars['Int']['output'];
|
||||
cron?: Maybe<Cron>;
|
||||
cronId?: Maybe<Scalars['Int']['output']>;
|
||||
doneAt?: Maybe<Scalars['String']['output']>;
|
||||
id: Scalars['String']['output'];
|
||||
job: Scalars['SystemTaskType']['output'];
|
||||
lastError?: Maybe<Scalars['String']['output']>;
|
||||
lockAt?: Maybe<Scalars['String']['output']>;
|
||||
lockBy?: Maybe<Scalars['String']['output']>;
|
||||
maxAttempts: Scalars['Int']['output'];
|
||||
priority: Scalars['Int']['output'];
|
||||
runAt: Scalars['String']['output'];
|
||||
status: SystemTaskStatusEnum;
|
||||
subscriber?: Maybe<Subscribers>;
|
||||
subscriberId?: Maybe<Scalars['Int']['output']>;
|
||||
taskType: SystemTaskTypeEnum;
|
||||
};
|
||||
|
||||
export type SystemTasksBasic = {
|
||||
__typename?: 'SystemTasksBasic';
|
||||
attempts: Scalars['Int']['output'];
|
||||
cronId?: Maybe<Scalars['Int']['output']>;
|
||||
doneAt?: Maybe<Scalars['String']['output']>;
|
||||
id: Scalars['String']['output'];
|
||||
job: Scalars['SystemTaskType']['output'];
|
||||
lastError?: Maybe<Scalars['String']['output']>;
|
||||
lockAt?: Maybe<Scalars['String']['output']>;
|
||||
lockBy?: Maybe<Scalars['String']['output']>;
|
||||
maxAttempts: Scalars['Int']['output'];
|
||||
priority: Scalars['Int']['output'];
|
||||
runAt: Scalars['String']['output'];
|
||||
status: SystemTaskStatusEnum;
|
||||
subscriberId?: Maybe<Scalars['Int']['output']>;
|
||||
taskType: SystemTaskTypeEnum;
|
||||
};
|
||||
|
||||
export type SystemTasksConnection = {
|
||||
__typename?: 'SystemTasksConnection';
|
||||
edges: Array<SystemTasksEdge>;
|
||||
nodes: Array<SystemTasks>;
|
||||
pageInfo: PageInfo;
|
||||
paginationInfo?: Maybe<PaginationInfo>;
|
||||
};
|
||||
|
||||
export type SystemTasksEdge = {
|
||||
__typename?: 'SystemTasksEdge';
|
||||
cursor: Scalars['String']['output'];
|
||||
node: SystemTasks;
|
||||
};
|
||||
|
||||
export type SystemTasksFilterInput = {
|
||||
and?: InputMaybe<Array<SystemTasksFilterInput>>;
|
||||
attempts?: InputMaybe<IntegerFilterInput>;
|
||||
cronId?: InputMaybe<IntegerFilterInput>;
|
||||
doneAt?: InputMaybe<TextFilterInput>;
|
||||
id?: InputMaybe<StringFilterInput>;
|
||||
job?: InputMaybe<Scalars['JsonbFilterInput']['input']>;
|
||||
lastError?: InputMaybe<StringFilterInput>;
|
||||
lockAt?: InputMaybe<TextFilterInput>;
|
||||
lockBy?: InputMaybe<StringFilterInput>;
|
||||
maxAttempts?: InputMaybe<IntegerFilterInput>;
|
||||
or?: InputMaybe<Array<SystemTasksFilterInput>>;
|
||||
priority?: InputMaybe<IntegerFilterInput>;
|
||||
runAt?: InputMaybe<TextFilterInput>;
|
||||
status?: InputMaybe<StringFilterInput>;
|
||||
subscriberId?: InputMaybe<SubscriberIdFilterInput>;
|
||||
taskType?: InputMaybe<StringFilterInput>;
|
||||
};
|
||||
|
||||
export type SystemTasksInsertInput = {
|
||||
job: Scalars['SystemTaskType']['input'];
|
||||
subscriberId?: InputMaybe<Scalars['Int']['input']>;
|
||||
};
|
||||
|
||||
export type SystemTasksOrderInput = {
|
||||
attempts?: InputMaybe<OrderByEnum>;
|
||||
cronId?: InputMaybe<OrderByEnum>;
|
||||
doneAt?: InputMaybe<OrderByEnum>;
|
||||
id?: InputMaybe<OrderByEnum>;
|
||||
job?: InputMaybe<OrderByEnum>;
|
||||
lastError?: InputMaybe<OrderByEnum>;
|
||||
lockAt?: InputMaybe<OrderByEnum>;
|
||||
lockBy?: InputMaybe<OrderByEnum>;
|
||||
maxAttempts?: InputMaybe<OrderByEnum>;
|
||||
priority?: InputMaybe<OrderByEnum>;
|
||||
runAt?: InputMaybe<OrderByEnum>;
|
||||
status?: InputMaybe<OrderByEnum>;
|
||||
subscriberId?: InputMaybe<OrderByEnum>;
|
||||
taskType?: InputMaybe<OrderByEnum>;
|
||||
};
|
||||
|
||||
export type TextFilterInput = {
|
||||
between?: InputMaybe<Array<Scalars['String']['input']>>;
|
||||
eq?: InputMaybe<Scalars['String']['input']>;
|
||||
|
50
pnpm-lock.yaml
generated
50
pnpm-lock.yaml
generated
@ -351,10 +351,10 @@ importers:
|
||||
devDependencies:
|
||||
'@vitejs/plugin-react':
|
||||
specifier: ^4.5.2
|
||||
version: 4.5.2(vite@5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0))
|
||||
version: 4.5.2(vite@5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1))
|
||||
vitest:
|
||||
specifier: ^3.2.3
|
||||
version: 3.2.3(@types/node@24.0.10)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0)
|
||||
version: 3.2.3(@types/node@24.0.10)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1)
|
||||
|
||||
packages:
|
||||
|
||||
@ -6189,11 +6189,6 @@ packages:
|
||||
uglify-js:
|
||||
optional: true
|
||||
|
||||
terser@5.41.0:
|
||||
resolution: {integrity: sha512-H406eLPXpZbAX14+B8psIuvIr8+3c+2hkuYzpMkoE0ij+NdsVATbA78vb8neA/eqrj7rywa2pIkdmWRsXW6wmw==}
|
||||
engines: {node: '>=10'}
|
||||
hasBin: true
|
||||
|
||||
terser@5.43.1:
|
||||
resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==}
|
||||
engines: {node: '>=10'}
|
||||
@ -9841,7 +9836,7 @@ snapshots:
|
||||
dependencies:
|
||||
'@types/node': 24.0.10
|
||||
|
||||
'@vitejs/plugin-react@4.5.2(vite@5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0))':
|
||||
'@vitejs/plugin-react@4.5.2(vite@5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1))':
|
||||
dependencies:
|
||||
'@babel/core': 7.27.4
|
||||
'@babel/plugin-transform-react-jsx-self': 7.27.1(@babel/core@7.27.4)
|
||||
@ -9849,7 +9844,7 @@ snapshots:
|
||||
'@rolldown/pluginutils': 1.0.0-beta.11
|
||||
'@types/babel__core': 7.20.5
|
||||
react-refresh: 0.17.0
|
||||
vite: 5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0)
|
||||
vite: 5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1)
|
||||
transitivePeerDependencies:
|
||||
- supports-color
|
||||
|
||||
@ -9861,13 +9856,13 @@ snapshots:
|
||||
chai: 5.2.0
|
||||
tinyrainbow: 2.0.0
|
||||
|
||||
'@vitest/mocker@3.2.3(vite@5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0))':
|
||||
'@vitest/mocker@3.2.3(vite@5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1))':
|
||||
dependencies:
|
||||
'@vitest/spy': 3.2.3
|
||||
estree-walker: 3.0.3
|
||||
magic-string: 0.30.17
|
||||
optionalDependencies:
|
||||
vite: 5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0)
|
||||
vite: 5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1)
|
||||
|
||||
'@vitest/pretty-format@3.2.3':
|
||||
dependencies:
|
||||
@ -13182,14 +13177,6 @@ snapshots:
|
||||
webpack: 5.97.1
|
||||
optional: true
|
||||
|
||||
terser@5.41.0:
|
||||
dependencies:
|
||||
'@jridgewell/source-map': 0.3.10
|
||||
acorn: 8.15.0
|
||||
commander: 2.20.3
|
||||
source-map-support: 0.5.21
|
||||
optional: true
|
||||
|
||||
terser@5.43.1:
|
||||
dependencies:
|
||||
'@jridgewell/source-map': 0.3.10
|
||||
@ -13466,13 +13453,13 @@ snapshots:
|
||||
d3-time: 3.1.0
|
||||
d3-timer: 3.0.1
|
||||
|
||||
vite-node@3.2.3(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0):
|
||||
vite-node@3.2.3(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1):
|
||||
dependencies:
|
||||
cac: 6.7.14
|
||||
debug: 4.4.1
|
||||
es-module-lexer: 1.7.0
|
||||
pathe: 2.0.3
|
||||
vite: 5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0)
|
||||
vite: 5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1)
|
||||
transitivePeerDependencies:
|
||||
- '@types/node'
|
||||
- less
|
||||
@ -13484,18 +13471,6 @@ snapshots:
|
||||
- supports-color
|
||||
- terser
|
||||
|
||||
vite@5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0):
|
||||
dependencies:
|
||||
esbuild: 0.21.5
|
||||
postcss: 8.5.5
|
||||
rollup: 4.29.1
|
||||
optionalDependencies:
|
||||
'@types/node': 24.0.10
|
||||
fsevents: 2.3.3
|
||||
lightningcss: 1.30.1
|
||||
sass: 1.77.4
|
||||
terser: 5.41.0
|
||||
|
||||
vite@5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1):
|
||||
dependencies:
|
||||
esbuild: 0.21.5
|
||||
@ -13507,13 +13482,12 @@ snapshots:
|
||||
lightningcss: 1.30.1
|
||||
sass: 1.77.4
|
||||
terser: 5.43.1
|
||||
optional: true
|
||||
|
||||
vitest@3.2.3(@types/node@24.0.10)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0):
|
||||
vitest@3.2.3(@types/node@24.0.10)(jsdom@25.0.1(bufferutil@4.0.9)(utf-8-validate@6.0.5))(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1):
|
||||
dependencies:
|
||||
'@types/chai': 5.2.2
|
||||
'@vitest/expect': 3.2.3
|
||||
'@vitest/mocker': 3.2.3(vite@5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0))
|
||||
'@vitest/mocker': 3.2.3(vite@5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1))
|
||||
'@vitest/pretty-format': 3.2.3
|
||||
'@vitest/runner': 3.2.3
|
||||
'@vitest/snapshot': 3.2.3
|
||||
@ -13531,8 +13505,8 @@ snapshots:
|
||||
tinyglobby: 0.2.14
|
||||
tinypool: 1.1.0
|
||||
tinyrainbow: 2.0.0
|
||||
vite: 5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0)
|
||||
vite-node: 3.2.3(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.41.0)
|
||||
vite: 5.4.11(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1)
|
||||
vite-node: 3.2.3(@types/node@24.0.10)(lightningcss@1.30.1)(sass@1.77.4)(terser@5.43.1)
|
||||
why-is-node-running: 2.3.0
|
||||
optionalDependencies:
|
||||
'@types/node': 24.0.10
|
||||
|
Loading…
Reference in New Issue
Block a user