From 6125b2f0b5deb8b778e57ae47dbde9097a7005ef Mon Sep 17 00:00:00 2001 From: Emir Karabeg Date: Fri, 28 Feb 2025 17:26:30 -0800 Subject: [PATCH] improvement(sync): added backwards sync from db --- app/api/db/fetch/route.ts | 28 ++++++ app/api/db/sync/route.ts | 23 +++++ app/w/components/control-bar/control-bar.tsx | 4 +- app/w/components/sidebar/sidebar.tsx | 2 +- stores/sync-manager.ts | 99 +++++++++++++++++++- stores/workflow/registry/store.ts | 4 + 6 files changed, 156 insertions(+), 4 deletions(-) create mode 100644 app/api/db/fetch/route.ts diff --git a/app/api/db/fetch/route.ts b/app/api/db/fetch/route.ts new file mode 100644 index 0000000000..1c44adf33b --- /dev/null +++ b/app/api/db/fetch/route.ts @@ -0,0 +1,28 @@ +import { NextResponse } from 'next/server' +import { eq } from 'drizzle-orm' +import { getSession } from '@/lib/auth' +import { db } from '@/db' +import { workflow } from '@/db/schema' + +export async function GET(request: Request) { + try { + const session = await getSession() + if (!session?.user?.id) { + return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) + } + + // Fetch all workflows for the current user + const userWorkflows = await db + .select() + .from(workflow) + .where(eq(workflow.userId, session.user.id)) + + return NextResponse.json({ + success: true, + workflows: userWorkflows, + }) + } catch (error) { + console.error('Fetch workflows error:', error) + return NextResponse.json({ error: 'Failed to fetch workflows' }, { status: 500 }) + } +} diff --git a/app/api/db/sync/route.ts b/app/api/db/sync/route.ts index be09b36a87..86cfc279bd 100644 --- a/app/api/db/sync/route.ts +++ b/app/api/db/sync/route.ts @@ -81,3 +81,26 @@ export async function POST(request: Request) { return NextResponse.json({ error: 'Batch sync failed' }, { status: 500 }) } } + +export async function GET(request: Request) { + try { + const session = await getSession() + if (!session?.user?.id) { + return NextResponse.json({ error: 'Unauthorized' }, { status: 401 }) + } + + // Fetch all workflows for the current user + const userWorkflows = await db + .select() + .from(workflow) + .where(eq(workflow.userId, session.user.id)) + + return NextResponse.json({ + success: true, + workflows: userWorkflows, + }) + } catch (error) { + console.error('Fetch workflows error:', error) + return NextResponse.json({ error: 'Failed to fetch workflows' }, { status: 500 }) + } +} diff --git a/app/w/components/control-bar/control-bar.tsx b/app/w/components/control-bar/control-bar.tsx index 21a1090d9d..40890429db 100644 --- a/app/w/components/control-bar/control-bar.tsx +++ b/app/w/components/control-bar/control-bar.tsx @@ -190,7 +190,9 @@ export function ControlBar() { className="font-semibold text-sm hover:text-muted-foreground w-fit" onClick={handleNameClick} > - {activeWorkflowId ? workflows[activeWorkflowId].name : 'Workflow'} + {activeWorkflowId && workflows[activeWorkflowId] + ? workflows[activeWorkflowId].name + : 'Workflow'} )} {mounted && ( diff --git a/app/w/components/sidebar/sidebar.tsx b/app/w/components/sidebar/sidebar.tsx index f08f7ea321..766956ed7e 100644 --- a/app/w/components/sidebar/sidebar.tsx +++ b/app/w/components/sidebar/sidebar.tsx @@ -69,7 +69,7 @@ export function Sidebar() { {/* Scrollable workflows section */}