114 lines
2.4 KiB
JavaScript
Raw Normal View History

/**
* 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;