"use server"; import prisma from "@/lib/prisma"; import bcrypt from "bcryptjs"; import { revalidatePath } from "next/cache"; export type UserActionState = { success?: boolean; message?: string; } | null; export async function getUsers() { return await prisma.user.findMany({ select: { id: true, username: true, createdAt: true, updatedAt: true, }, orderBy: { createdAt: 'desc' } }); } export async function createUser(prevState: UserActionState, formData: FormData): Promise { const username = formData.get("username") as string; const password = formData.get("password") as string; if (!username || !password) { return { success: false, message: "Kullanıcı adı ve şifre gereklidir." }; } try { const existingUser = await prisma.user.findUnique({ where: { username } }); if (existingUser) { return { success: false, message: "Bu kullanıcı adı zaten kullanılıyor." }; } const hashedPassword = await bcrypt.hash(password, 10); await prisma.user.create({ data: { username, password: hashedPassword, } }); revalidatePath("/admin/users"); return { success: true, message: "Kullanıcı başarıyla oluşturuldu." }; } catch (error) { return { success: false, message: "Kullanıcı oluşturulurken bir hata oluştu." }; } } export async function updateUser(prevState: UserActionState, formData: FormData): Promise { const idStr = formData.get("id") as string; const username = formData.get("username") as string; const password = formData.get("password") as string; // Optional during update if (!idStr || !username) { return { success: false, message: "Kullanıcı adı gereklidir." }; } const id = parseInt(idStr, 10); try { const existingUser = await prisma.user.findUnique({ where: { username } }); if (existingUser && existingUser.id !== id) { return { success: false, message: "Bu kullanıcı adı zaten kullanılıyor." }; } const dataToUpdate: any = { username }; if (password) { dataToUpdate.password = await bcrypt.hash(password, 10); } await prisma.user.update({ where: { id }, data: dataToUpdate, }); revalidatePath("/admin/users"); return { success: true, message: "Kullanıcı başarıyla güncellendi." }; } catch (error) { return { success: false, message: "Kullanıcı güncellenirken bir hata oluştu." }; } } export async function deleteUser(id: number) { try { const userCount = await prisma.user.count(); if (userCount <= 1) { return { success: false, message: "Sistemde en az bir yönetici bulunmalıdır. Bu kullanıcıyı silemezsiniz." }; } await prisma.user.delete({ where: { id } }); revalidatePath("/admin/users"); return { success: true, message: "Kullanıcı başarıyla silindi." }; } catch (error) { return { success: false, message: "Kullanıcı silinirken bir hata oluştu." }; } }