diff --git a/src/features/workspaces/server/route.ts b/src/features/workspaces/server/route.ts index cf77dbe..b059050 100644 --- a/src/features/workspaces/server/route.ts +++ b/src/features/workspaces/server/route.ts @@ -1,17 +1,36 @@ +import { + DATABASE_ID, + IMAGES_BUCKET_ID, + MEMBERS_ID, + WORKSPACES_ID, +} from "@/config"; import { Hono } from "hono"; -import { ID } from "node-appwrite"; +import { ID, Query } from "node-appwrite"; +import { generateInviteCode } from "@/lib/utils"; import { zValidator } from "@hono/zod-validator"; import { createWorkspaceSchema } from "../schemas"; +import { MemberRole } from "@/features/members/types"; import { sessionMiddleware } from "@/lib/session-middleware"; -import { DATABASE_ID, IMAGES_BUCKET_ID, WORKSPACES_ID } from "@/config"; const app = new Hono() .get("/", sessionMiddleware, async (c) => { + const user = c.get("user"); const databases = c.get("databases"); + const members = await databases.listDocuments(DATABASE_ID, MEMBERS_ID, [ + Query.equal("userId", user.$id), + ]); + + if (members.total === 0) { + return c.json({ data: { documents: [], total: 0 } }); + } + + const workspaceIds = members.documents.map((member) => member.workspaceId); + const workspaces = await databases.listDocuments( DATABASE_ID, - WORKSPACES_ID + WORKSPACES_ID, + [Query.orderDesc("$createdAt"), Query.contains("$id", workspaceIds)] ); return c.json({ data: workspaces }); @@ -54,9 +73,16 @@ const app = new Hono() name, userId: user.$id, imageUrl: uploadImageUrl, + inviteCode: generateInviteCode(6), } ); + await databases.createDocument(DATABASE_ID, MEMBERS_ID, ID.unique(), { + userId: user.$id, + workspaceId: workspace.$id, + role: MemberRole.ADMIN, + }); + return c.json({ data: workspace }); } );