diff --git a/web/src/app/(app)/workflows/[workflow_id]/@workflow/page.tsx b/web/src/app/(app)/workflows/[workflow_id]/@workflow/page.tsx index 5ed3b8b..c47329b 100644 --- a/web/src/app/(app)/workflows/[workflow_id]/@workflow/page.tsx +++ b/web/src/app/(app)/workflows/[workflow_id]/@workflow/page.tsx @@ -18,6 +18,7 @@ import { import { getRelativeTime } from "@/lib/getRelativeTime"; import { getMachines } from "@/server/curdMachine"; import { findFirstTableWithVersion } from "@/server/findFirstTableWithVersion"; +import { redirect } from "next/navigation"; export default async function Page({ params, diff --git a/web/src/app/(app)/workflows/[workflow_id]/layout.tsx b/web/src/app/(app)/workflows/[workflow_id]/layout.tsx index 7a2f06d..bf73308 100644 --- a/web/src/app/(app)/workflows/[workflow_id]/layout.tsx +++ b/web/src/app/(app)/workflows/[workflow_id]/layout.tsx @@ -15,8 +15,8 @@ export default async function Layout({ {workflow} {deployment} - {runs} + {children} ); } diff --git a/web/src/app/(app)/workflows/[workflow_id]/page.tsx b/web/src/app/(app)/workflows/[workflow_id]/page.tsx new file mode 100644 index 0000000..60daeb6 --- /dev/null +++ b/web/src/app/(app)/workflows/[workflow_id]/page.tsx @@ -0,0 +1,13 @@ +import { findWorkflowById } from "@/server/findFirstTableWithVersion"; +import { redirect } from "next/navigation"; + +export default async function Page({ + params, +}: { + params: { workflow_id: string }; +}) { + const workflow = await findWorkflowById(params.workflow_id); + if (!workflow) redirect("/workflows"); + + return <>; +} diff --git a/web/src/server/findFirstTableWithVersion.tsx b/web/src/server/findFirstTableWithVersion.tsx index a2e2d45..f38635c 100644 --- a/web/src/server/findFirstTableWithVersion.tsx +++ b/web/src/server/findFirstTableWithVersion.tsx @@ -1,10 +1,35 @@ import { db } from "@/db/db"; import { workflowTable, workflowVersionTable } from "@/db/schema"; -import { desc, eq } from "drizzle-orm"; +import { auth } from "@clerk/nextjs"; +import { and, desc, eq, isNull } from "drizzle-orm"; export async function findFirstTableWithVersion(workflow_id: string) { + const { userId, orgId } = auth(); + if (!userId) throw new Error("No auth"); return await db.query.workflowTable.findFirst({ with: { versions: { orderBy: desc(workflowVersionTable.version) } }, - where: eq(workflowTable.id, workflow_id), + where: and( + eq(workflowTable.id, workflow_id), + orgId + ? eq(workflowTable.org_id, orgId) + : and(eq(workflowTable.user_id, userId), isNull(workflowTable.org_id)) + ), + }); +} + +export function findWorkflowById(workflow_id: string) { + const { userId, orgId } = auth(); + if (!userId) throw new Error("No auth"); + + return db.query.workflowTable.findFirst({ + columns: { + id: true, + }, + where: and( + eq(workflowTable.id, workflow_id), + orgId + ? eq(workflowTable.org_id, orgId) + : and(eq(workflowTable.user_id, userId), isNull(workflowTable.org_id)) + ), }); }