120 lines
3.5 KiB
TypeScript
120 lines
3.5 KiB
TypeScript
"use server";
|
|
|
|
import { revalidatePath } from "next/cache";
|
|
import { executeLegacyHotelMutation } from "@/features/housekeeping/domains/hotel/services/mutations";
|
|
import { requirePermission } from "@/lib/admin/guard";
|
|
import { PERMS } from "@/lib/permissions";
|
|
import { siteSettings } from "@/lib/services/site-settings";
|
|
|
|
function text(formData: FormData, key: string): string {
|
|
return String(formData.get(key) ?? "")
|
|
.normalize("NFC")
|
|
.trim();
|
|
}
|
|
|
|
function enabled(formData: FormData, key: string): boolean {
|
|
return ["1", "true", "on"].includes(text(formData, key).toLowerCase());
|
|
}
|
|
|
|
async function actor() {
|
|
return requirePermission(PERMS.RADIO_EDIT);
|
|
}
|
|
|
|
export async function saveRadioSetting(formData: FormData): Promise<void> {
|
|
const staff = await actor();
|
|
await executeLegacyHotelMutation(staff, "radio.settings.save-one", {
|
|
key: text(formData, "key"),
|
|
value: String(formData.get("value") ?? ""),
|
|
comment: text(formData, "comment") || undefined,
|
|
});
|
|
siteSettings.reload();
|
|
revalidatePath("/admin/radio/settings");
|
|
}
|
|
|
|
export async function saveRadioSettings(formData: FormData): Promise<void> {
|
|
const staff = await actor();
|
|
const entries = text(formData, "__keys")
|
|
.split(",")
|
|
.map((key) => key.trim())
|
|
.filter(Boolean)
|
|
.map((key) => ({ key, value: String(formData.get(key) ?? "") }));
|
|
await executeLegacyHotelMutation(staff, "radio.settings.save-many", {
|
|
entries,
|
|
});
|
|
siteSettings.reload();
|
|
revalidatePath("/admin/radio/settings");
|
|
}
|
|
|
|
function bannerInput(formData: FormData) {
|
|
return {
|
|
imagePath: text(formData, "imagePath"),
|
|
title: text(formData, "title") || undefined,
|
|
description: text(formData, "description") || undefined,
|
|
sortOrder: Number(text(formData, "sortOrder") || 0),
|
|
isActive: enabled(formData, "isActive"),
|
|
};
|
|
}
|
|
|
|
export async function createRadioBanner(formData: FormData): Promise<void> {
|
|
const staff = await actor();
|
|
await executeLegacyHotelMutation(
|
|
staff,
|
|
"radio.banner.create",
|
|
bannerInput(formData),
|
|
);
|
|
revalidatePath("/admin/radio/banners");
|
|
}
|
|
|
|
export async function updateRadioBanner(formData: FormData): Promise<void> {
|
|
const staff = await actor();
|
|
await executeLegacyHotelMutation(staff, "radio.banner.update", {
|
|
id: text(formData, "id"),
|
|
...bannerInput(formData),
|
|
});
|
|
revalidatePath("/admin/radio/banners");
|
|
}
|
|
|
|
export async function deleteRadioBanner(formData: FormData): Promise<void> {
|
|
const staff = await actor();
|
|
await executeLegacyHotelMutation(staff, "radio.banner.delete", {
|
|
id: text(formData, "id"),
|
|
});
|
|
revalidatePath("/admin/radio/banners");
|
|
}
|
|
|
|
function rankInput(formData: FormData) {
|
|
return {
|
|
name: text(formData, "name"),
|
|
description: text(formData, "description") || undefined,
|
|
badgeCode: text(formData, "badgeCode") || undefined,
|
|
isActive: enabled(formData, "isActive"),
|
|
};
|
|
}
|
|
|
|
export async function createRadioRank(formData: FormData): Promise<void> {
|
|
const staff = await actor();
|
|
await executeLegacyHotelMutation(
|
|
staff,
|
|
"radio.rank.create",
|
|
rankInput(formData),
|
|
);
|
|
revalidatePath("/admin/radio/ranks");
|
|
}
|
|
|
|
export async function updateRadioRank(formData: FormData): Promise<void> {
|
|
const staff = await actor();
|
|
await executeLegacyHotelMutation(staff, "radio.rank.update", {
|
|
id: text(formData, "id"),
|
|
...rankInput(formData),
|
|
});
|
|
revalidatePath("/admin/radio/ranks");
|
|
}
|
|
|
|
export async function deleteRadioRank(formData: FormData): Promise<void> {
|
|
const staff = await actor();
|
|
await executeLegacyHotelMutation(staff, "radio.rank.delete", {
|
|
id: text(formData, "id"),
|
|
});
|
|
revalidatePath("/admin/radio/ranks");
|
|
}
|