From 01e32a8177b8499d23aa2c1a8ae95c358991b626 Mon Sep 17 00:00:00 2001 From: Oliver Bryan <04oliverbryan@gmail.com> Date: Mon, 8 Dec 2025 00:52:08 +0000 Subject: [PATCH] new queries project structure --- src/db/queries/index.ts | 3 ++ src/db/{queries.ts => queries/issues.ts} | 43 ++---------------------- src/db/queries/projects.ts | 28 +++++++++++++++ src/db/queries/users.ts | 13 +++++++ src/routes/issueCreate.ts | 2 +- src/routes/issueDelete.ts | 2 +- src/routes/issueUpdate.ts | 2 +- src/routes/issues.ts | 2 +- 8 files changed, 50 insertions(+), 45 deletions(-) create mode 100644 src/db/queries/index.ts rename src/db/{queries.ts => queries/issues.ts} (55%) create mode 100644 src/db/queries/projects.ts create mode 100644 src/db/queries/users.ts diff --git a/src/db/queries/index.ts b/src/db/queries/index.ts new file mode 100644 index 0000000..4fc4e73 --- /dev/null +++ b/src/db/queries/index.ts @@ -0,0 +1,3 @@ +export * from "./users"; +export * from "./projects"; +export * from "./issues"; diff --git a/src/db/queries.ts b/src/db/queries/issues.ts similarity index 55% rename from src/db/queries.ts rename to src/db/queries/issues.ts index 8535542..adc7c20 100644 --- a/src/db/queries.ts +++ b/src/db/queries/issues.ts @@ -1,46 +1,7 @@ import { eq, sql, and } from "drizzle-orm"; -import { db } from "./client"; -import { Issue, Project, User } from "./schema"; +import { db } from "../client"; +import { Issue } from "../schema"; -// user related -export async function createUser(name: string, username: string) { - const [user] = await db.insert(User).values({ name, username }).returning(); - return user; -} - -export async function getUserByUsername(username: string) { - const [user] = await db.select().from(User).where(eq(User.username, username)); - return user; -} - -// project related - -export async function createProject(blob: string, name: string, owner: typeof User.$inferSelect) { - const [project] = await db - .insert(Project) - .values({ - blob, - name, - ownerId: owner.id, - }) - .returning(); - if (!project) { - throw new Error(`failed to create project ${name} with blob ${blob} for owner ${owner.username}`); - } - return project; -} - -export async function getProjectByID(projectId: number) { - const [project] = await db.select().from(Project).where(eq(Project.id, projectId)); - return project; -} - -export async function getProjectByBlob(projectBlob: string) { - const [project] = await db.select().from(Project).where(eq(Project.blob, projectBlob)); - return project; -} - -// issue related export async function createIssue(projectId: number, title: string, description: string) { // prevents two issues with the same unique number return await db.transaction(async (tx) => { diff --git a/src/db/queries/projects.ts b/src/db/queries/projects.ts new file mode 100644 index 0000000..b81e2de --- /dev/null +++ b/src/db/queries/projects.ts @@ -0,0 +1,28 @@ +import { eq } from "drizzle-orm"; +import { db } from "../client"; +import { Project, User } from "../schema"; + +export async function createProject(blob: string, name: string, owner: typeof User.$inferSelect) { + const [project] = await db + .insert(Project) + .values({ + blob, + name, + ownerId: owner.id, + }) + .returning(); + if (!project) { + throw new Error(`failed to create project ${name} with blob ${blob} for owner ${owner.username}`); + } + return project; +} + +export async function getProjectByID(projectId: number) { + const [project] = await db.select().from(Project).where(eq(Project.id, projectId)); + return project; +} + +export async function getProjectByBlob(projectBlob: string) { + const [project] = await db.select().from(Project).where(eq(Project.blob, projectBlob)); + return project; +} diff --git a/src/db/queries/users.ts b/src/db/queries/users.ts new file mode 100644 index 0000000..5372ff8 --- /dev/null +++ b/src/db/queries/users.ts @@ -0,0 +1,13 @@ +import { eq } from "drizzle-orm"; +import { db } from "../client"; +import { User } from "../schema"; + +export async function createUser(name: string, username: string) { + const [user] = await db.insert(User).values({ name, username }).returning(); + return user; +} + +export async function getUserByUsername(username: string) { + const [user] = await db.select().from(User).where(eq(User.username, username)); + return user; +} diff --git a/src/routes/issueCreate.ts b/src/routes/issueCreate.ts index 9596b73..260cbb7 100644 --- a/src/routes/issueCreate.ts +++ b/src/routes/issueCreate.ts @@ -1,5 +1,5 @@ import type { BunRequest } from "bun"; -import { createIssue, getProjectByID, getProjectByBlob } from "../db/queries.js"; +import { createIssue, getProjectByID, getProjectByBlob } from "../db/queries"; // /issue/create?projectId=1&title=Testing&description=Description // OR diff --git a/src/routes/issueDelete.ts b/src/routes/issueDelete.ts index e1cc6bc..14ab0a5 100644 --- a/src/routes/issueDelete.ts +++ b/src/routes/issueDelete.ts @@ -1,5 +1,5 @@ import type { BunRequest } from "bun"; -import { deleteIssue } from "../db/queries.js"; +import { deleteIssue } from "../db/queries"; // /issue/delete?id=1 export default async function issueDelete(req: BunRequest) { diff --git a/src/routes/issueUpdate.ts b/src/routes/issueUpdate.ts index 34cccca..a428a22 100644 --- a/src/routes/issueUpdate.ts +++ b/src/routes/issueUpdate.ts @@ -1,5 +1,5 @@ import type { BunRequest } from "bun"; -import { updateIssue } from "../db/queries.js"; +import { updateIssue } from "../db/queries"; // /issue/update?id=1&title=Testing&description=Description export default async function issueUpdate(req: BunRequest) { diff --git a/src/routes/issues.ts b/src/routes/issues.ts index 52b247a..c70cdf9 100644 --- a/src/routes/issues.ts +++ b/src/routes/issues.ts @@ -1,5 +1,5 @@ import type { BunRequest } from "bun"; -import { getIssuesByProject, getProjectByBlob } from "../db/queries.js"; +import { getIssuesByProject, getProjectByBlob } from "../db/queries"; export default async function issues(req: BunRequest<"/issues/:projectId">) { const { projectId } = req.params;