enigma-bbs/core/user_group.js

69 lines
1.5 KiB
JavaScript

/* jslint node: true */
'use strict';
const userDb = require('./database.js').dbs.user;
const async = require('async');
const _ = require('lodash');
exports.getGroupsForUser = getGroupsForUser;
exports.addUserToGroup = addUserToGroup;
exports.addUserToGroups = addUserToGroups;
exports.removeUserFromGroup = removeUserFromGroup;
function getGroupsForUser(userId, cb) {
const sql =
`SELECT group_name
FROM user_group_member
WHERE user_id=?;`;
const groups = [];
userDb.each(sql, [ userId ], (err, row) => {
if(err) {
return cb(err);
}
groups.push(row.group_name);
},
() => {
return cb(null, groups);
});
}
function addUserToGroup(userId, groupName, transOrDb, cb) {
if(!_.isFunction(cb) && _.isFunction(transOrDb)) {
cb = transOrDb;
transOrDb = userDb;
}
transOrDb.run(
`REPLACE INTO user_group_member (group_name, user_id)
VALUES(?, ?);`,
[ groupName, userId ],
err => {
return cb(err);
}
);
}
function addUserToGroups(userId, groups, transOrDb, cb) {
async.each(groups, (groupName, nextGroupName) => {
return addUserToGroup(userId, groupName, transOrDb, nextGroupName);
}, err => {
return cb(err);
});
}
function removeUserFromGroup(userId, groupName, cb) {
userDb.run(
`DELETE FROM user_group_member
WHERE group_name=? AND user_id=?;`,
[ groupName, userId ],
err => {
return cb(err);
}
);
}