trilium/src/routes/api/labels.js

75 lines
2.3 KiB
JavaScript
Raw Normal View History

"use strict";
const sql = require('../../services/sql');
const sync_table = require('../../services/sync_table');
const utils = require('../../services/utils');
const labels = require('../../services/labels');
2018-03-31 01:20:36 +08:00
async function getNoteLabels(req) {
const noteId = req.params.noteId;
2018-03-31 01:20:36 +08:00
return await sql.getRows("SELECT * FROM labels WHERE isDeleted = 0 AND noteId = ? ORDER BY position, dateCreated", [noteId]);
}
2018-03-31 01:20:36 +08:00
async function updateNoteLabels(req, res, next) {
const noteId = req.params.noteId;
const labels = req.body;
const now = utils.nowDate();
for (const label of labels) {
if (label.labelId) {
2018-03-31 01:20:36 +08:00
await sql.execute("UPDATE labels SET name = ?, value = ?, dateModified = ?, isDeleted = ?, position = ? WHERE labelId = ?",
[label.name, label.value, now, label.isDeleted, label.position, label.labelId]);
2018-03-31 01:20:36 +08:00
}
else {
// if it was "created" and then immediatelly deleted, we just don't create it at all
if (label.isDeleted) {
2018-03-31 01:20:36 +08:00
continue;
}
label.labelId = utils.newLabelId();
2018-03-31 01:20:36 +08:00
await sql.insert("labels", {
labelId: label.labelId,
2018-03-31 01:20:36 +08:00
noteId: noteId,
name: label.name,
value: label.value,
position: label.position,
2018-03-31 01:20:36 +08:00
dateCreated: now,
dateModified: now,
isDeleted: false
});
}
await sync_table.addLabelSync(label.labelId);
2018-03-31 01:20:36 +08:00
}
2018-03-31 01:20:36 +08:00
return await sql.getRows("SELECT * FROM labels WHERE isDeleted = 0 AND noteId = ? ORDER BY position, dateCreated", [noteId]);
}
async function getAllLabelNames(req) {
const names = await sql.getColumn("SELECT DISTINCT name FROM labels WHERE isDeleted = 0");
for (const label of labels.BUILTIN_LABELS) {
if (!names.includes(label)) {
names.push(label);
}
}
names.sort();
2018-03-31 01:20:36 +08:00
return names;
}
2018-03-31 01:20:36 +08:00
async function getValuesForLabel(req) {
const labelName = req.params.labelName;
2018-03-31 01:20:36 +08:00
return await sql.getColumn("SELECT DISTINCT value FROM labels WHERE isDeleted = 0 AND name = ? AND value != '' ORDER BY value", [labelName]);
}
2018-03-31 01:20:36 +08:00
module.exports = {
getNoteLabels,
updateNoteLabels,
getAllLabelNames,
getValuesForLabel
};