all repos — stealth-developers @ 5b4e11e209be50e047f45841492df7729088bfa6

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;