75 lines
2.1 KiB
JavaScript
75 lines
2.1 KiB
JavaScript
/**
|
||
* 记忆 读写 · /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;
|