haixunMaster/app/api/automation/rules/route.ts

63 lines
2.2 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

import { NextResponse } from "next/server";
import { getActiveAccountProfile } from "@/lib/account-context";
import { getRulesForAccount, upsertRule } from "@/lib/automation/rules";
import { isValidCron } from "@/lib/automation/cron-match";
import { AUTOMATION_TASK_TYPES, type AutomationTaskType } from "@/lib/automation/types";
import { apiRouteErrorResponse } from "@/lib/auth/api";
export async function GET() {
try {
const account = await getActiveAccountProfile();
if (!account) {
return NextResponse.json({ error: "尚未建立帳號,請先到帳號策略新增人設" }, { status: 400 });
}
const rules = await getRulesForAccount(account.id);
return NextResponse.json({
accountId: account.id,
accountName: account.displayName ?? account.username ?? "未命名帳號",
automationEnabled: account.automationEnabled,
rules,
});
} catch (error) {
return apiRouteErrorResponse(error, "automation/rules");
}
}
export async function PATCH(request: Request) {
try {
const account = await getActiveAccountProfile();
if (!account) {
return NextResponse.json({ error: "尚未建立帳號" }, { status: 400 });
}
const body = (await request.json().catch(() => ({}))) as {
taskType?: string;
mode?: "manual" | "auto";
dailyCap?: number;
schedule?: string;
enabled?: boolean;
};
if (!body.taskType || !AUTOMATION_TASK_TYPES.includes(body.taskType as AutomationTaskType)) {
return NextResponse.json({ error: "無效的任務類型" }, { status: 400 });
}
if (body.schedule !== undefined && !isValidCron(body.schedule)) {
return NextResponse.json({ error: "無效的 cron 排程(需 5 欄位)" }, { status: 400 });
}
if (body.dailyCap !== undefined && (body.dailyCap < 0 || body.dailyCap > 500)) {
return NextResponse.json({ error: "每日上限需在 0500 之間" }, { status: 400 });
}
const rule = await upsertRule(account.id, body.taskType as AutomationTaskType, {
mode: body.mode,
dailyCap: body.dailyCap,
schedule: body.schedule,
enabled: body.enabled,
});
return NextResponse.json({ rule });
} catch (error) {
return apiRouteErrorResponse(error, "automation/rules/update");
}
}