import prisma from '@/lib/prisma' export type LocalizedString = { tr: string; en: string } export type MenuItem = { id: string emoji?: string image?: string name: LocalizedString description?: LocalizedString price?: number highlight?: boolean } export type Category = { id: string emoji: string label: LocalizedString items: MenuItem[] } export const WHATSAPP_NUMBER = '905XXXXXXXXXX' export async function getCategories(): Promise { try { const categories = await prisma.category.findMany({ orderBy: { order: 'asc' }, include: { items: { orderBy: { order: 'asc' }, }, }, }) return categories.map((c) => ({ id: c.id, emoji: c.emoji, label: { tr: c.labelTr, en: c.labelEn }, items: c.items.map((i) => ({ id: i.id, emoji: i.emoji || undefined, image: i.image || undefined, name: { tr: i.nameTr, en: i.nameEn }, description: i.descriptionTr && i.descriptionEn ? { tr: i.descriptionTr, en: i.descriptionEn } : undefined, price: i.price !== null ? i.price : undefined, highlight: i.highlight, })), })) } catch (error) { console.error('Error reading from database:', error) return [] } } export async function saveCategories(categories: Category[]): Promise { try { await prisma.$transaction(async (tx) => { // 1. Delete all existing records (mimics overwriting the JSON file) await tx.menuItem.deleteMany() await tx.category.deleteMany() // 2. Insert new records for (let cIndex = 0; cIndex < categories.length; cIndex++) { const c = categories[cIndex] await tx.category.create({ data: { id: c.id, emoji: c.emoji, labelTr: c.label.tr, labelEn: c.label.en || c.label.tr, order: cIndex, }, }) for (let iIndex = 0; iIndex < c.items.length; iIndex++) { const i = c.items[iIndex] await tx.menuItem.create({ data: { id: i.id, categoryId: c.id, emoji: i.emoji || null, image: i.image || null, nameTr: i.name.tr, nameEn: i.name.en || i.name.tr, descriptionTr: i.description?.tr || null, descriptionEn: i.description?.en || null, price: i.price ?? null, highlight: i.highlight ?? false, order: iIndex, }, }) } } }) } catch (error) { console.error('Error saving to database:', error) throw new Error('Failed to save menu data to database') } }