Files
moybeach-main/app/admin/actions.ts
T

103 lines
2.6 KiB
TypeScript
Raw 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/db';
import { createSession, deleteSession } from '@/lib/auth';
import bcrypt from 'bcryptjs';
// Auth Actions
export async function login(formData: FormData) {
const username = formData.get('username') as string;
const password = formData.get('password') as string;
if (!username || !password) {
return { error: 'Kullanıcı adı ve şifre zorunludur' };
}
const user = await prisma.user.findUnique({ where: { username } });
if (!user) {
return { error: 'Hatalı kullanıcı adı veya şifre' };
}
const isValid = await bcrypt.compare(password, user.password);
if (!isValid) {
return { error: 'Hatalı kullanıcı adı veya şifre' };
}
await createSession(user.id);
return { success: true };
}
export async function logout() {
await deleteSession();
}
// Contact Actions
export async function markContactAsRead(id: string) {
await prisma.contactMessage.update({
where: { id },
data: { isRead: true }
});
}
export async function deleteContact(id: string) {
await prisma.contactMessage.delete({ where: { id } });
}
// Gallery Actions
export async function addGalleryItem(data: { title: string, category: string, imageUrl: string }) {
await prisma.gallery.create({ data });
}
export async function deleteGalleryItem(id: string) {
await prisma.gallery.delete({ where: { id } });
}
// Service Actions
export async function addServiceItem(data: { title: string, description: string, iconUrl?: string }) {
await prisma.service.create({ data });
}
export async function deleteServiceItem(id: string) {
await prisma.service.delete({ where: { id } });
}
export async function updateServiceItem(id: string, data: { title: string, description: string, iconUrl?: string }) {
await prisma.service.update({
where: { id },
data
});
}
// Hero Actions
export async function updateHeroMedia(url: string, type: string) {
// We only want one hero media. We can delete all and create a new one.
await prisma.heroMedia.deleteMany({});
await prisma.heroMedia.create({
data: { url, type }
});
}
// Site Settings Actions
export async function updateSiteSettings(data: {
logoUrl?: string;
phone?: string;
email?: string;
addressText1?: string;
addressText2?: string;
workingHours?: string;
instagramUrl?: string;
facebookUrl?: string;
youtubeUrl?: string;
whatsappNumber?: string;
}) {
const existing = await prisma.siteSettings.findFirst();
if (existing) {
await prisma.siteSettings.update({
where: { id: existing.id },
data
});
} else {
await prisma.siteSettings.create({ data });
}
}