Add task related tables.
Pivoting from "records" to a combination of "tasks", "micro-tasks", "assets", and a few others.
This commit is contained in:
parent
009b1925e6
commit
60f87472a1
@ -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 } });
|
||||||
|
|||||||
71
src/lib/server/db/schema/tasks.ts
Normal file
71
src/lib/server/db/schema/tasks.ts
Normal 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],
|
||||||
|
}),
|
||||||
|
}));
|
||||||
Loading…
Reference in New Issue
Block a user