87 lines
2.8 KiB
JavaScript
87 lines
2.8 KiB
JavaScript
const express = require('express');
|
|
const crypto = require('crypto');
|
|
const db = require('../db');
|
|
const router = express.Router();
|
|
|
|
router.get('/', (req, res) => {
|
|
try {
|
|
const presets = db.prepare(
|
|
`SELECT * FROM prompt_presets
|
|
WHERE uid = ? OR is_default = 1
|
|
ORDER BY is_default DESC, title ASC`
|
|
).all(req.uid);
|
|
res.json(presets);
|
|
} catch (error) {
|
|
console.error('Failed to get presets:', error);
|
|
res.status(500).json({ error: 'Failed to retrieve presets' });
|
|
}
|
|
});
|
|
|
|
router.post('/', (req, res) => {
|
|
const { title, prompt } = req.body;
|
|
if (!title || !prompt) {
|
|
return res.status(400).json({ error: 'Title and prompt are required' });
|
|
}
|
|
|
|
const presetId = crypto.randomUUID();
|
|
const now = Math.floor(Date.now() / 1000);
|
|
|
|
try {
|
|
db.prepare(
|
|
`INSERT INTO prompt_presets (id, uid, title, prompt, is_default, created_at, sync_state)
|
|
VALUES (?, ?, ?, ?, 0, ?, 'dirty')`
|
|
).run(presetId, req.uid, title, prompt, now);
|
|
|
|
res.status(201).json({ id: presetId, message: 'Preset created successfully' });
|
|
} catch (error) {
|
|
console.error('Failed to create preset:', error);
|
|
res.status(500).json({ error: 'Failed to create preset' });
|
|
}
|
|
});
|
|
|
|
router.put('/:id', (req, res) => {
|
|
const { id } = req.params;
|
|
const { title, prompt } = req.body;
|
|
if (!title || !prompt) {
|
|
return res.status(400).json({ error: 'Title and prompt are required' });
|
|
}
|
|
|
|
try {
|
|
const result = db.prepare(
|
|
`UPDATE prompt_presets
|
|
SET title = ?, prompt = ?, sync_state = 'dirty'
|
|
WHERE id = ? AND uid = ? AND is_default = 0`
|
|
).run(title, prompt, id, req.uid);
|
|
|
|
if (result.changes === 0) {
|
|
return res.status(404).json({ error: "Preset not found or you don't have permission to edit it." });
|
|
}
|
|
|
|
res.json({ message: 'Preset updated successfully' });
|
|
} catch (error) {
|
|
console.error('Failed to update preset:', error);
|
|
res.status(500).json({ error: 'Failed to update preset' });
|
|
}
|
|
});
|
|
|
|
router.delete('/:id', (req, res) => {
|
|
const { id } = req.params;
|
|
|
|
try {
|
|
const result = db.prepare(
|
|
`DELETE FROM prompt_presets
|
|
WHERE id = ? AND uid = ? AND is_default = 0`
|
|
).run(id, req.uid);
|
|
|
|
if (result.changes === 0) {
|
|
return res.status(404).json({ error: "Preset not found or you don't have permission to delete it." });
|
|
}
|
|
|
|
res.json({ message: 'Preset deleted successfully' });
|
|
} catch (error) {
|
|
console.error('Failed to delete preset:', error);
|
|
res.status(500).json({ error: 'Failed to delete preset' });
|
|
}
|
|
});
|
|
|
|
module.exports = router;
|