You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
81 lines
1.9 KiB
JavaScript
81 lines
1.9 KiB
JavaScript
'use strict';
|
|
|
|
const user = require('../user');
|
|
const flags = require('../flags');
|
|
|
|
const flagsApi = module.exports;
|
|
|
|
flagsApi.create = async (caller, data) => {
|
|
const required = ['type', 'id', 'reason'];
|
|
if (!required.every(prop => !!data[prop])) {
|
|
throw new Error('[[error:invalid-data]]');
|
|
}
|
|
|
|
const { type, id, reason } = data;
|
|
|
|
await flags.validate({
|
|
uid: caller.uid,
|
|
type: type,
|
|
id: id,
|
|
});
|
|
|
|
const flagObj = await flags.create(type, id, caller.uid, reason);
|
|
flags.notify(flagObj, caller.uid);
|
|
|
|
return flagObj;
|
|
};
|
|
|
|
flagsApi.update = async (caller, data) => {
|
|
const allowed = await user.isPrivileged(caller.uid);
|
|
if (!allowed) {
|
|
throw new Error('[[no-privileges]]');
|
|
}
|
|
|
|
const { flagId } = data;
|
|
delete data.flagId;
|
|
|
|
await flags.update(flagId, caller.uid, data);
|
|
return await flags.getHistory(flagId);
|
|
};
|
|
|
|
flagsApi.appendNote = async (caller, data) => {
|
|
const allowed = await user.isPrivileged(caller.uid);
|
|
if (!allowed) {
|
|
throw new Error('[[error:no-privileges]]');
|
|
}
|
|
if (data.datetime && data.flagId) {
|
|
try {
|
|
const note = await flags.getNote(data.flagId, data.datetime);
|
|
if (note.uid !== caller.uid) {
|
|
throw new Error('[[error:no-privileges]]');
|
|
}
|
|
} catch (e) {
|
|
// Okay if not does not exist in database
|
|
if (!e.message === '[[error:invalid-data]]') {
|
|
throw e;
|
|
}
|
|
}
|
|
}
|
|
await flags.appendNote(data.flagId, caller.uid, data.note, data.datetime);
|
|
const [notes, history] = await Promise.all([
|
|
flags.getNotes(data.flagId),
|
|
flags.getHistory(data.flagId),
|
|
]);
|
|
return { notes: notes, history: history };
|
|
};
|
|
|
|
flagsApi.deleteNote = async (caller, data) => {
|
|
const note = await flags.getNote(data.flagId, data.datetime);
|
|
if (note.uid !== caller.uid) {
|
|
throw new Error('[[error:no-privileges]]');
|
|
}
|
|
|
|
await flags.deleteNote(data.flagId, data.datetime);
|
|
|
|
const [notes, history] = await Promise.all([
|
|
flags.getNotes(data.flagId),
|
|
flags.getHistory(data.flagId),
|
|
]);
|
|
return { notes: notes, history: history };
|
|
};
|