Track download progress in layaService (bytes/total, phase, error state) and expose it through the laya status route. Render a progress bar during model download in Settings via a layaStatusPresentation service, and display download/status errors inline instead of failing silently. Cover progress tracking and status presentation with tests. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
43 lines
1.2 KiB
JavaScript
43 lines
1.2 KiB
JavaScript
const express = require('express');
|
|
const { requireAuth, requireAdmin } = require('../auth');
|
|
const { LayaRequestError, LayaService } = require('../services/layaService');
|
|
|
|
const router = express.Router();
|
|
const laya = new LayaService();
|
|
|
|
function sendError(res, error) {
|
|
const status = error instanceof LayaRequestError ? error.statusCode : 500;
|
|
const message = error instanceof LayaRequestError ? error.message : 'Internal server error';
|
|
res.status(status).json({ runtimeAvailable: false, error: message });
|
|
}
|
|
|
|
router.get('/status', requireAuth, async (req, res) => {
|
|
res.json(await laya.status());
|
|
});
|
|
|
|
router.post('/model/download', requireAuth, requireAdmin, async (req, res) => {
|
|
try {
|
|
res.status(202).json(laya.startModelDownload(req.body?.model));
|
|
} catch (error) {
|
|
sendError(res, error);
|
|
}
|
|
});
|
|
|
|
router.delete('/model', requireAuth, requireAdmin, async (req, res) => {
|
|
try {
|
|
res.json(await laya.deleteModel());
|
|
} catch (error) {
|
|
sendError(res, error);
|
|
}
|
|
});
|
|
|
|
router.post('/language/batch', requireAuth, async (req, res) => {
|
|
try {
|
|
res.json(await laya.detectBatch(req.body));
|
|
} catch (error) {
|
|
sendError(res, error);
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|