3644e081b1
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
75 lines
2.7 KiB
TypeScript
75 lines
2.7 KiB
TypeScript
"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<ActionResult<{ id: string }>> {
|
|
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<ActionResult> {
|
|
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<ActionResult> {
|
|
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<ActionResult> {
|
|
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;
|
|
}
|