const express = require('express'); const router = express.Router(); const path = require('path'); const fs = require('fs').promises; const db = require('../config/database'); const { requireAuth } = require('../middleware/auth'); // Get storage configuration router.get('/storage', requireAuth, async (req, res) => { try { const [settings] = await db.query( 'SELECT * FROM system_settings WHERE setting_key LIKE "logo%"' ); const config = {}; settings.forEach(setting => { config[setting.setting_key] = setting.setting_value; }); // Check directory status const uploadDir = path.join(__dirname, '../../', config.logo_upload_dir || 'img/logo'); let dirStatus = { exists: false, writable: false, path: config.logo_upload_dir || 'img/logo' }; try { await fs.access(uploadDir, fs.constants.F_OK); dirStatus.exists = true; await fs.access(uploadDir, fs.constants.W_OK); dirStatus.writable = true; } catch (err) { // Directory doesn't exist or not writable } res.json({ success: true, data: { config, dirStatus } }); } catch (error) { console.error('Get storage config error:', error); res.status(500).json({ success: false, message: 'Failed to fetch storage configuration' }); } }); // Update storage configuration router.put('/storage', requireAuth, async (req, res) => { try { const { logo_upload_dir, logo_max_size, allowed_extensions } = req.body; if (logo_upload_dir) { await db.query( 'UPDATE system_settings SET setting_value = ? WHERE setting_key = ?', [logo_upload_dir, 'logo_upload_dir'] ); } if (logo_max_size) { await db.query( 'UPDATE system_settings SET setting_value = ? WHERE setting_key = ?', [logo_max_size, 'logo_max_size'] ); } if (allowed_extensions) { await db.query( 'UPDATE system_settings SET setting_value = ? WHERE setting_key = ?', [allowed_extensions, 'allowed_extensions'] ); } res.json({ success: true, message: 'Storage configuration updated successfully' }); } catch (error) { console.error('Update storage config error:', error); res.status(500).json({ success: false, message: 'Failed to update storage configuration' }); } }); // Create upload directory router.post('/storage/create-dir', requireAuth, async (req, res) => { try { const { dirPath } = req.body; if (!dirPath) { return res.status(400).json({ success: false, message: 'Directory path is required' }); } const fullPath = path.join(__dirname, '../../', dirPath); await fs.mkdir(fullPath, { recursive: true }); res.json({ success: true, message: 'Directory created successfully' }); } catch (error) { console.error('Create directory error:', error); res.status(500).json({ success: false, message: 'Failed to create directory' }); } }); // Get all system settings router.get('/settings', requireAuth, async (req, res) => { try { const [settings] = await db.query('SELECT * FROM system_settings'); res.json({ success: true, data: settings }); } catch (error) { console.error('Get settings error:', error); res.status(500).json({ success: false, message: 'Failed to fetch settings' }); } }); module.exports = router;