diff options
| author | MohamedBassem <me@mbassem.com> | 2024-07-14 20:42:06 +0000 |
|---|---|---|
| committer | MohamedBassem <me@mbassem.com> | 2024-07-14 22:25:23 +0000 |
| commit | f77a41a75237b8c816e0c9ca7217dfacc32cc7d0 (patch) | |
| tree | 69557b2001183cd915a81e0ea9d276e10d262147 /packages/queue/schema.ts | |
| parent | aa3dce09ff68c212ac1fad33adfbfaba96290a59 (diff) | |
| download | karakeep-f77a41a75237b8c816e0c9ca7217dfacc32cc7d0.tar.zst | |
chore: Add a new sqlite based queue package
Diffstat (limited to 'packages/queue/schema.ts')
| -rw-r--r-- | packages/queue/schema.ts | 36 |
1 files changed, 36 insertions, 0 deletions
diff --git a/packages/queue/schema.ts b/packages/queue/schema.ts new file mode 100644 index 00000000..377c6b1c --- /dev/null +++ b/packages/queue/schema.ts @@ -0,0 +1,36 @@ +import { index, integer, sqliteTable, text } from "drizzle-orm/sqlite-core"; + +function createdAtField() { + return integer("createdAt", { mode: "timestamp" }) + .notNull() + .$defaultFn(() => new Date()); +} + +export const tasksTable = sqliteTable( + "tasks", + { + id: integer("id").notNull().primaryKey({ autoIncrement: true }), + queue: text("queue").notNull(), + payload: text("payload").notNull(), + createdAt: createdAtField(), + status: text("status", { + enum: ["pending", "running", "pending_retry", "failed"], + }) + .notNull() + .default("pending"), + expireAt: integer("expireAt", { mode: "timestamp" }), + allocationId: text("allocationId").notNull(), + numRunsLeft: integer("numRunsLeft").notNull(), + maxNumRuns: integer("maxNumRuns").notNull(), + }, + (tasks) => ({ + queueIdx: index("tasks_queue_idx").on(tasks.queue), + statusIdx: index("tasks_status_idx").on(tasks.status), + expireAtIdx: index("tasks_expire_at_idx").on(tasks.expireAt), + numRunsLeftIdx: index("tasks_num_runs_left_idx").on(tasks.numRunsLeft), + maxNumRunsIdx: index("tasks_max_num_runs_idx").on(tasks.maxNumRuns), + allocationIdIdx: index("tasks_allocation_id_idx").on(tasks.allocationId), + }), +); + +export type Job = typeof tasksTable.$inferSelect; |
