/** * Settings Routes * Handles logo upload and settings */ const express = require('express'); const router = express.Router(); const multer = require('multer'); const path = require('path'); const fs = require('fs').promises; const { pool } = require('../config/database'); // Configure multer for logo upload const storage = multer.diskStorage({ destination: async (req, file, cb) => { const uploadDir = path.join(__dirname, '..', '..', 'public', 'uploads'); try { await fs.mkdir(uploadDir, { recursive: true }); } catch (err) { console.error('Error creating upload directory:', err); } cb(null, uploadDir); }, filename: (req, file, cb) => { cb(null, 'company-logo.png'); } }); const upload = multer({ storage: storage, limits: { fileSize: 5 * 1024 * 1024 }, fileFilter: (req, file, cb) => { if (file.mimetype.startsWith('image/')) { cb(null, true); } else { cb(new Error('Only image files are allowed')); } } }); // GET logo info router.get('/logo-info', async (req, res) => { try { const logoPath = path.join(__dirname, '..', '..', 'public', 'uploads', 'company-logo.png'); try { await fs.access(logoPath); res.json({ hasLogo: true, logoPath: '/uploads/company-logo.png' }); } catch { res.json({ hasLogo: false }); } } catch (error) { console.error('Error checking logo:', error); res.status(500).json({ error: 'Error checking logo' }); } }); // POST upload logo router.post('/upload-logo', upload.single('logo'), async (req, res) => { try { if (!req.file) { return res.status(400).json({ error: 'No file uploaded' }); } res.json({ message: 'Logo uploaded successfully', path: '/uploads/company-logo.png' }); } catch (error) { console.error('Upload error:', error); res.status(500).json({ error: 'Error uploading logo' }); } }); // GET /api/settings/:key — liefert einen einzelnen Settings-Wert router.get('/:key', async (req, res) => { try { const result = await pool.query( 'SELECT value FROM settings WHERE key = $1', [req.params.key] ); if (result.rows.length === 0) { return res.json({ key: req.params.key, value: null }); } res.json({ key: req.params.key, value: result.rows[0].value }); } catch (error) { console.error('Error fetching setting:', error); res.status(500).json({ error: 'Error fetching setting' }); } }); // PUT /api/settings/:key — setzt einen Settings-Wert (upsert) router.put('/:key', express.json(), async (req, res) => { const { value } = req.body; if (typeof value !== 'string') { return res.status(400).json({ error: 'value must be a string' }); } try { await pool.query( `INSERT INTO settings (key, value) VALUES ($1, $2) ON CONFLICT (key) DO UPDATE SET value = EXCLUDED.value`, [req.params.key, value] ); res.json({ success: true, key: req.params.key, value }); } catch (error) { console.error('Error saving setting:', error); res.status(500).json({ error: 'Error saving setting' }); } }); module.exports = router;