58 lines
1.5 KiB
TypeScript
58 lines
1.5 KiB
TypeScript
import fs from 'fs/promises'
|
|
import path from 'path'
|
|
import type { MenuItem } from '../../../types/menu'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
try {
|
|
const { menuItem, reference } = await readBody<{
|
|
menuItem: MenuItem
|
|
reference: string
|
|
}>(event)
|
|
|
|
if (!menuItem || !reference) {
|
|
throw createError({
|
|
statusCode: 400,
|
|
statusMessage: 'MenuItem and reference are required'
|
|
})
|
|
}
|
|
|
|
const filePath = path.join(process.cwd(), 'matdash', 'data', 'menus.json')
|
|
|
|
// Read current data
|
|
let data
|
|
try {
|
|
const fileContent = await fs.readFile(filePath, 'utf-8')
|
|
data = JSON.parse(fileContent)
|
|
} catch {
|
|
data = { menus: [], references: [], menuOptions: [] }
|
|
}
|
|
|
|
// Update or add menu item
|
|
const existingIndex = data.menus.findIndex((item: MenuItem) => item.id === menuItem.id)
|
|
|
|
if (existingIndex >= 0) {
|
|
data.menus[existingIndex] = { ...menuItem, updatedAt: new Date().toISOString() }
|
|
} else {
|
|
data.menus.push({
|
|
...menuItem,
|
|
createdAt: new Date().toISOString(),
|
|
updatedAt: new Date().toISOString()
|
|
})
|
|
}
|
|
|
|
// Save to file
|
|
await fs.writeFile(filePath, JSON.stringify(data, null, 2))
|
|
|
|
return {
|
|
success: true,
|
|
data: menuItem
|
|
}
|
|
} catch (error) {
|
|
console.error('Error saving menu:', error)
|
|
throw createError({
|
|
statusCode: 500,
|
|
statusMessage: 'Failed to save menu'
|
|
})
|
|
}
|
|
})
|