Files

115 lines
3.0 KiB
TypeScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
"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<UserActionState> {
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<UserActionState> {
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." };
}
}