"use server"; import { revalidatePath } from "next/cache"; import { z } from "zod"; import { adminAddMember, adminCreateHousehold, adminRemoveMember, adminSetMemberRole, } from "@/features/households/service"; import { tr } from "@/i18n/tr"; import { fail, type ActionResult } from "@/lib/action-result"; import { getActionUser } from "@/lib/dal"; import { addMemberSchema, householdCreateSchema, householdRoleSchema, } from "@/shared/schemas/household"; /** Sistem admini: hane ve üyelik yönetimi. Hanenin finansal verisine dokunmaz. */ const PATH = "/admin/haneler"; const idSchema = z.string().regex(/^[a-f0-9]{24}$/i); export async function createHouseholdAction(input: unknown): Promise> { const admin = await getActionUser("admin"); if (!admin) return fail(tr.common.unauthorized); const parsed = householdCreateSchema.safeParse(input); if (!parsed.success) return fail(tr.adminUsers.errors.checkFields); const result = await adminCreateHousehold(admin.id, parsed.data); if (result.ok) revalidatePath("/", "layout"); return result; } export async function addMemberAction(householdId: unknown, input: unknown): Promise { const admin = await getActionUser("admin"); if (!admin) return fail(tr.common.unauthorized); const hid = idSchema.safeParse(householdId); const parsed = addMemberSchema.safeParse(input); if (!hid.success || !parsed.success) return fail(tr.adminUsers.errors.checkFields); const result = await adminAddMember(admin.id, hid.data, parsed.data); if (result.ok) revalidatePath("/", "layout"); return result; } export async function adminSetMemberRoleAction( householdId: unknown, userId: unknown, role: unknown, ): Promise { const admin = await getActionUser("admin"); if (!admin) return fail(tr.common.unauthorized); const hid = idSchema.safeParse(householdId); const uid = idSchema.safeParse(userId); const r = householdRoleSchema.safeParse(role); if (!hid.success || !uid.success || !r.success) return fail(tr.common.genericError); const result = await adminSetMemberRole(admin.id, hid.data, uid.data, r.data); if (result.ok) revalidatePath(PATH); return result; } export async function adminRemoveMemberAction( householdId: unknown, userId: unknown, ): Promise { const admin = await getActionUser("admin"); if (!admin) return fail(tr.common.unauthorized); const hid = idSchema.safeParse(householdId); const uid = idSchema.safeParse(userId); if (!hid.success || !uid.success) return fail(tr.common.genericError); const result = await adminRemoveMember(admin.id, hid.data, uid.data); if (result.ok) revalidatePath("/", "layout"); return result; }