/
Gipsogen
/
Projeckt
Обзор
Документация
Войти
/
Gipsogen
/
Projeckt
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
server.js
154 строки
5 KB
Giga-NT
first_commit
15 май 2026, 20:59
15 май 2026, 20:59
2a45878
Код
Авторство
О чём код?
const express = require('express'); const cors = require('cors'); const fs = require('fs').promises; const path = require('path'); const multer = require('multer'); const app = express(); const PORT = process.env.PORT || 3000; // Middleware app.use(cors()); app.use(express.json({ limit: '50mb' })); app.use(express.static('public')); // Папки для хранения const PROJECTS_DIR = path.join(__dirname, 'projects'); const UPLOADS_DIR = path.join(__dirname, 'uploads'); // Создаем папки если нет async function initDirs() { try { await fs.mkdir(PROJECTS_DIR, { recursive: true }); await fs.mkdir(UPLOADS_DIR, { recursive: true }); console.log('✅ Директории созданы'); } catch (err) { console.error('❌ Ошибка создания директорий:', err); } } // Настройка multer для загрузки файлов const storage = multer.diskStorage({ destination: (req, file, cb) => cb(null, UPLOADS_DIR), filename: (req, file, cb) => { const uniqueSuffix = Date.now() + '-' + Math.round(Math.random() * 1E9); cb(null, uniqueSuffix + path.extname(file.originalname)); } }); const upload = multer({ storage: storage }); // === API ROUTES === // Получить все проекты app.get('/api/projects', async (req, res) => { try { const files = await fs.readdir(PROJECTS_DIR); const projects = await Promise.all( files.map(async file => { const data = await fs.readFile(path.join(PROJECTS_DIR, file), 'utf8'); return JSON.parse(data); }) ); res.json(projects); } catch (err) { res.status(500).json({ error: err.message }); } }); // Сохранить проект app.post('/api/projects', async (req, res) => { try { const project = { id: Date.now().toString(), name: req.body.name || 'Без названия', created: new Date().toISOString(), updated: new Date().toISOString(), data: req.body.data }; const filePath = path.join(PROJECTS_DIR, `${project.id}.json`); await fs.writeFile(filePath, JSON.stringify(project, null, 2)); res.json({ success: true, project }); } catch (err) { res.status(500).json({ error: err.message }); } }); // Загрузить проект app.get('/api/projects/:id', async (req, res) => { try { const filePath = path.join(PROJECTS_DIR, `${req.params.id}.json`); const data = await fs.readFile(filePath, 'utf8'); res.json(JSON.parse(data)); } catch (err) { res.status(404).json({ error: 'Проект не найден' }); } }); // Обновить проект app.put('/api/projects/:id', async (req, res) => { try { const filePath = path.join(PROJECTS_DIR, `${req.params.id}.json`); const existing = JSON.parse(await fs.readFile(filePath, 'utf8')); const updated = { ...existing, ...req.body, updated: new Date().toISOString(), data: req.body.data || existing.data }; await fs.writeFile(filePath, JSON.stringify(updated, null, 2)); res.json({ success: true, project: updated }); } catch (err) { res.status(500).json({ error: err.message }); } }); // Удалить проект app.delete('/api/projects/:id', async (req, res) => { try { const filePath = path.join(PROJECTS_DIR, `${req.params.id}.json`); await fs.unlink(filePath); res.json({ success: true }); } catch (err) { res.status(500).json({ error: err.message }); } }); // Загрузка файла (текстуры, модели) app.post('/api/upload', upload.single('file'), (req, res) => { if (!req.file) { return res.status(400).json({ error: 'Файл не загружен' }); } res.json({ success: true, filename: req.file.filename, path: `/uploads/${req.file.filename}` }); }); // Экспорт в GLB (заглушка - в реальности здесь обработка Three.js) app.post('/api/export/glb', async (req, res) => { try { // Здесь можно добавить генерацию GLB на сервере // пока возвращаем успех res.json({ success: true, message: 'Экспорт выполнен', downloadUrl: `/downloads/${Date.now()}.glb` }); } catch (err) { res.status(500).json({ error: err.message }); } }); // Инициализация и запуск initDirs().then(() => { app.listen(PORT, () => { console.log(`🚀 Сервер запущен на http://localhost:${PORT}`); console.log(`📁 Проекты: ${PROJECTS_DIR}`); console.log(`📤 Загрузки: ${UPLOADS_DIR}`); }); });