0.3.1 UI修复

This commit is contained in:
liaibo
2026-01-18 19:01:31 +08:00
parent 90a38b48cf
commit 8a5b915002
86 changed files with 1160 additions and 2867 deletions
+23 -9
View File
@@ -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。