This commit is contained in:
Frank
2025-10-16 23:43:49 -04:00
parent 4663ea5faa
commit 5f7bba11fd
3 changed files with 22 additions and 7 deletions

View File

@@ -1,5 +1,5 @@
import { getRequestEvent } from "solid-js/web" 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 { UserTable } from "@opencode-ai/console-core/schema/user.sql.js"
import { redirect } from "@solidjs/router" import { redirect } from "@solidjs/router"
import { Actor } from "@opencode-ai/console-core/actor.js" import { Actor } from "@opencode-ai/console-core/actor.js"
@@ -56,7 +56,13 @@ export const getActor = async (workspace?: string): Promise<Actor.Info> => {
tx tx
.select() .select()
.from(UserTable) .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) .limit(1)
.execute() .execute()
.then((x) => x[0]), .then((x) => x[0]),

View File

@@ -1,5 +1,5 @@
import { Actor } from "@opencode-ai/console-core/actor.js" 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 { UserTable } from "@opencode-ai/console-core/schema/user.sql.js"
import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js" import { WorkspaceTable } from "@opencode-ai/console-core/schema/workspace.sql.js"
import { redirect } from "@solidjs/router" import { redirect } from "@solidjs/router"
@@ -8,7 +8,7 @@ import { withActor } from "~/context/auth.withActor"
export async function GET(input: APIEvent) { export async function GET(input: APIEvent) {
try { try {
const workspaces = await withActor(async () => { const workspaceID = await withActor(async () => {
const actor = Actor.assert("account") const actor = Actor.assert("account")
return Database.transaction(async (tx) => return Database.transaction(async (tx) =>
tx tx
@@ -21,10 +21,13 @@ export async function GET(input: APIEvent) {
isNull(UserTable.timeDeleted), isNull(UserTable.timeDeleted),
isNull(WorkspaceTable.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 { } catch {
return redirect("/auth/authorize") return redirect("/auth/authorize")
} }

View File

@@ -23,7 +23,13 @@ const getWorkspaces = query(async () => {
}) })
.from(UserTable) .from(UserTable)
.innerJoin(WorkspaceTable, eq(UserTable.workspaceID, WorkspaceTable.id)) .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") }, "workspaces")