- 用 Deck 替换 Folder - 用 Note + Card 替换 Pair (双向复习) - 添加 NoteType (卡片模板) - 添加 Revlog (复习历史) - 实现 SM-2 间隔重复算法 - 更新所有前端页面 - 添加数据库迁移
38 lines
979 B
TypeScript
38 lines
979 B
TypeScript
import { redirect } from "next/navigation";
|
|
import { getTranslations } from "next-intl/server";
|
|
import { InDeck } from "./InDeck";
|
|
import { auth } from "@/auth";
|
|
import { headers } from "next/headers";
|
|
import { actionGetDeckById } from "@/modules/deck/deck-action";
|
|
|
|
export default async function DecksPage({
|
|
params,
|
|
}: {
|
|
params: Promise<{ deck_id: number; }>;
|
|
}) {
|
|
const session = await auth.api.getSession({ headers: await headers() });
|
|
const { deck_id } = await params;
|
|
const t = await getTranslations("deck_id");
|
|
|
|
if (!deck_id) {
|
|
redirect("/decks");
|
|
}
|
|
|
|
const deckInfo = (await actionGetDeckById({ deckId: Number(deck_id) })).data;
|
|
|
|
if (!deckInfo) {
|
|
redirect("/decks");
|
|
}
|
|
|
|
const isOwner = session?.user?.id === deckInfo.userId;
|
|
const isPublic = deckInfo.visibility === "PUBLIC";
|
|
|
|
if (!isOwner && !isPublic) {
|
|
redirect("/decks");
|
|
}
|
|
|
|
const isReadOnly = !isOwner;
|
|
|
|
return <InDeck deckId={Number(deck_id)} isReadOnly={isReadOnly} />;
|
|
}
|