Files
mnote/wolai-frontend/src/app/page.tsx
T
2026-01-18 05:13:53 +08:00

93 lines
2.6 KiB
TypeScript

import { redirect } from "next/navigation";
import { createSupabaseServerClient } from "@/lib/supabase/server";
import { ensureDefaultWorkspace, resolveActiveWorkspaceId } from "@/lib/workspaces";
import { isConvexEnabled } from "@/lib/convex/enabled";
import { requireAuthContext } from "@/lib/auth/authContext";
import { getConvexHttpClient } from "@/lib/convex/server";
import { api } from "@/lib/convex/api";
function makeId(): string {
return typeof crypto.randomUUID === "function"
? crypto.randomUUID()
: `${Date.now()}_${Math.random().toString(16).slice(2)}`;
}
export default async function Home() {
if (isConvexEnabled()) {
const auth = await requireAuthContext();
const client = getConvexHttpClient();
const { activeWorkspaceId } = await client.mutation(api.workspaces.ensureDefaultWorkspace, {
userId: auth.userId,
fallbackName: auth.name ?? auth.email ?? "我的空间",
workspaceIdIfCreate: makeId(),
});
const docs = await client.query(api.documents.listByWorkspace, {
userId: auth.userId,
workspaceId: activeWorkspaceId,
});
const firstDoc = [...docs].sort((a, b) => (a.created_at ?? "").localeCompare(b.created_at ?? ""))[0];
if (firstDoc?.id) {
redirect(`/documents/${firstDoc.id}`);
}
const docId = makeId();
await client.mutation(api.documents.create, {
userId: auth.userId,
id: docId,
workspaceId: activeWorkspaceId,
parentId: null,
title: "新页面",
accessScope: "private",
content: [],
});
redirect(`/documents/${docId}`);
}
const supabase = await createSupabaseServerClient();
const session = (await supabase.auth.getSession()).data.session;
if (!session) {
redirect("/login");
}
await ensureDefaultWorkspace(supabase, session.user.id, session.user.email ?? "我的空间");
const workspaceId = await resolveActiveWorkspaceId(supabase, session.user.id);
if (!workspaceId) {
redirect("/login");
}
const { data: firstDoc } = await supabase
.from("documents")
.select("id")
.eq("user_id", session.user.id)
.eq("workspace_id", workspaceId)
.order("created_at", { ascending: true })
.limit(1)
.maybeSingle();
if (firstDoc?.id) {
redirect(`/documents/${firstDoc.id}`);
}
const { data: createdDoc, error } = await supabase
.from("documents")
.insert({
user_id: session.user.id,
workspace_id: workspaceId,
title: "新页面",
content: {},
})
.select("id")
.single();
if (error || !createdDoc) {
redirect("/login");
}
redirect(`/documents/${createdDoc.id}`);
}