75 lines
2.1 KiB
JavaScript
Raw Normal View History

/**
* 记忆 读写 · /brain/memory
*/
const { Router } = require('express');
const crypto = require('crypto');
const router = Router();
// GET /brain/memory - 查询记忆支持persona_id和type过滤
router.get('/', (req, res) => {
try {
let sql = 'SELECT * FROM persona_memory WHERE 1=1';
const params = [];
if (req.query.persona_id) {
sql += ' AND persona_id = ?';
params.push(req.query.persona_id);
}
if (req.query.type) {
sql += ' AND type = ?';
params.push(req.query.type);
}
sql += ' ORDER BY timestamp DESC';
const rows = req.db.prepare(sql).all(...params);
const parsed = rows.map(parseJsonFields);
res.json({ data: parsed, total: parsed.length });
} catch (err) {
res.status(500).json({ error: true, message: err.message });
}
});
// POST /brain/memory - 写入新记忆
router.post('/', (req, res) => {
try {
const { persona_id, type, title, content, importance,
related_dev, related_broadcast, tags, timestamp } = req.body;
if (!persona_id || !type || !title || !content || !importance || !timestamp) {
return res.status(400).json({
error: true,
message: 'Missing required fields: persona_id, type, title, content, importance, timestamp'
});
}
const memory_id = `MEM-${Date.now()}-${crypto.randomBytes(4).toString('hex')}`;
req.db.prepare(`
INSERT INTO persona_memory
(memory_id, persona_id, type, title, content, importance,
related_dev, related_broadcast, tags, timestamp)
VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)
`).run(
memory_id, persona_id, type, title, content, importance,
related_dev || null, related_broadcast || null,
tags ? JSON.stringify(tags) : null, timestamp
);
res.status(201).json({ data: { memory_id }, message: 'Memory created' });
} catch (err) {
res.status(500).json({ error: true, message: err.message });
}
});
function parseJsonFields(row) {
const result = { ...row };
if (result.tags) {
try { result.tags = JSON.parse(result.tags); } catch (_e) { /* keep raw */ }
}
return result;
}
module.exports = router;