0.3.1 UI修复
This commit is contained in:
@@ -1,5 +1,6 @@
|
||||
import { mutation, query } from "./_generated/server";
|
||||
import { v } from "convex/values";
|
||||
import { getAuthUserId } from "@convex-dev/auth/server";
|
||||
import { nowIso } from "./_utils/time";
|
||||
import type { MutationCtx, QueryCtx } from "./_generated/server";
|
||||
|
||||
@@ -12,6 +13,14 @@ type WorkspaceSummary = {
|
||||
isDefault: boolean;
|
||||
};
|
||||
|
||||
async function requireUserId(ctx: any): Promise<string> {
|
||||
const userId = await getAuthUserId(ctx);
|
||||
if (userId === null) {
|
||||
throw new Error("未登录");
|
||||
}
|
||||
return userId;
|
||||
}
|
||||
|
||||
async function findWorkspaceById(ctx: QueryCtx | MutationCtx, workspaceId: string) {
|
||||
return await ctx.db
|
||||
.query("workspaces")
|
||||
@@ -29,14 +38,15 @@ async function countMembers(ctx: QueryCtx | MutationCtx, workspaceId: string): P
|
||||
|
||||
export const ensureDefaultWorkspace = mutation({
|
||||
args: {
|
||||
userId: v.string(),
|
||||
fallbackName: v.optional(v.string()),
|
||||
workspaceIdIfCreate: v.string(),
|
||||
},
|
||||
handler: async (ctx, args) => {
|
||||
const userId = await requireUserId(ctx);
|
||||
|
||||
const memberships = await ctx.db
|
||||
.query("workspace_members")
|
||||
.withIndex("by_user_id", (q) => q.eq("user_id", args.userId))
|
||||
.withIndex("by_user_id", (q) => q.eq("user_id", userId))
|
||||
.collect();
|
||||
|
||||
if (memberships.length === 0) {
|
||||
@@ -50,13 +60,13 @@ export const ensureDefaultWorkspace = mutation({
|
||||
name: workspaceName,
|
||||
type: "personal",
|
||||
icon_url: null,
|
||||
created_by: args.userId,
|
||||
created_by: userId,
|
||||
created_at: ts,
|
||||
});
|
||||
|
||||
await ctx.db.insert("workspace_members", {
|
||||
workspace_id: args.workspaceIdIfCreate,
|
||||
user_id: args.userId,
|
||||
user_id: userId,
|
||||
role: "owner",
|
||||
is_default: true,
|
||||
created_at: ts,
|
||||
@@ -103,12 +113,14 @@ export const ensureDefaultWorkspace = mutation({
|
||||
});
|
||||
|
||||
export const fetchWorkspaceSummaries = query({
|
||||
args: { userId: v.string() },
|
||||
args: {},
|
||||
handler: async (ctx, args) => {
|
||||
const userId = await requireUserId(ctx);
|
||||
|
||||
// 说明:为了复用 ensureDefaultWorkspace 的返回结构,这里直接走同样的聚合逻辑。
|
||||
const memberships = await ctx.db
|
||||
.query("workspace_members")
|
||||
.withIndex("by_user_id", (q) => q.eq("user_id", args.userId))
|
||||
.withIndex("by_user_id", (q) => q.eq("user_id", userId))
|
||||
.collect();
|
||||
|
||||
const workspaceIds = Array.from(new Set(memberships.map((m) => m.workspace_id)));
|
||||
@@ -135,12 +147,14 @@ export const fetchWorkspaceSummaries = query({
|
||||
});
|
||||
|
||||
export const switchDefaultWorkspace = mutation({
|
||||
args: { userId: v.string(), workspaceId: v.string() },
|
||||
args: { workspaceId: v.string() },
|
||||
handler: async (ctx, args) => {
|
||||
const userId = await requireUserId(ctx);
|
||||
|
||||
const target = await ctx.db
|
||||
.query("workspace_members")
|
||||
.withIndex("by_workspace_user", (q) =>
|
||||
q.eq("workspace_id", args.workspaceId).eq("user_id", args.userId),
|
||||
q.eq("workspace_id", args.workspaceId).eq("user_id", userId),
|
||||
)
|
||||
.first();
|
||||
|
||||
@@ -150,7 +164,7 @@ export const switchDefaultWorkspace = mutation({
|
||||
|
||||
const memberships = await ctx.db
|
||||
.query("workspace_members")
|
||||
.withIndex("by_user_id", (q) => q.eq("user_id", args.userId))
|
||||
.withIndex("by_user_id", (q) => q.eq("user_id", userId))
|
||||
.collect();
|
||||
|
||||
// 说明:Convex 暂无批量 update,这里逐条 patch。
|
||||
|
||||
Reference in New Issue
Block a user