You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

52 lines
1.6 KiB

import { dbGlobal } from "drizzle-pkg/lib/db";
import { users } from "drizzle-pkg/lib/schema/auth";
import { inArray } from "drizzle-orm";
import log4js from "logger";
import { requireAdmin } from "#server/utils/admin-guard";
const logger = log4js.getLogger("USERS");
export default defineWrappedResponseHandler(async (event) => {
requireAdmin(event);
const body = await readBody(event);
if (!body?.ids || !Array.isArray(body.ids) || body.ids.length === 0) {
throw createError({
statusCode: 400,
statusMessage: "请选择要操作的用户",
});
}
if (!body?.action || !["enable", "disable", "delete"].includes(body.action)) {
throw createError({
statusCode: 400,
statusMessage: "无效的操作类型",
});
}
const ids = body.ids.map((n: number) => Number(n)).filter(n => !isNaN(n));
if (ids.length === 0) {
throw createError({
statusCode: 400,
statusMessage: "无效的用户ID列表",
});
}
if (body.action === "delete") {
await dbGlobal.delete(users).where(inArray(users.id, ids));
logger.info("users batch deleted by admin: count=%d", ids.length);
return R.success({ message: `已删除 ${ids.length} 个用户` });
}
const newStatus = body.action === "enable" ? "active" : "disabled";
await dbGlobal
.update(users)
.set({ status: newStatus })
.where(inArray(users.id, ids));
logger.info("users batch %s by admin: ids=%s", body.action, ids.join(","));
return R.success({
message: `${body.action === "enable" ? "启用" : "禁用"} ${ids.length} 个用户`
});
});