109 lines
3.4 KiB
JavaScript
109 lines
3.4 KiB
JavaScript
const sqliteClient = require('../../../common/services/sqliteClient');
|
|
|
|
function getPresets(uid) {
|
|
const db = sqliteClient.getDb();
|
|
return new Promise((resolve, reject) => {
|
|
const query = `
|
|
SELECT * FROM prompt_presets
|
|
WHERE uid = ? OR is_default = 1
|
|
ORDER BY is_default DESC, title ASC
|
|
`;
|
|
db.all(query, [uid], (err, rows) => {
|
|
if (err) {
|
|
console.error('SQLite: Failed to get presets:', err);
|
|
reject(err);
|
|
} else {
|
|
resolve(rows || []);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function getPresetTemplates() {
|
|
const db = sqliteClient.getDb();
|
|
return new Promise((resolve, reject) => {
|
|
const query = `
|
|
SELECT * FROM prompt_presets
|
|
WHERE is_default = 1
|
|
ORDER BY title ASC
|
|
`;
|
|
db.all(query, [], (err, rows) => {
|
|
if (err) {
|
|
console.error('SQLite: Failed to get preset templates:', err);
|
|
reject(err);
|
|
} else {
|
|
resolve(rows || []);
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function createPreset({ uid, title, prompt }) {
|
|
const db = sqliteClient.getDb();
|
|
return new Promise((resolve, reject) => {
|
|
const id = require('crypto').randomUUID();
|
|
const now = Math.floor(Date.now() / 1000);
|
|
const query = `
|
|
INSERT INTO prompt_presets (id, uid, title, prompt, is_default, created_at, sync_state)
|
|
VALUES (?, ?, ?, ?, 0, ?, 'dirty')
|
|
`;
|
|
db.run(query, [id, uid, title, prompt, now], function(err) {
|
|
if (err) {
|
|
console.error('SQLite: Failed to create preset:', err);
|
|
reject(err);
|
|
} else {
|
|
resolve({ id });
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function updatePreset(id, { title, prompt }, uid) {
|
|
const db = sqliteClient.getDb();
|
|
return new Promise((resolve, reject) => {
|
|
const now = Math.floor(Date.now() / 1000);
|
|
const query = `
|
|
UPDATE prompt_presets
|
|
SET title = ?, prompt = ?, sync_state = 'dirty', updated_at = ?
|
|
WHERE id = ? AND uid = ? AND is_default = 0
|
|
`;
|
|
db.run(query, [title, prompt, now, id, uid], function(err) {
|
|
if (err) {
|
|
console.error('SQLite: Failed to update preset:', err);
|
|
reject(err);
|
|
} else if (this.changes === 0) {
|
|
reject(new Error('Preset not found, is default, or permission denied'));
|
|
} else {
|
|
resolve({ changes: this.changes });
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
function deletePreset(id, uid) {
|
|
const db = sqliteClient.getDb();
|
|
return new Promise((resolve, reject) => {
|
|
const query = `
|
|
DELETE FROM prompt_presets
|
|
WHERE id = ? AND uid = ? AND is_default = 0
|
|
`;
|
|
db.run(query, [id, uid], function(err) {
|
|
if (err) {
|
|
console.error('SQLite: Failed to delete preset:', err);
|
|
reject(err);
|
|
} else if (this.changes === 0) {
|
|
reject(new Error('Preset not found, is default, or permission denied'));
|
|
} else {
|
|
resolve({ changes: this.changes });
|
|
}
|
|
});
|
|
});
|
|
}
|
|
|
|
module.exports = {
|
|
getPresets,
|
|
getPresetTemplates,
|
|
createPreset,
|
|
updatePreset,
|
|
deletePreset
|
|
}; |