Reapply "Add missing admin action files and navigation links"
This reverts commit 4d515bc400.
This commit is contained in:
1 parent
96ed768f14
commit
5b4228261a
338 files changed
+28143
-5948
No files matched your search
@@ -0,0 +1,71 @@
|
||||
"use server";
|
||||
|
||||
import { revalidatePath } from "next/cache";
|
||||
import { requireStaff } from "@/lib/admin/guard";
|
||||
import { prisma } from "@/lib/prisma";
|
||||
import { logStaffActivity } from "@/lib/services/staff-activity";
|
||||
|
||||
export async function saveRank({ id, fields }: { id: number; fields: Record<string, string> }) {
|
||||
const staff = await requireStaff();
|
||||
const setClauses = Object.entries(fields)
|
||||
.map(([key]) => `\`${key}\` = ?`)
|
||||
.join(", ");
|
||||
const values = Object.values(fields);
|
||||
await prisma.$executeRawUnsafe(
|
||||
`UPDATE permissions SET ${setClauses} WHERE id = ?`,
|
||||
...values,
|
||||
id,
|
||||
);
|
||||
await logStaffActivity({
|
||||
staffId: staff.id,
|
||||
action: "rank_update",
|
||||
description: `Updated rank #${id}`,
|
||||
targetType: "rank",
|
||||
targetId: id,
|
||||
});
|
||||
}
|
||||
|
||||
export async function setCmsPermissions({ roleId, permissionSlugs }: { roleId: number; permissionSlugs: string[] }) {
|
||||
await requireStaff();
|
||||
const existing = await prisma.websiteHousekeepingPermissions.findMany({
|
||||
where: { minRank: roleId },
|
||||
select: { permission: true },
|
||||
});
|
||||
const existingSlugs = new Set(existing.map((p) => p.permission));
|
||||
const toAdd = permissionSlugs.filter((s) => !existingSlugs.has(s));
|
||||
const toRemove = existing.filter((p) => !permissionSlugs.includes(p.permission));
|
||||
|
||||
for (const slug of toAdd) {
|
||||
await prisma.websiteHousekeepingPermissions.create({
|
||||
data: { permission: slug, minRank: roleId, description: null },
|
||||
});
|
||||
}
|
||||
for (const p of toRemove) {
|
||||
await prisma.websiteHousekeepingPermissions.deleteMany({
|
||||
where: { permission: p.permission, minRank: roleId },
|
||||
});
|
||||
}
|
||||
|
||||
return { ok: true as const };
|
||||
}
|
||||
|
||||
export async function createRank({ rank_name, level }: { rank_name: string; level: number }) {
|
||||
const staff = await requireStaff();
|
||||
const created = await prisma.websiteTeams.create({
|
||||
data: {
|
||||
rankName: rank_name,
|
||||
hiddenRank: false,
|
||||
badge: null,
|
||||
jobDescription: null,
|
||||
staffColor: "#ffffff",
|
||||
staffBackground: "#000000",
|
||||
},
|
||||
});
|
||||
return { ok: true as const, data: { id: Number(created.id) } };
|
||||
}
|
||||
|
||||
export async function deleteRank({ id }: { id: number }) {
|
||||
await requireStaff();
|
||||
await prisma.websiteTeams.delete({ where: { id: BigInt(id) } });
|
||||
return { ok: true as const };
|
||||
}
|
||||
Reference in new issue
Block a user