feat: migrate task jobs to workflow notifications + timeline
This commit is contained in:
@@ -288,6 +288,11 @@ export const taskRun = sqliteTable('task_run', {
|
||||
user_id: text('user_id').notNull().references(() => user.id, { onDelete: 'cascade' }),
|
||||
task_type: text('task_type').$type<'sync_filings' | 'refresh_prices' | 'analyze_filing' | 'portfolio_insights'>().notNull(),
|
||||
status: text('status').$type<'queued' | 'running' | 'completed' | 'failed'>().notNull(),
|
||||
stage: text('stage').notNull(),
|
||||
stage_detail: text('stage_detail'),
|
||||
resource_key: text('resource_key'),
|
||||
notification_read_at: text('notification_read_at'),
|
||||
notification_silenced_at: text('notification_silenced_at'),
|
||||
priority: integer('priority').notNull(),
|
||||
payload: text('payload', { mode: 'json' }).$type<Record<string, unknown>>().notNull(),
|
||||
result: text('result', { mode: 'json' }).$type<Record<string, unknown> | null>(),
|
||||
@@ -301,9 +306,29 @@ export const taskRun = sqliteTable('task_run', {
|
||||
}, (table) => ({
|
||||
taskUserCreatedIndex: index('task_user_created_idx').on(table.user_id, table.created_at),
|
||||
taskStatusIndex: index('task_status_idx').on(table.status),
|
||||
taskUserResourceStatusIndex: index('task_user_resource_status_idx').on(
|
||||
table.user_id,
|
||||
table.task_type,
|
||||
table.resource_key,
|
||||
table.status,
|
||||
table.created_at
|
||||
),
|
||||
taskWorkflowRunUnique: uniqueIndex('task_workflow_run_uidx').on(table.workflow_run_id)
|
||||
}));
|
||||
|
||||
export const taskStageEvent = sqliteTable('task_stage_event', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
task_id: text('task_id').notNull().references(() => taskRun.id, { onDelete: 'cascade' }),
|
||||
user_id: text('user_id').notNull().references(() => user.id, { onDelete: 'cascade' }),
|
||||
stage: text('stage').notNull(),
|
||||
stage_detail: text('stage_detail'),
|
||||
status: text('status').$type<'queued' | 'running' | 'completed' | 'failed'>().notNull(),
|
||||
created_at: text('created_at').notNull()
|
||||
}, (table) => ({
|
||||
taskStageEventTaskCreatedIndex: index('task_stage_event_task_created_idx').on(table.task_id, table.created_at),
|
||||
taskStageEventUserCreatedIndex: index('task_stage_event_user_created_idx').on(table.user_id, table.created_at)
|
||||
}));
|
||||
|
||||
export const portfolioInsight = sqliteTable('portfolio_insight', {
|
||||
id: integer('id').primaryKey({ autoIncrement: true }),
|
||||
user_id: text('user_id').notNull().references(() => user.id, { onDelete: 'cascade' }),
|
||||
@@ -332,6 +357,7 @@ export const appSchema = {
|
||||
filingStatementSnapshot,
|
||||
filingLink,
|
||||
taskRun,
|
||||
taskStageEvent,
|
||||
portfolioInsight
|
||||
};
|
||||
|
||||
|
||||
Reference in New Issue
Block a user