mirror of
https://gitlab.massbug.com/massbug/judge4c.git
synced 2025-07-04 18:00:53 +00:00
feat(workspaces): enhance workspace creation with member role assignment and invite code generation
This commit is contained in:
parent
24dd663611
commit
6b3e851d4a
@ -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 });
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
Loading…
Reference in New Issue
Block a user