"use server"; import { revalidatePath, revalidateTag } from "next/cache"; import { ACCOUNTS_TAG, USERS_TAG, fetchApi } from "@/lib/api"; import type { AccUpdate, UserUpdate } from "@/lib/types"; export type ActionResult = { ok: true } | { ok: false; error: string }; // Each mutation evicts the matching tag so the next GET bypasses the // 30s data cache and re-reads from MySQL. revalidatePath then tells // Next.js to re-render the dependent route on the next request. export async function updateAccount(data: AccUpdate): Promise { try { await fetchApi("/update-acc-data", { method: "POST", body: data }); revalidateTag(ACCOUNTS_TAG); revalidatePath("/"); return { ok: true }; } catch (err) { return { ok: false, error: err instanceof Error ? err.message : String(err) }; } } export async function updateUser(data: UserUpdate): Promise { try { await fetchApi("/update-user-data", { method: "POST", body: data }); revalidateTag(USERS_TAG); revalidatePath("/users"); return { ok: true }; } catch (err) { return { ok: false, error: err instanceof Error ? err.message : String(err) }; } } export async function createAccount(data: AccUpdate): Promise { try { await fetchApi("/create-acc-data", { method: "POST", body: data }); revalidateTag(ACCOUNTS_TAG); revalidatePath("/"); return { ok: true }; } catch (err) { return { ok: false, error: err instanceof Error ? err.message : String(err) }; } } export async function createUser(data: UserUpdate): Promise { try { await fetchApi("/create-user-data", { method: "POST", body: data }); revalidateTag(USERS_TAG); revalidatePath("/users"); return { ok: true }; } catch (err) { return { ok: false, error: err instanceof Error ? err.message : String(err) }; } } export async function deleteAccount(username: string): Promise { try { await fetchApi("/delete-acc-data", { method: "POST", body: { username } }); revalidateTag(ACCOUNTS_TAG); revalidatePath("/"); return { ok: true }; } catch (err) { return { ok: false, error: err instanceof Error ? err.message : String(err) }; } } export async function deleteUser(f_username: string): Promise { try { await fetchApi("/delete-user-data", { method: "POST", body: { f_username } }); revalidateTag(USERS_TAG); revalidatePath("/users"); return { ok: true }; } catch (err) { return { ok: false, error: err instanceof Error ? err.message : String(err) }; } }