2025-07-04 14:31:04 +09:00

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;