pkgs/db/src/schemas/bugs.ts (view raw)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
import { sql } from "drizzle-orm";
import * as s from "drizzle-orm/sqlite-core";
import { actors } from "./actors";
import { guilds } from "./guilds";
export const bugs = s.sqliteTable("bugs", {
id: s.integer("id").primaryKey({ autoIncrement: true }),
guildId: s
.integer("guild_id")
.notNull()
.references(() => guilds.id, { onDelete: "cascade" }),
actorId: s
.integer("actor_id")
.notNull()
.references(() => actors.id, { onDelete: "cascade" }),
bugNumber: s.integer("bug_number").notNull(),
status: s.text("status", { enum: ["open", "closed", "resolved"] }),
title: s.text("title").notNull(),
description: s.text("description").notNull(),
affectedProjects: s
.text("affected_projects", { mode: "json" })
.$type<string[]>()
.default([])
.notNull(),
sent: s.integer("sent", { mode: "boolean" }).default(false).notNull(),
messageId: s.text("message_id"),
threadId: s.text("thread_id"),
createdAt: s
.integer("created_at", { mode: "timestamp" })
.default(sql`(unixepoch())`)
.notNull(),
updatedAt: s
.integer("updated_at", { mode: "timestamp" })
.default(sql`(unixepoch())`)
.notNull(),
closedAt: s.integer("closed_at", { mode: "timestamp" }),
});
export type Bug = typeof bugs.$inferSelect;
export type NewBug = typeof bugs.$inferInsert;
|