sandbox/server/routes/lorebooks.js

52 lines
2.2 KiB
JavaScript

import { Router } from 'express';
import { v4 as uuidv4 } from 'uuid';
import db from '../db.js';
import { authenticateToken } from '../middleware/auth.js';
const router = Router();
router.get('/', authenticateToken, (req, res) => {
const lorebooks = db.prepare('SELECT * FROM lorebooks WHERE user_id = ? ORDER BY updated_at DESC').all(req.userId);
res.json({ lorebooks });
});
router.post('/', authenticateToken, (req, res) => {
const { name, description } = req.body;
if (!name) return res.status(400).json({ error: 'Name is required' });
const id = uuidv4();
db.prepare('INSERT INTO lorebooks (id, user_id, name, description) VALUES (?, ?, ?, ?)').run(id, req.userId, name, description || '');
const lorebook = db.prepare('SELECT * FROM lorebooks WHERE id = ?').get(id);
res.status(201).json({ lorebook });
});
router.get('/:id', authenticateToken, (req, res) => {
const lorebook = db.prepare('SELECT * FROM lorebooks WHERE id = ? AND user_id = ?').get(req.params.id, req.userId);
if (!lorebook) return res.status(404).json({ error: 'Lorebook not found' });
const fragments = db.prepare('SELECT * FROM fragments WHERE lorebook_id = ? ORDER BY created_at DESC').all(req.params.id);
res.json({ lorebook, fragments });
});
router.put('/:id', authenticateToken, (req, res) => {
const { name, description } = req.body;
const existing = db.prepare('SELECT * FROM lorebooks WHERE id = ? AND user_id = ?').get(req.params.id, req.userId);
if (!existing) return res.status(404).json({ error: 'Lorebook not found' });
db.prepare('UPDATE lorebooks SET name = ?, description = ?, updated_at = datetime(\'now\') WHERE id = ?')
.run(name || existing.name, description !== undefined ? description : existing.description, req.params.id);
const lorebook = db.prepare('SELECT * FROM lorebooks WHERE id = ?').get(req.params.id);
res.json({ lorebook });
});
router.delete('/:id', authenticateToken, (req, res) => {
const existing = db.prepare('SELECT * FROM lorebooks WHERE id = ? AND user_id = ?').get(req.params.id, req.userId);
if (!existing) return res.status(404).json({ error: 'Lorebook not found' });
db.prepare('DELETE FROM lorebooks WHERE id = ?').run(req.params.id);
res.json({ message: 'Lorebook deleted' });
});
export default router;