zhizhi/persona-brain-db/api/routes/memory.js

75 lines
2.1 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* 记忆 读写 · /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;