Files
sts-avto-v2/modules/partners/index.js
kalugin66 11fb813a09
All checks were successful
Deploy sts / deploy-sber (push) Successful in 42s
модификация
2026-07-20 00:27:48 +05:00

52 lines
1.9 KiB
JavaScript

const { createCrudRoutes } = require('../database/crud');
const multer = require('multer');
const path = require('path');
const fs = require('fs');
const sharp = require('sharp');
let db;
function init(database) { db = database; }
function setupRoutes(app, auth) {
const uploadDir = path.join(__dirname, '..', '..', 'data', 'partner_images');
if (!fs.existsSync(uploadDir)) fs.mkdirSync(uploadDir, { recursive: true });
const storage = multer.diskStorage({
destination: uploadDir,
filename: (req, file, cb) => {
const ext = path.extname(file.originalname);
cb(null, 'prt_' + Date.now() + ext);
}
});
const upload = multer({
storage,
limits: { fileSize: 3 * 1024 * 1024 },
fileFilter: (req, file, cb) => {
const allowed = ['.jpg', '.jpeg', '.png', '.webp', '.svg'];
cb(null, allowed.includes(path.extname(file.originalname).toLowerCase()));
}
});
app.post('/api/admin/partners/upload', auth.authenticateToken, auth.requireAdmin, upload.single('image'), async (req, res) => {
if (!req.file) return res.status(400).json({ error: 'Файл не загружен' });
let fname = req.file.filename;
const ext = path.extname(fname).toLowerCase();
if (ext !== '.webp' && ext !== '.svg') {
try {
const webpName = path.basename(fname, ext) + '.webp';
await sharp(req.file.path).webp({ quality: 85 }).toFile(path.join(uploadDir, webpName));
fs.unlinkSync(req.file.path);
fname = webpName;
} catch (e) { console.error(e); }
}
res.json({ path: fname, url: `/data/partner_images/${fname}` });
});
createCrudRoutes(app, auth, 'partners', {
fields: ['name', 'logo_path', 'sort_order', 'is_active']
});
}
module.exports = { init, setupRoutes };