diff --git a/packages/console/app/src/context/auth.ts b/packages/console/app/src/context/auth.ts index c177049c..dbbd3c3b 100644 --- a/packages/console/app/src/context/auth.ts +++ b/packages/console/app/src/context/auth.ts @@ -1,5 +1,5 @@ import { getRequestEvent } from "solid-js/web" -import { and, Database, eq, inArray, sql } from "@opencode-ai/console-core/drizzle/index.js" +import { and, Database, eq, inArray, isNull, sql } from "@opencode-ai/console-core/drizzle/index.js" import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" import { redirect } from "@solidjs/router" import { Actor } from "@opencode-ai/console-core/actor.js" @@ -56,7 +56,13 @@ export const getActor = async (workspace?: string): Promise => { tx .select() .from(UserTable) - .where(and(eq(UserTable.workspaceID, workspace), inArray(UserTable.accountID, accounts))) + .where( + and( + eq(UserTable.workspaceID, workspace), + isNull(UserTable.timeDeleted), + inArray(UserTable.accountID, accounts), + ), + ) .limit(1) .execute() .then((x) => x[0]), diff --git a/packages/console/app/src/routes/auth/index.ts b/packages/console/app/src/routes/auth/index.ts index f522e761..63430b77 100644 --- a/packages/console/app/src/routes/auth/index.ts +++ b/packages/console/app/src/routes/auth/index.ts @@ -1,5 +1,5 @@ import { Actor } from "@opencode-ai/console-core/actor.js" -import { and, Database, eq, isNull } from "@opencode-ai/console-core/drizzle/index.js" +import { and, Database, desc, eq, isNull } from "@opencode-ai/console-core/drizzle/index.js" import { UserTable } from "@opencode-ai/console-core/schema/user.sql.js" import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" import { redirect } from "@solidjs/router" @@ -8,7 +8,7 @@ import { withActor } from "~/context/auth.withActor" export async function GET(input: APIEvent) { try { - const workspaces = await withActor(async () => { + const workspaceID = await withActor(async () => { const actor = Actor.assert("account") return Database.transaction(async (tx) => tx @@ -21,10 +21,13 @@ export async function GET(input: APIEvent) { isNull(UserTable.timeDeleted), isNull(WorkspaceTable.timeDeleted), ), - ), + ) + .orderBy(desc(UserTable.timeSeen)) + .limit(1) + .then((x) => x[0]?.id), ) }) - return redirect(`/workspace/${workspaces[0].id}`) + return redirect(`/workspace/${workspaceID}`) } catch { return redirect("/auth/authorize") } diff --git a/packages/console/app/src/routes/workspace-picker.tsx b/packages/console/app/src/routes/workspace-picker.tsx index 934ec168..fa8cf1d2 100644 --- a/packages/console/app/src/routes/workspace-picker.tsx +++ b/packages/console/app/src/routes/workspace-picker.tsx @@ -23,7 +23,13 @@ const getWorkspaces = query(async () => { }) .from(UserTable) .innerJoin(WorkspaceTable, eq(UserTable.workspaceID, WorkspaceTable.id)) - .where(and(eq(UserTable.accountID, Actor.account()), isNull(WorkspaceTable.timeDeleted))), + .where( + and( + eq(UserTable.accountID, Actor.account()), + isNull(WorkspaceTable.timeDeleted), + isNull(UserTable.timeDeleted), + ), + ), ) }) }, "workspaces")