49 lines
1.7 KiB
TypeScript
49 lines
1.7 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";
|
|
|
|
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());
|
|
}
|
|
|
|
export async function createTrack(formData: FormData): Promise<void> {
|
|
const staff = await requirePermission(PERMS.RADIO_EDIT);
|
|
const duration = text(formData, "duration");
|
|
await executeLegacyHotelMutation(staff, "radio.autodj.create", {
|
|
title: text(formData, "title"),
|
|
artist: text(formData, "artist") || undefined,
|
|
album: text(formData, "album") || undefined,
|
|
artworkUrl: text(formData, "artworkUrl") || undefined,
|
|
duration: duration ? Number(duration) : null,
|
|
sortOrder: Number(text(formData, "sortOrder") || 0),
|
|
isActive: enabled(formData, "isActive"),
|
|
});
|
|
revalidatePath("/admin/radio/autodj");
|
|
}
|
|
|
|
export async function toggleTrack(formData: FormData): Promise<void> {
|
|
const staff = await requirePermission(PERMS.RADIO_EDIT);
|
|
await executeLegacyHotelMutation(staff, "radio.autodj.toggle", {
|
|
id: text(formData, "id"),
|
|
isActive: enabled(formData, "isActive"),
|
|
});
|
|
revalidatePath("/admin/radio/autodj");
|
|
}
|
|
|
|
export async function deleteTrack(formData: FormData): Promise<void> {
|
|
const staff = await requirePermission(PERMS.RADIO_EDIT);
|
|
await executeLegacyHotelMutation(staff, "radio.autodj.delete", {
|
|
id: text(formData, "id"),
|
|
});
|
|
revalidatePath("/admin/radio/autodj");
|
|
}
|