xk/backend/routes/config.js
2026-02-02 20:51:52 +08:00

140 lines
3.4 KiB
JavaScript

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;