重构大量文件

This commit is contained in:
2026-02-24 10:50:11 +08:00
parent dd97cf6a2c
commit 9efdf060f5
29 changed files with 264 additions and 133 deletions
+19 -12
View File
@@ -1,31 +1,38 @@
import { NextResponse } from "next/server";
import { prisma } from "@/lib/prisma";
import { verifyPassword } from "@/lib/auth";
import { createSessionToken, getSessionCookieName, getSessionTtlSeconds } from "@/lib/session";
export async function POST(req: Request) {
try {
const { password } = await req.json();
// Ensure settings exist, if not, maybe we should init or fail?
// Ideally init should happen on app startup or manual trigger, but for simplicity:
// If no settings exist, check against "admin" (fallback) but DO NOT create DB entry implicitely here for security,
// unless we strictly define that "admin" is the default.
// Let's assume DB must be populated.
const { password, rememberMe, durationDays } = await req.json();
const settings = await prisma.globalSettings.findUnique({
where: { id: "default" },
});
const isValid = settings
? await verifyPassword(password, settings.password)
: password === "admin"; // Fallback only if DB empty
if (!settings) {
return NextResponse.json({ error: "Settings not initialized" }, { status: 503 });
}
const isValid = await verifyPassword(password, settings.password);
if (isValid) {
return NextResponse.json({ success: true });
const days = rememberMe ? Number(durationDays) || 1 : 1;
const token = await createSessionToken(days);
const response = NextResponse.json({ success: true });
response.cookies.set(getSessionCookieName(), token, {
httpOnly: true,
secure: process.env.NODE_ENV === "production",
sameSite: "lax",
path: "/",
maxAge: getSessionTtlSeconds(days),
});
return response;
} else {
return NextResponse.json({ error: "Invalid password" }, { status: 401 });
}
} catch (error) {
} catch {
return NextResponse.json({ error: "Login failed" }, { status: 500 });
}
}
+2 -1
View File
@@ -1,9 +1,10 @@
import { NextResponse } from "next/server";
import { cookies } from "next/headers";
import { getSessionCookieName } from "@/lib/session";
export async function POST() {
const cookieStore = await cookies();
cookieStore.delete("auth");
cookieStore.delete(getSessionCookieName());
return NextResponse.json({ success: true });
}
+5 -4
View File
@@ -1,5 +1,6 @@
import { NextResponse } from 'next/server';
import { prisma } from '@/lib/prisma';
import type { Prisma } from '@prisma/client';
export async function GET(
request: Request,
@@ -12,7 +13,7 @@ export async function GET(
});
if (!page) return NextResponse.json({ error: 'Page not found' }, { status: 404 });
return NextResponse.json({ ...page, tags: JSON.parse(page.tags || "[]") });
} catch (error) {
} catch {
return NextResponse.json({ error: 'Error fetching page' }, { status: 500 });
}
}
@@ -25,7 +26,7 @@ export async function PUT(
try {
const body = await request.json();
// Separate update logic for flexibility (e.g. only updating title)
const updateData: any = {};
const updateData: Prisma.PageUncheckedUpdateInput = {};
if (body.title !== undefined) updateData.title = body.title;
if (body.content !== undefined) updateData.content = body.content;
if (body.parentId !== undefined) updateData.parentId = body.parentId;
@@ -38,7 +39,7 @@ export async function PUT(
data: updateData,
});
return NextResponse.json({ ...page, tags: JSON.parse(page.tags || "[]") });
} catch (error) {
} catch {
return NextResponse.json({ error: 'Error updating page' }, { status: 500 });
}
}
@@ -53,7 +54,7 @@ export async function DELETE(
where: { id },
});
return NextResponse.json({ success: true });
} catch (error) {
} catch {
return NextResponse.json({ error: 'Error deleting page' }, { status: 500 });
}
}
+1 -1
View File
@@ -21,7 +21,7 @@ export async function PUT(request: Request) {
);
return NextResponse.json({ success: true });
} catch (error) {
} catch {
return NextResponse.json({ error: 'Error reordering pages' }, { status: 500 });
}
}
+2 -2
View File
@@ -11,7 +11,7 @@ export async function GET() {
tags: JSON.parse(p.tags || "[]")
}));
return NextResponse.json(parsedPages);
} catch (error) {
} catch {
return NextResponse.json({ error: 'Error fetching pages' }, { status: 500 });
}
}
@@ -41,7 +41,7 @@ export async function POST(request: Request) {
},
});
return NextResponse.json({ ...page, tags: JSON.parse(page.tags || "[]") });
} catch (error) {
} catch {
return NextResponse.json({ error: 'Error creating page' }, { status: 500 });
}
}
+3 -4
View File
@@ -6,8 +6,7 @@ export async function PUT(req: Request) {
try {
const { currentPassword, newPassword } = await req.json();
// Cast to any to bypass build error until server restart allows prisma generate to run
const settings = await (prisma as any).globalSettings.findUnique({
const settings = await prisma.globalSettings.findUnique({
where: { id: "default" },
});
@@ -22,13 +21,13 @@ export async function PUT(req: Request) {
const hashedPassword = await hashPassword(newPassword);
await (prisma as any).globalSettings.update({
await prisma.globalSettings.update({
where: { id: "default" },
data: { password: hashedPassword },
});
return NextResponse.json({ success: true });
} catch (error) {
} catch {
return NextResponse.json({ error: "Failed to change password" }, { status: 500 });
}
}