114 lines
2.4 KiB
JavaScript
114 lines
2.4 KiB
JavaScript
/**
|
|
* M-PALACE · 存档/读档 API
|
|
* POST /api/palace/save → 保存当前状态
|
|
* POST /api/palace/load → 读取存档
|
|
* GET /api/palace/saves → 列出所有存档
|
|
*/
|
|
|
|
const express = require('express');
|
|
const router = express.Router();
|
|
const saveManager = require('../engines/save-manager');
|
|
|
|
/**
|
|
* POST /api/palace/save
|
|
* body: { save_id, state, persona, history }
|
|
*/
|
|
router.post('/', function (req, res) {
|
|
try {
|
|
var body = req.body || {};
|
|
var saveId = body.save_id;
|
|
var state = body.state;
|
|
var persona = body.persona;
|
|
var history = body.history;
|
|
|
|
if (!state || !persona || !history) {
|
|
return res.status(400).json({
|
|
error: true,
|
|
code: 'MISSING_DATA',
|
|
message: '缺少存档数据'
|
|
});
|
|
}
|
|
|
|
var resultId = saveManager.save(state, persona, history, saveId);
|
|
|
|
res.json({
|
|
error: false,
|
|
save_id: resultId,
|
|
message: '存档成功',
|
|
saved_at: new Date().toISOString()
|
|
});
|
|
} catch (err) {
|
|
res.status(500).json({
|
|
error: true,
|
|
code: 'SAVE_ERROR',
|
|
message: '存档失败:' + err.message
|
|
});
|
|
}
|
|
});
|
|
|
|
/**
|
|
* POST /api/palace/load
|
|
* body: { save_id: "PAL-XXXXXXXX-XXXX" }
|
|
*/
|
|
router.post('/load', function (req, res) {
|
|
try {
|
|
var body = req.body || {};
|
|
var saveId = body.save_id;
|
|
|
|
if (!saveId) {
|
|
return res.status(400).json({
|
|
error: true,
|
|
code: 'MISSING_SAVE_ID',
|
|
message: '请输入存档编号'
|
|
});
|
|
}
|
|
|
|
var saveData = saveManager.load(saveId);
|
|
|
|
if (!saveData) {
|
|
return res.status(404).json({
|
|
error: true,
|
|
code: 'SAVE_NOT_FOUND',
|
|
message: '存档不存在:' + saveId
|
|
});
|
|
}
|
|
|
|
res.json({
|
|
error: false,
|
|
save_id: saveId,
|
|
state: saveData.state,
|
|
persona: saveData.persona,
|
|
history: saveData.history,
|
|
meta: saveData.meta
|
|
});
|
|
} catch (err) {
|
|
res.status(500).json({
|
|
error: true,
|
|
code: 'LOAD_ERROR',
|
|
message: '读档失败:' + err.message
|
|
});
|
|
}
|
|
});
|
|
|
|
/**
|
|
* GET /api/palace/saves
|
|
*/
|
|
router.get('/list', function (_req, res) {
|
|
try {
|
|
var saves = saveManager.listSaves();
|
|
res.json({
|
|
error: false,
|
|
saves: saves,
|
|
count: saves.length
|
|
});
|
|
} catch (err) {
|
|
res.status(500).json({
|
|
error: true,
|
|
code: 'LIST_ERROR',
|
|
message: '获取存档列表失败:' + err.message
|
|
});
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|