mirror of
https://github.com/NodeBB/NodeBB.git
synced 2025-11-13 01:15:47 +01:00
Flags API (#9666)
* feat: new routes for flags API + flag get + flag creation, migration from socket method + flag update, migration from socket method * fixed bug where you could not unassign someone from a flag * feat: tests for new flags API added missing files for schema update * fix: flag tests to use Write API instead of sockets * feat: flag notes API + tests * chore: remove debug line * test: fix breaking test on mongo
This commit is contained in:
24
src/flags.js
24
src/flags.js
@@ -102,7 +102,6 @@ Flags.get = async function (flagId) {
|
||||
if (!base) {
|
||||
return;
|
||||
}
|
||||
|
||||
const flagObj = {
|
||||
state: 'open',
|
||||
assignee: null,
|
||||
@@ -314,6 +313,11 @@ Flags.getNotes = async function (flagId) {
|
||||
};
|
||||
|
||||
Flags.getNote = async function (flagId, datetime) {
|
||||
datetime = parseInt(datetime, 10);
|
||||
if (isNaN(datetime)) {
|
||||
throw new Error('[[error:invalid-data]]');
|
||||
}
|
||||
|
||||
let notes = await db.getSortedSetRangeByScoreWithScores(`flag:${flagId}:notes`, 0, 1, datetime, datetime);
|
||||
if (!notes.length) {
|
||||
throw new Error('[[error:invalid-data]]');
|
||||
@@ -362,6 +366,11 @@ async function modifyNotes(notes) {
|
||||
}
|
||||
|
||||
Flags.deleteNote = async function (flagId, datetime) {
|
||||
datetime = parseInt(datetime, 10);
|
||||
if (isNaN(datetime)) {
|
||||
throw new Error('[[error:invalid-data]]');
|
||||
}
|
||||
|
||||
const note = await db.getSortedSetRangeByScore(`flag:${flagId}:notes`, 0, 1, datetime, datetime);
|
||||
if (!note.length) {
|
||||
throw new Error('[[error:invalid-data]]');
|
||||
@@ -610,8 +619,10 @@ Flags.update = async function (flagId, uid, changeset) {
|
||||
}
|
||||
}
|
||||
} else if (prop === 'assignee') {
|
||||
if (changeset[prop] === '') {
|
||||
tasks.push(db.sortedSetRemove(`flags:byAssignee:${changeset[prop]}`, flagId));
|
||||
/* eslint-disable-next-line */
|
||||
if (!await isAssignable(parseInt(changeset[prop], 10))) {
|
||||
} else if (!await isAssignable(parseInt(changeset[prop], 10))) {
|
||||
delete changeset[prop];
|
||||
} else {
|
||||
tasks.push(db.sortedSetAdd(`flags:byAssignee:${changeset[prop]}`, now, flagId));
|
||||
@@ -701,7 +712,14 @@ Flags.appendHistory = async function (flagId, uid, changeset) {
|
||||
|
||||
Flags.appendNote = async function (flagId, uid, note, datetime) {
|
||||
if (datetime) {
|
||||
await Flags.deleteNote(flagId, datetime);
|
||||
try {
|
||||
await Flags.deleteNote(flagId, datetime);
|
||||
} catch (e) {
|
||||
// Do not throw if note doesn't exist
|
||||
if (!e.message === '[[error:invalid-data]]') {
|
||||
throw e;
|
||||
}
|
||||
}
|
||||
}
|
||||
datetime = datetime || Date.now();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user