From b631fbaada620ff6c7151455d15106b29d9be80f Mon Sep 17 00:00:00 2001 From: Oliver Bryan <04oliverbryan@gmail.com> Date: Mon, 8 Dec 2025 00:59:52 +0000 Subject: [PATCH] better route project structure --- src/db/queries/issues.ts | 9 +++++++++ src/index.ts | 2 +- src/routes/index.ts | 10 +++++----- src/routes/{issueCreate.ts => issue/create.ts} | 3 +-- src/routes/{issueDelete.ts => issue/delete.ts} | 2 +- src/routes/{issueUpdate.ts => issue/update.ts} | 2 +- src/routes/issues.ts | 14 -------------- src/routes/issues/[projectBlob].ts | 14 ++++++++++++++ 8 files changed, 32 insertions(+), 24 deletions(-) rename src/routes/{issueCreate.ts => issue/create.ts} (98%) rename src/routes/{issueDelete.ts => issue/delete.ts} (91%) rename src/routes/{issueUpdate.ts => issue/update.ts} (93%) delete mode 100644 src/routes/issues.ts create mode 100644 src/routes/issues/[projectBlob].ts diff --git a/src/db/queries/issues.ts b/src/db/queries/issues.ts index adc7c20..c165009 100644 --- a/src/db/queries/issues.ts +++ b/src/db/queries/issues.ts @@ -37,10 +37,19 @@ export async function updateIssue(id: number, updates: { title?: string; descrip return await db.update(Issue).set(updates).where(eq(Issue.id, id)).returning(); } +export async function getIssues() { + return await db.select().from(Issue); +} + export async function getIssuesByProject(projectId: number) { return await db.select().from(Issue).where(eq(Issue.projectId, projectId)); } +export async function getIssueByID(id: number) { + const [issue] = await db.select().from(Issue).where(eq(Issue.id, id)); + return issue; +} + export async function getIssueByNumber(projectId: number, number: number) { const [issue] = await db .select() diff --git a/src/index.ts b/src/index.ts index c3e1b94..963b329 100644 --- a/src/index.ts +++ b/src/index.ts @@ -14,7 +14,7 @@ const main = async () => { "/issue/create": routes.issueCreate, "/issue/update": routes.issueUpdate, "/issue/delete": routes.issueDelete, - "/issues/:projectId": routes.issues, + "/issues/:projectBlob": routes.issuesInProject, }, }); diff --git a/src/routes/index.ts b/src/routes/index.ts index 8513cde..6f6c455 100644 --- a/src/routes/index.ts +++ b/src/routes/index.ts @@ -1,11 +1,11 @@ -import issueCreate from "./issueCreate"; -import issueDelete from "./issueDelete"; -import issues from "./issues"; -import issueUpdate from "./issueUpdate"; +import issueCreate from "./issue/create"; +import issueDelete from "./issue/delete"; +import issueUpdate from "./issue/update"; +import issuesInProject from "./issues/[projectBlob]"; export const routes = { issueCreate, issueDelete, - issues, issueUpdate, + issuesInProject, }; diff --git a/src/routes/issueCreate.ts b/src/routes/issue/create.ts similarity index 98% rename from src/routes/issueCreate.ts rename to src/routes/issue/create.ts index 260cbb7..91cf0bd 100644 --- a/src/routes/issueCreate.ts +++ b/src/routes/issue/create.ts @@ -1,5 +1,5 @@ import type { BunRequest } from "bun"; -import { createIssue, getProjectByID, getProjectByBlob } from "../db/queries"; +import { createIssue, getProjectByID, getProjectByBlob } from "../../db/queries"; // /issue/create?projectId=1&title=Testing&description=Description // OR @@ -28,4 +28,3 @@ export default async function issueCreate(req: BunRequest) { return Response.json(issue); } - \ No newline at end of file diff --git a/src/routes/issueDelete.ts b/src/routes/issue/delete.ts similarity index 91% rename from src/routes/issueDelete.ts rename to src/routes/issue/delete.ts index 14ab0a5..68c2625 100644 --- a/src/routes/issueDelete.ts +++ b/src/routes/issue/delete.ts @@ -1,5 +1,5 @@ import type { BunRequest } from "bun"; -import { deleteIssue } from "../db/queries"; +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/issue/update.ts similarity index 93% rename from src/routes/issueUpdate.ts rename to src/routes/issue/update.ts index a428a22..6893585 100644 --- a/src/routes/issueUpdate.ts +++ b/src/routes/issue/update.ts @@ -1,5 +1,5 @@ import type { BunRequest } from "bun"; -import { updateIssue } from "../db/queries"; +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 deleted file mode 100644 index c70cdf9..0000000 --- a/src/routes/issues.ts +++ /dev/null @@ -1,14 +0,0 @@ -import type { BunRequest } from "bun"; -import { getIssuesByProject, getProjectByBlob } from "../db/queries"; - -export default async function issues(req: BunRequest<"/issues/:projectId">) { - const { projectId } = req.params; - - const project = await getProjectByBlob(projectId); - if (!project) { - return new Response("project not found", { status: 404 }); - } - const issues = await getIssuesByProject(project.id); - - return Response.json(issues); -} diff --git a/src/routes/issues/[projectBlob].ts b/src/routes/issues/[projectBlob].ts new file mode 100644 index 0000000..7dda5e1 --- /dev/null +++ b/src/routes/issues/[projectBlob].ts @@ -0,0 +1,14 @@ +import type { BunRequest } from "bun"; +import { getIssuesByProject, getProjectByBlob } from "../../db/queries"; + +export default async function issuesInProject(req: BunRequest<"/issues/:projectBlob">) { + const { projectBlob } = req.params; + + const project = await getProjectByBlob(projectBlob); + if (!project) { + return new Response(`project not found: provided ${projectBlob}`, { status: 404 }); + } + const issues = await getIssuesByProject(project.id); + + return Response.json(issues); +}