52 lines
2.2 KiB
JavaScript
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;
|