Frank 5 месяцев назад
Родитель
Сommit
5f7bba11fd

+ 8 - 2
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<Actor.Info> => {
         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]),

+ 7 - 4
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")
   }

+ 7 - 1
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")