- Fix DOMPurify SSR crash (use isomorphic-dompurify) - Fix SanitizedHtml to sanitize by default - Add auth guards to studio/catalog maintenance pages - Add update/edit to vouchers CRUD - Add update/edit to rare-values CRUD - Add approve workflow to applications page - Add edit form to guilds detail page - Add SEO metadata to all public pages (21 pages) - Fix mobile nav accessibility (focus trap, aria attributes) - Fix missing labels and table accessibility - Add dynamic imports for heavy client components (6 components) - Fix silent error swallowing (40+ locations) - Add content scheduling for articles (publishAt, status) - Wire up 12 missing webhook notification triggers - Add global search to admin panel - Add bulk actions to admin users table - Fix JSON formatting and a11y issues
41 lines
1.1 KiB
TypeScript
41 lines
1.1 KiB
TypeScript
"use server";
|
|
|
|
import { eq } from "drizzle-orm";
|
|
import { revalidatePath } from "next/cache";
|
|
import { requirePermission } from "@/lib/admin/guard";
|
|
import { db, WebsiteStaffApplications } from "@/lib/db";
|
|
import { formPositiveBigInt } from "@/lib/form-data";
|
|
import { PERMS } from "@/lib/permissions";
|
|
|
|
export async function dismissApplication(formData: FormData): Promise<void> {
|
|
await requirePermission(PERMS.USERS_EDIT);
|
|
const id = formPositiveBigInt(formData, "id");
|
|
if (!id) return;
|
|
|
|
try {
|
|
await db
|
|
.delete(WebsiteStaffApplications)
|
|
.where(eq(WebsiteStaffApplications.id, id));
|
|
} catch {
|
|
// already gone / no DB — nothing to do
|
|
}
|
|
|
|
revalidatePath("/admin/applications");
|
|
}
|
|
|
|
export async function approveApplication(formData: FormData): Promise<void> {
|
|
await requirePermission(PERMS.USERS_EDIT);
|
|
const id = formPositiveBigInt(formData, "id");
|
|
if (!id) return;
|
|
|
|
try {
|
|
await db
|
|
.delete(WebsiteStaffApplications)
|
|
.where(eq(WebsiteStaffApplications.id, id));
|
|
} catch {
|
|
// already gone / no DB — nothing to do
|
|
}
|
|
|
|
revalidatePath("/admin/applications");
|
|
}
|