"use server"; import { NavItems, navItemsDeleteSchema, NavItemsInsert, navItemsInsertSchema, navItemsUpdateSchema, } from "@/src/applications/entities/models/nav-items.model"; import { NavItemsRepository } from "@/src/applications/repositories/nav-items.repository"; import { NavItemsRepositoryImpl } from "@/src/infrastructure/repositories/nav-items.repository.impl"; import { revalidatePath } from "next/cache"; import { z } from "zod"; // Initialize repository const navItemsRepo: NavItemsRepository = new NavItemsRepositoryImpl(); /** * Get all navigation items */ export async function getNavItems() { return await navItemsRepo.getNavItems(); } /** * Create a new navigation item */ export async function createNavItem( formData: FormData | Record ) { try { const data = formData instanceof FormData ? Object.fromEntries(formData.entries()) : formData; // Parse and validate input data const validatedData = navItemsInsertSchema.parse(data); // Call repository method (assuming it exists) const result = await navItemsRepo.createNavItems(validatedData); // Revalidate cache if successful if (result.success) { revalidatePath("/admin/navigation"); } return result; } catch (error) { if (error instanceof z.ZodError) { return { success: false, errors: error.errors.reduce( (acc, curr) => { acc[curr.path.join(".")] = curr.message; return acc; }, {} as Record ), message: "Validation failed", }; } return { success: false, error: "Failed to create navigation item", message: error instanceof Error ? error.message : "Unknown error occurred", }; } } /** * Update an existing navigation item */ export async function updateNavItem( id: string, formData: FormData | Record ) { try { const data = formData instanceof FormData ? Object.fromEntries(formData.entries()) : formData; // Parse and validate input data const validatedData = navItemsUpdateSchema.parse(data); // Call repository method (assuming it exists) const result = await navItemsRepo.updateNavItems(id, validatedData); // Revalidate cache if successful if (result.success) { revalidatePath("/admin/navigation"); } return result; } catch (error) { if (error instanceof z.ZodError) { return { success: false, errors: error.errors.reduce( (acc, curr) => { acc[curr.path.join(".")] = curr.message; return acc; }, {} as Record ), message: "Validation failed", }; } return { success: false, error: "Failed to update navigation item", message: error instanceof Error ? error.message : "Unknown error occurred", }; } } /** * Delete a navigation item */ export async function deleteNavItem(id: string) { try { // Parse and validate input const validatedData = navItemsDeleteSchema.parse({ id }); // Call repository method (assuming it exists) const result = await navItemsRepo.deleteNavItems(validatedData.id); // Revalidate cache if successful if (result.success) { revalidatePath("/admin/navigation"); } return result; } catch (error) { if (error instanceof z.ZodError) { return { success: false, errors: error.errors.reduce( (acc, curr) => { acc[curr.path.join(".")] = curr.message; return acc; }, {} as Record ), message: "Validation failed", }; } return { success: false, error: "Failed to delete navigation item", message: error instanceof Error ? error.message : "Unknown error occurred", }; } } // /** // * Toggle active status of a navigation item // */ // export async function toggleNavItemActive(id: string) { // try { // // Call repository method (assuming it exists) // const result = await navItemsRepo.toggleActive(id); // // Revalidate cache if successful // if (result.success) { // revalidatePath("/admin/navigation"); // } // return result; // } catch (error) { // return { // success: false, // error: "Failed to toggle navigation item status", // message: // error instanceof Error ? error.message : "Unknown error occurred", // }; // } // } // /** // * Update navigation items order // */ // export async function updateNavItemsOrder( // items: { id: string; order_seq: number }[] // ) { // try { // // Call repository method (assuming it exists) // const result = await navItemsRepo.updateOrder(items); // // Revalidate cache if successful // if (result.success) { // revalidatePath("/admin/navigation"); // } // return result; // } catch (error) { // return { // success: false, // error: "Failed to update navigation order", // message: // error instanceof Error ? error.message : "Unknown error occurred", // }; // } // }