feat: add dynamic site settings, hero media, admin panels, and database integration
This commit is contained in:
@@ -0,0 +1,102 @@
|
||||
'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 });
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user