diff --git a/src/app/admin/comments/delete-action.ts b/src/app/admin/comments/delete-action.ts new file mode 100644 index 0000000..1d60bee --- /dev/null +++ b/src/app/admin/comments/delete-action.ts @@ -0,0 +1,19 @@ +"use server"; + +import { headers } from "next/headers"; +import { auth } from "@/lib/auth"; +import { prisma } from "@/lib/prisma"; +import { revalidatePath } from "next/cache"; + +export async function deleteComment(commentId: string): Promise<{ ok: boolean }> { + const session = await auth.api.getSession({ headers: await headers() }); + if (!session || session.user.role !== "admin") throw new Error("Нет доступа"); + + await prisma.lessonComment.update({ + where: { id: commentId }, + data: { deleted: true }, + }); + + revalidatePath("/admin/comments"); + return { ok: true }; +} diff --git a/src/app/admin/comments/page.tsx b/src/app/admin/comments/page.tsx index b09a00c..4ca1f42 100644 --- a/src/app/admin/comments/page.tsx +++ b/src/app/admin/comments/page.tsx @@ -2,6 +2,9 @@ import { prisma } from "@/lib/prisma"; import Link from "next/link"; import { Suspense } from "react"; import { CommentsTable } from "@/components/admin/comments-table"; +import { auth } from "@/lib/auth"; +import { headers } from "next/headers"; +import { redirect } from "next/navigation"; export const metadata = { title: "Комментарии" }; @@ -12,6 +15,9 @@ interface Props { } export default async function AdminCommentsPage({ searchParams }: Props) { + const session = await auth.api.getSession({ headers: await headers() }); + if (!session || session.user.role !== "admin") redirect("/dashboard"); + const { page = "1", search = "" } = await searchParams; const currentPage = Math.max(1, parseInt(page) || 1); const skip = (currentPage - 1) * PAGE_SIZE; @@ -106,7 +112,7 @@ export default async function AdminCommentsPage({ searchParams }: Props) { {currentPage < totalPages && ( → )} - стр. {currentPage} из {totalPages} + Страница {currentPage} из {totalPages} · Всего: {total} )}