refactor: async/await socket.io/posts

This commit is contained in:
Barış Soner Uşaklı
2019-09-09 19:19:56 -04:00
parent 4652c68ba7
commit e93ef0d7fd
9 changed files with 419 additions and 657 deletions

View File

@@ -1,46 +1,30 @@
'use strict';
var async = require('async');
var posts = require('../../posts');
var privileges = require('../../privileges');
const posts = require('../../posts');
const privileges = require('../../privileges');
module.exports = function (SocketPosts) {
SocketPosts.getDiffs = function (socket, data, callback) {
async.waterfall([
async.apply(privilegeCheck, data.pid, socket.uid),
function (next) {
posts.diffs.list(data.pid, next);
},
function (timestamps, next) {
timestamps.unshift(Date.now());
next(null, timestamps);
},
], callback);
SocketPosts.getDiffs = async function (socket, data) {
await privilegeCheck(data.pid, socket.uid);
const timestamps = await posts.diffs.list(data.pid);
timestamps.unshift(Date.now());
return timestamps;
};
SocketPosts.showPostAt = function (socket, data, callback) {
privilegeCheck(data.pid, socket.uid, function (err) {
if (err) {
return callback(err);
}
posts.diffs.load(data.pid, data.since, socket.uid, callback);
});
SocketPosts.showPostAt = async function (socket, data) {
await privilegeCheck(data.pid, socket.uid);
return await posts.diffs.load(data.pid, data.since, socket.uid);
};
function privilegeCheck(pid, uid, callback) {
async.parallel({
deleted: async.apply(posts.getPostField, pid, 'deleted'),
privileges: async.apply(privileges.posts.get, [pid], uid),
}, function (err, payload) {
if (err) {
return callback(err);
}
async function privilegeCheck(pid, uid) {
const [deleted, privilegesData] = await Promise.all([
posts.getPostField(pid, 'deleted'),
privileges.posts.get([pid], uid),
]);
payload.privileges = payload.privileges[0];
const allowed = payload.privileges['posts:history'] && (payload.deleted ? payload.privileges['posts:view_deleted'] : true);
callback(!allowed ? new Error('[[error:no-privileges]]') : null);
});
const allowed = privilegesData[0]['posts:history'] && (deleted ? privilegesData[0]['posts:view_deleted'] : true);
if (!allowed) {
throw new Error('[[error:no-privileges]]');
}
}
};