55 lines
1.2 KiB
TypeScript
55 lines
1.2 KiB
TypeScript
"use server";
|
|
|
|
import { eq } from "drizzle-orm";
|
|
import { revalidatePath } from "next/cache";
|
|
import { requirePermission } from "@/lib/admin/guard";
|
|
import { db, WebsiteBadges } from "@/lib/db";
|
|
import { PERMS } from "@/lib/permissions";
|
|
|
|
export async function getBadgeData({ code }: { code: string }) {
|
|
await requirePermission(PERMS.CATALOG_EDIT);
|
|
const [badge] = await db
|
|
.select({
|
|
badgeName: WebsiteBadges.badgeName,
|
|
badgeDescription: WebsiteBadges.badgeDescription,
|
|
})
|
|
.from(WebsiteBadges)
|
|
.where(eq(WebsiteBadges.badgeKey, code))
|
|
.limit(1);
|
|
if (!badge) return { ok: false as const, data: null };
|
|
return {
|
|
ok: true as const,
|
|
data: { name: badge.badgeName, desc: badge.badgeDescription },
|
|
};
|
|
}
|
|
|
|
export async function updateBadge({
|
|
code,
|
|
name,
|
|
desc,
|
|
}: {
|
|
code: string;
|
|
name: string;
|
|
desc: string;
|
|
}) {
|
|
await requirePermission(PERMS.CATALOG_EDIT);
|
|
const now = new Date();
|
|
await db
|
|
.insert(WebsiteBadges)
|
|
.values({
|
|
badgeKey: code,
|
|
badgeName: name,
|
|
badgeDescription: desc,
|
|
createdAt: now,
|
|
updatedAt: now,
|
|
})
|
|
.onDuplicateKeyUpdate({
|
|
set: {
|
|
badgeName: name,
|
|
badgeDescription: desc,
|
|
updatedAt: now,
|
|
},
|
|
});
|
|
revalidatePath("/admin/import/badges");
|
|
}
|