feat(workspaces): enhance workspace creation with member role assignment and invite code generation

This commit is contained in:
ngc2207 2025-02-06 10:45:09 +08:00
parent 24dd663611
commit 6b3e851d4a

View File

@ -1,17 +1,36 @@
import {
DATABASE_ID,
IMAGES_BUCKET_ID,
MEMBERS_ID,
WORKSPACES_ID,
} from "@/config";
import { Hono } from "hono"; 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 { zValidator } from "@hono/zod-validator";
import { createWorkspaceSchema } from "../schemas"; import { createWorkspaceSchema } from "../schemas";
import { MemberRole } from "@/features/members/types";
import { sessionMiddleware } from "@/lib/session-middleware"; import { sessionMiddleware } from "@/lib/session-middleware";
import { DATABASE_ID, IMAGES_BUCKET_ID, WORKSPACES_ID } from "@/config";
const app = new Hono() const app = new Hono()
.get("/", sessionMiddleware, async (c) => { .get("/", sessionMiddleware, async (c) => {
const user = c.get("user");
const databases = c.get("databases"); 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( const workspaces = await databases.listDocuments(
DATABASE_ID, DATABASE_ID,
WORKSPACES_ID WORKSPACES_ID,
[Query.orderDesc("$createdAt"), Query.contains("$id", workspaceIds)]
); );
return c.json({ data: workspaces }); return c.json({ data: workspaces });
@ -54,9 +73,16 @@ const app = new Hono()
name, name,
userId: user.$id, userId: user.$id,
imageUrl: uploadImageUrl, 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 }); return c.json({ data: workspace });
} }
); );