89 lines
2.1 KiB
JavaScript
89 lines
2.1 KiB
JavaScript
import { promises as fs } from 'fs'
|
|
import path from 'path'
|
|
|
|
// Handle both dev and production paths
|
|
const getDataPath = (filename) => {
|
|
const cwd = process.cwd()
|
|
|
|
// In production (.output/server), working dir is .output
|
|
if (cwd.endsWith('.output')) {
|
|
return path.join(cwd, '../server/data', filename)
|
|
}
|
|
|
|
// In development, working dir is project root
|
|
return path.join(cwd, 'server/data', filename)
|
|
}
|
|
|
|
const NEWS_FILE = getDataPath('news.json')
|
|
|
|
// Read news from file
|
|
export async function readNews() {
|
|
try {
|
|
const data = await fs.readFile(NEWS_FILE, 'utf-8')
|
|
return JSON.parse(data)
|
|
} catch (error) {
|
|
if (error.code === 'ENOENT') {
|
|
return []
|
|
}
|
|
console.error('Fehler beim Lesen der News:', error)
|
|
return []
|
|
}
|
|
}
|
|
|
|
// Write news to file
|
|
export async function writeNews(news) {
|
|
try {
|
|
await fs.writeFile(NEWS_FILE, JSON.stringify(news, null, 2), 'utf-8')
|
|
return true
|
|
} catch (error) {
|
|
console.error('Fehler beim Schreiben der News:', error)
|
|
return false
|
|
}
|
|
}
|
|
|
|
// Get news by ID
|
|
export async function getNewsById(id) {
|
|
const news = await readNews()
|
|
return news.find(n => n.id === id)
|
|
}
|
|
|
|
// Add or update news
|
|
export async function saveNews(newsData) {
|
|
const newsList = await readNews()
|
|
|
|
if (newsData.id) {
|
|
// Update existing
|
|
const index = newsList.findIndex(n => n.id === newsData.id)
|
|
if (index !== -1) {
|
|
newsList[index] = {
|
|
...newsList[index],
|
|
...newsData,
|
|
updated: new Date().toISOString()
|
|
}
|
|
} else {
|
|
throw new Error('News nicht gefunden')
|
|
}
|
|
} else {
|
|
// Add new
|
|
const newItem = {
|
|
...newsData,
|
|
id: `n${Date.now()}`, // ID must come AFTER ...newsData to not be overwritten
|
|
created: new Date().toISOString(),
|
|
updated: new Date().toISOString()
|
|
}
|
|
newsList.unshift(newItem) // Add to beginning
|
|
}
|
|
|
|
await writeNews(newsList)
|
|
return true
|
|
}
|
|
|
|
// Delete news
|
|
export async function deleteNews(id) {
|
|
const newsList = await readNews()
|
|
const filtered = newsList.filter(n => n.id !== id)
|
|
await writeNews(filtered)
|
|
return true
|
|
}
|
|
|