From e60401a86c575ff9f1be546edbc0c53d54dd498e Mon Sep 17 00:00:00 2001 From: DrMesta103 Date: Mon, 11 May 2026 14:53:55 +0330 Subject: [PATCH] add otp swagger1 --- app/(admin)/admin/news/page.tsx | 171 ++++++++++++++++++++++++++++++++ next.config.ts | 19 +++- scripts/create-admin-user.ts | 10 +- 3 files changed, 193 insertions(+), 7 deletions(-) create mode 100644 app/(admin)/admin/news/page.tsx diff --git a/app/(admin)/admin/news/page.tsx b/app/(admin)/admin/news/page.tsx new file mode 100644 index 0000000..b784b32 --- /dev/null +++ b/app/(admin)/admin/news/page.tsx @@ -0,0 +1,171 @@ +import { revalidatePath } from "next/cache"; +import { db } from "@/lib/db"; +import { requireAdmin } from "@/lib/session"; + +function toDateTimeLocalValue(date: Date) { + const offsetMs = date.getTimezoneOffset() * 60 * 1000; + return new Date(date.getTime() - offsetMs).toISOString().slice(0, 16); +} + +async function createNews(formData: FormData) { + "use server"; + + await requireAdmin(); + + const icon = String(formData.get("icon") ?? "").trim(); + const title = String(formData.get("title") ?? "").trim(); + const description = String(formData.get("description") ?? "").trim(); + const newsTimeValue = String(formData.get("newsTime") ?? "").trim(); + const newsTime = new Date(newsTimeValue); + + if (!icon || !title || !description || Number.isNaN(newsTime.getTime())) { + return; + } + + await db.fantasyNews.create({ + data: { + icon, + title, + description, + newsTime, + }, + }); + + revalidatePath("/admin/news"); + revalidatePath("/"); +} + +async function deleteNews(formData: FormData) { + "use server"; + + await requireAdmin(); + + const id = String(formData.get("id") ?? ""); + if (!id) return; + + await db.fantasyNews.delete({ where: { id } }); + + revalidatePath("/admin/news"); + revalidatePath("/"); +} + +export default async function AdminNewsPage() { + await requireAdmin(); + + const news = await db.fantasyNews.findMany({ + orderBy: [{ newsTime: "desc" }, { createdAt: "desc" }], + }); + + return ( +
+
+
+

مدیریت اخبار

+

اخبار فانتزی که در API اخبار نمایش داده می‌شوند.

+
+
+ +
+
+ + + +
+ +