Add task related tables.

Pivoting from "records" to a combination of "tasks", "micro-tasks",
"assets", and a few others.
This commit is contained in:
themodrnhakr 2025-09-26 14:25:25 -05:00
parent 009b1925e6
commit 60f87472a1
2 changed files with 73 additions and 1 deletions

View File

@ -1,7 +1,8 @@
import * as schema2 from "$lib/server/db/schema/records"; import * as schema2 from "$lib/server/db/schema/records";
import * as schema1 from "$lib/server/db/schema/recordTypes"; import * as schema1 from "$lib/server/db/schema/recordTypes";
import * as schema3 from "$lib/server/db/schema/tasks";
import { Database } from "bun:sqlite"; import { Database } from "bun:sqlite";
import { drizzle } from "drizzle-orm/bun-sqlite"; import { drizzle } from "drizzle-orm/bun-sqlite";
const sqlite = new Database("sqlite.db"); const sqlite = new Database("sqlite.db");
export const db = drizzle({ client: sqlite, schema: { ...schema1, ...schema2 } }); export const db = drizzle({ client: sqlite, schema: { ...schema1, ...schema2, ...schema3 } });

View File

@ -0,0 +1,71 @@
import { relations, sql } from "drizzle-orm";
import { type AnySQLiteColumn, check, int, sqliteTable, text } from "drizzle-orm/sqlite-core";
export type TaskIntegrationConfigs = {
source_control: Array<{
repo_id: string;
commits: Array<{
hash: string;
message: string;
description: string;
}>;
}>;
};
export const taskTypes = sqliteTable("task_types", {
id: int("id").primaryKey({ autoIncrement: true }),
name: text("name").unique(),
prefix: text("prefix").unique(),
}, (table) => [
check("prefix_limit", sql`LENGTH(${table.prefix}) <=2`),
]);
export const taskTypesRelations = relations(taskTypes, ({ many }) => ({
tasks: many(tasks),
}));
export const tasks = sqliteTable("tasks", {
id: int("id").primaryKey({ autoIncrement: true }),
taskId: text("task_id").unique(),
description: text("description"),
type: int("type").references(() => taskTypes.id),
subtype: text("subtype"),
openDate: text("open_date").$type<Date["toISOString"]>(),
closeDate: text("close_date").$type<Date["toISOString"]>(),
status: text("status"),
priority: text("priority"),
parent: int("parent").references((): AnySQLiteColumn => tasks.id),
body: text("body"),
bodyHistory: text("body_history"),
checklist: text("checklist", { mode: "json" }).$type<
{
enabled: boolean;
entries: Array<{
group: string;
sort_order: number;
checked: boolean;
text: string;
}>;
}
>(),
updateChain: text("udpate_chain", { mode: "json" }).$type<
{
enabled: boolean;
entries: Array<{
updated_on: Date["toISOString"];
updated_by: string;
body: string;
}>;
}
>(),
integrations: text("integrations", { mode: "json" }).$type<
{ type: keyof TaskIntegrationConfigs; config: TaskIntegrationConfigs["source_control"] }
>(),
});
export const tasksRelations = relations(tasks, ({ one }) => ({
type: one(taskTypes, {
fields: [tasks.type],
references: [taskTypes.id],
}),
}));