feat(admin): add daily-report recipients GET/POST route
This commit is contained in:
parent
da96cdd236
commit
bf25b9ac71
59
admin/src/app/api/admin/daily-report/recipients/route.ts
Normal file
59
admin/src/app/api/admin/daily-report/recipients/route.ts
Normal file
@ -0,0 +1,59 @@
|
||||
import { NextRequest, NextResponse } from "next/server";
|
||||
import { query } from "@/lib/db";
|
||||
import { createAuditLog } from "@/lib/log";
|
||||
|
||||
export const runtime = "nodejs";
|
||||
|
||||
// GET /api/admin/daily-report/recipients — list all recipients
|
||||
export async function GET() {
|
||||
try {
|
||||
const result = await query(
|
||||
`SELECT id, email, name, is_active, created_at::text as created_at, created_by
|
||||
FROM internal_email_recipients
|
||||
ORDER BY created_at DESC`
|
||||
);
|
||||
return NextResponse.json({ recipients: result.rows });
|
||||
} catch (e) {
|
||||
console.error("[recipients] List error:", e);
|
||||
return NextResponse.json({ error: "服务器错误" }, { status: 500 });
|
||||
}
|
||||
}
|
||||
|
||||
// POST /api/admin/daily-report/recipients — add recipient
|
||||
export async function POST(req: NextRequest) {
|
||||
try {
|
||||
const body = await req.json() as { email?: string; name?: string };
|
||||
const { email, name = "" } = body;
|
||||
|
||||
if (!email || !/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(email)) {
|
||||
return NextResponse.json({ error: "无效的邮箱地址" }, { status: 400 });
|
||||
}
|
||||
|
||||
const adminUserId = parseInt(req.headers.get("x-admin-user-id") || "0", 10);
|
||||
|
||||
const result = await query(
|
||||
`INSERT INTO internal_email_recipients (email, name, created_by)
|
||||
VALUES ($1, $2, $3)
|
||||
RETURNING id, email, name, is_active, created_at::text as created_at`,
|
||||
[email.toLowerCase(), name, adminUserId]
|
||||
);
|
||||
|
||||
await createAuditLog({
|
||||
userId: adminUserId,
|
||||
username: req.headers.get("x-admin-username") || "unknown",
|
||||
action: "create",
|
||||
resource: "internal_email_recipient",
|
||||
resourceId: String(result.rows[0]?.id),
|
||||
requestParams: { email },
|
||||
});
|
||||
|
||||
return NextResponse.json(result.rows[0], { status: 201 });
|
||||
} catch (e: unknown) {
|
||||
const err = e as { code?: string };
|
||||
if (err?.code === "23505") {
|
||||
return NextResponse.json({ error: "该邮箱已存在" }, { status: 409 });
|
||||
}
|
||||
console.error("[recipients] Add error:", e);
|
||||
return NextResponse.json({ error: "服务器错误" }, { status: 500 });
|
||||
}
|
||||
}
|
||||
Loading…
Reference in New Issue
Block a user