import { pgTable, uuid, text, integer, timestamp, check } from "drizzle-orm/pg-core"; import { sql } from "drizzle-orm"; import { TASK_STATUSES, PRIORITIES } from "./enums"; import { projects } from "./projects"; const taskStatusValues = TASK_STATUSES.map((s) => `'${s}'`).join(", "); const priorityValues = PRIORITIES.map((p) => `'${p}'`).join(", "); export const tasks = pgTable( "tasks", { id: uuid("id").primaryKey().defaultRandom(), projectId: uuid("project_id") .notNull() .references(() => projects.id, { onDelete: "cascade" }), title: text("title").notNull(), description: text("description"), status: text("status").notNull().default("todo"), priority: text("priority").notNull().default("medium"), sortOrder: integer("sort_order").notNull().default(0), dueDate: timestamp("due_date", { mode: "string" }), createdAt: timestamp("created_at", { mode: "string" }).notNull().defaultNow(), updatedAt: timestamp("updated_at", { mode: "string" }).notNull().defaultNow(), }, (table) => [ check("task_status_check", sql`${table.status} IN (${sql.raw(taskStatusValues)})`), check("task_priority_check", sql`${table.priority} IN (${sql.raw(priorityValues)})`), ], );