From f77a41a75237b8c816e0c9ca7217dfacc32cc7d0 Mon Sep 17 00:00:00 2001 From: MohamedBassem Date: Sun, 14 Jul 2024 20:42:06 +0000 Subject: chore: Add a new sqlite based queue package --- packages/queue/schema.ts | 36 ++++++++++++++++++++++++++++++++++++ 1 file changed, 36 insertions(+) create mode 100644 packages/queue/schema.ts (limited to 'packages/queue/schema.ts') 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; -- cgit v1.2.3-70-g09d2