first commit

This commit is contained in:
2025-11-26 07:49:54 +00:00
commit d8685ccf10
468 changed files with 41346 additions and 0 deletions
+49
View File
@@ -0,0 +1,49 @@
import fs from 'fs/promises'
import path from 'path'
export default defineEventHandler(async (event) => {
try {
const { menuId, reference } = await readBody<{
menuId: string
reference: string
}>(event)
if (!menuId || !reference) {
throw createError({
statusCode: 400,
statusMessage: 'MenuId and reference are required'
})
}
const filePath = path.join(process.cwd(), 'matdash', 'data', 'menus.json')
const fileContent = await fs.readFile(filePath, 'utf-8')
const data = JSON.parse(fileContent)
// Remove menu item and its children recursively
const removeMenuItem = (items: any[], id: string): any[] => {
return items.filter(item => {
if (item.id === id) return false
if (item.children) {
item.children = removeMenuItem(item.children, id)
}
return true
})
}
data.menus = removeMenuItem(data.menus, menuId)
// Save updated data
await fs.writeFile(filePath, JSON.stringify(data, null, 2))
return {
success: true,
message: 'Menu deleted successfully'
}
} catch (error) {
console.error('Error deleting menu:', error)
throw createError({
statusCode: 500,
statusMessage: 'Failed to delete menu'
})
}
})
+34
View File
@@ -0,0 +1,34 @@
import fs from 'fs/promises'
import path from 'path'
export default defineEventHandler(async (event) => {
try {
const filePath = path.join(process.cwd(), 'matdash', 'data', 'menus.json')
// Check if file exists, create if not
try {
await fs.access(filePath)
} catch {
const defaultData = {
menus: [],
references: ["Referensi", "Main", "Admin"],
menuOptions: ["Select a menu", "Main Menu", "Side Menu", "Footer Menu"]
}
await fs.writeFile(filePath, JSON.stringify(defaultData, null, 2))
}
const fileContent = await fs.readFile(filePath, 'utf-8')
const data = JSON.parse(fileContent)
return {
success: true,
data
}
} catch (error) {
console.error('Error reading menus:', error)
throw createError({
statusCode: 500,
statusMessage: 'Failed to load menus'
})
}
})
+57
View File
@@ -0,0 +1,57 @@
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'
})
}
})