Add internal news system with role-based write permissions
This commit is contained in:
88
server/utils/news.js
Normal file
88
server/utils/news.js
Normal file
@@ -0,0 +1,88 @@
|
||||
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 = {
|
||||
id: `n${Date.now()}`,
|
||||
...newsData,
|
||||
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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user