32 lines
1.1 KiB
JavaScript
Executable File
32 lines
1.1 KiB
JavaScript
Executable File
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;
|