140 lines
3.4 KiB
JavaScript
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;
|