From 4314797bdf147186b9a495719d64f40af501c533 Mon Sep 17 00:00:00 2001 From: Oliver Bryan <04oliverbryan@gmail.com> Date: Sun, 14 Dec 2025 22:08:16 +0000 Subject: [PATCH] assignee implementation --- packages/backend/src/db/queries/issues.ts | 20 ++++++++++++++++--- .../src/routes/issues/[projectBlob].ts | 4 ++-- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/packages/backend/src/db/queries/issues.ts b/packages/backend/src/db/queries/issues.ts index 57bc0c2..be7a915 100644 --- a/packages/backend/src/db/queries/issues.ts +++ b/packages/backend/src/db/queries/issues.ts @@ -1,8 +1,13 @@ -import { eq, sql, and } from "drizzle-orm"; +import { Issue, User } from "@issue/shared"; +import { and, eq, sql } from "drizzle-orm"; import { db } from "../client"; -import { Issue } from "@issue/shared"; -export async function createIssue(projectId: number, title: string, description: string) { +export async function createIssue( + projectId: number, + title: string, + description: string, + assigneeId?: number, +) { // prevents two issues with the same unique number return await db.transaction(async (tx) => { // raw sql for speed @@ -22,6 +27,7 @@ export async function createIssue(projectId: number, title: string, description: title, description, number: nextNumber, + assigneeId, }) .returning(); @@ -57,3 +63,11 @@ export async function getIssueByNumber(projectId: number, number: number) { .where(and(eq(Issue.projectId, projectId), eq(Issue.number, number))); return issue; } + +export async function getIssuesWithAssigneeByProject(projectId: number) { + return await db + .select() + .from(Issue) + .where(eq(Issue.projectId, projectId)) + .leftJoin(User, eq(Issue.assigneeId, User.id)); +} diff --git a/packages/backend/src/routes/issues/[projectBlob].ts b/packages/backend/src/routes/issues/[projectBlob].ts index 7dda5e1..b5ff3cb 100644 --- a/packages/backend/src/routes/issues/[projectBlob].ts +++ b/packages/backend/src/routes/issues/[projectBlob].ts @@ -1,5 +1,5 @@ import type { BunRequest } from "bun"; -import { getIssuesByProject, getProjectByBlob } from "../../db/queries"; +import { getIssuesWithAssigneeByProject, getProjectByBlob } from "../../db/queries"; export default async function issuesInProject(req: BunRequest<"/issues/:projectBlob">) { const { projectBlob } = req.params; @@ -8,7 +8,7 @@ export default async function issuesInProject(req: BunRequest<"/issues/:projectB if (!project) { return new Response(`project not found: provided ${projectBlob}`, { status: 404 }); } - const issues = await getIssuesByProject(project.id); + const issues = await getIssuesWithAssigneeByProject(project.id); return Response.json(issues); }