import express from 'express'; import path from 'path'; import { getOptimizedModelPath } from '../services/modelsProxyService.js'; const router = express.Router(); /** * GET /api/models/3d/falukant/characters/:filename * Liefert die Draco-optimierte GLB-Datei (aus Cache oder nach Optimierung). */ router.get('/3d/falukant/characters/:filename', async (req, res) => { const { filename } = req.params; try { const cachePath = await getOptimizedModelPath(filename); res.setHeader('Content-Type', 'model/gltf-binary'); // GLB files can be replaced under the same filename during an asset deploy. // Revalidate cached copies so clients receive a changed mesh without needing // to clear their browser cache. res.setHeader('Cache-Control', 'public, max-age=0, must-revalidate'); res.sendFile(cachePath); } catch (e) { if (e.message?.includes('Invalid model filename') || e.message?.includes('not found')) { return res.status(404).send(e.message); } console.error('[models-proxy]', e.message); res.status(500).send('Model optimization failed'); } }); export default router;