feat: 支持编辑线路图署名并固定 CC BY 4.0
This commit is contained in:
+22
-2
@@ -8,6 +8,7 @@ const router = express.Router();
|
||||
|
||||
const ASSETS_DIR = path.join(__dirname, '../../Assets');
|
||||
const MANIFEST_PATH = path.join(ASSETS_DIR, 'manifest.json');
|
||||
const ROUTE_MAP_LICENSE = 'CC BY 4.0';
|
||||
|
||||
const getIp = (req) => (req.headers['x-forwarded-for'] || '').toString().split(',')[0].trim() || req.ip || req.connection?.remoteAddress || '';
|
||||
|
||||
@@ -48,6 +49,8 @@ const writeManifest = (m) => {
|
||||
fs.writeFileSync(MANIFEST_PATH, JSON.stringify(out, null, 2), 'utf8');
|
||||
};
|
||||
|
||||
const normalizeCredit = (value) => String(value || '').trim().slice(0, 200);
|
||||
|
||||
const removeByPrefix = (prefix) => {
|
||||
ensureDir(ASSETS_DIR);
|
||||
const list = fs.readdirSync(ASSETS_DIR);
|
||||
@@ -97,6 +100,8 @@ router.get('/manifest', (req, res) => {
|
||||
res.json({
|
||||
ok: true,
|
||||
routeMap,
|
||||
routeMapCredit: normalizeCredit(m.routeMapCredit || ''),
|
||||
routeMapLicense: ROUTE_MAP_LICENSE,
|
||||
fareTable,
|
||||
updatedAt: m.updatedAt || null
|
||||
});
|
||||
@@ -106,10 +111,24 @@ router.post('/route-map', uploadRouteMap.single('file'), (req, res) => {
|
||||
if (!req.file) return res.status(400).json({ ok: false, error: '缺少文件' });
|
||||
const m = readManifest();
|
||||
m.routeMap = path.basename(req.file.filename);
|
||||
if (req.body && Object.prototype.hasOwnProperty.call(req.body, 'credit')) {
|
||||
m.routeMapCredit = normalizeCredit(req.body.credit);
|
||||
} else if (typeof m.routeMapCredit !== 'string') {
|
||||
m.routeMapCredit = '';
|
||||
}
|
||||
m.updatedAt = Date.now();
|
||||
writeManifest(m);
|
||||
appendReqLog(req, { category: 'admin', type: 'asset_upload_route_map', detail: { file: m.routeMap } });
|
||||
res.json({ ok: true, routeMap: m.routeMap, updatedAt: m.updatedAt });
|
||||
appendReqLog(req, { category: 'admin', type: 'asset_upload_route_map', detail: { file: m.routeMap, credit: m.routeMapCredit || '' } });
|
||||
res.json({ ok: true, routeMap: m.routeMap, routeMapCredit: m.routeMapCredit || '', routeMapLicense: ROUTE_MAP_LICENSE, updatedAt: m.updatedAt });
|
||||
});
|
||||
|
||||
router.post('/route-map/credit', (req, res) => {
|
||||
const m = readManifest();
|
||||
m.routeMapCredit = normalizeCredit(req.body?.credit);
|
||||
m.updatedAt = Date.now();
|
||||
writeManifest(m);
|
||||
appendReqLog(req, { category: 'admin', type: 'asset_update_route_map_credit', detail: { credit: m.routeMapCredit || '' } });
|
||||
res.json({ ok: true, routeMapCredit: m.routeMapCredit || '', routeMapLicense: ROUTE_MAP_LICENSE, updatedAt: m.updatedAt });
|
||||
});
|
||||
|
||||
router.post('/fare-table', uploadFareTable.single('file'), (req, res) => {
|
||||
@@ -129,6 +148,7 @@ router.delete('/route-map', (req, res) => {
|
||||
}
|
||||
removeByPrefix('route-map');
|
||||
m.routeMap = null;
|
||||
m.routeMapCredit = '';
|
||||
m.updatedAt = Date.now();
|
||||
writeManifest(m);
|
||||
appendReqLog(req, { category: 'admin', type: 'asset_delete_route_map', detail: { ok: true } });
|
||||
|
||||
Reference in New Issue
Block a user