File: //var/dev/farhangmoaser/web/models/userRole.js
"use strict";
var md5 = require('md5');
class UserRoleModel {
/**
* Constructor
* @param {object} conn db connection from db pool.
* @param {Object} data values for table fields.
* At least on of `title` or `id` must be set.
*/
constructor(conn, data) {
this.data = data;
this.conn = conn;
}
field(key, value) {
if(arguments.length==0) return;
if(arguments.length==1)
return this.data[key];
if(value===undefined)
delete this.data[key];
else
this.data[key] = value;
}
fields(){
return this.data;
}
save() {
if(this.data.hasOwnProperty('id')) return this.update();
else return this.add();
}
update() {
var self = this;
return new Promise(function(resolve, reject){
if(!self.data.hasOwnProperty('id'))
return reject('id and title are required.');
self.conn.query(`SELECT user_role.id, user_role.title, count(user.id) as userCount FROM user_role LEFT JOIN user ON user.role=user_role.id where ? GROUP BY user.role`, {'user_role.id': self.data.id}, function(err, rows, fields){
if(err) return reject(err.message);
if(!rows.length) return reject('entry '+self.data.id+' not found.');
var row = rows[0];
var updates = {userCount: row.userCount};
if(self.data.hasOwnProperty('title'))
updates.title = self.data.title;
else
self.data.title = row.title;
self.conn.query("UPDATE user_role SET ? where ?", [updates, {id: self.data.id}], function(err, result){
if(err) return reject(err.message);
self.data.userCount = updates.userCount;
resolve(self);
})
});
});
}
add() {
var self = this;
return new Promise(function(resolve, reject){
if(!self.data.hasOwnProperty('title'))
return reject('title is required.');
self.data.userCount = 0;
self.conn.query(`INSERT INTO user_role SET ?`, {title: self.data.title, userCount: 0}, function(err, result){
if(err) return reject(err.message);
self.data.id = result.insertId;
resolve(self);
});
});
}
remove() {
var self = this;
return new Promise(function(resolve, reject){
if(!self.data.hasOwnProperty('id')) return reject('id is required.');
self.conn.query(`DELETE FROM user_role WHERE ?`, {id: self.data.id}, function(err, rows, fields){
if(err) return reject(err.message);
resolve(self);
});
});
}
static list(conn) {
return new Promise(function(resolve, reject){
conn.query(`SELECT * FROM user_role`, function(err, rows, fields){
if (err) return reject(err.message);
resolve(rows);
});
});
}
static reRole(conn, roleid, substitute){
return new Promise(function(resolve, reject){
conn.query(`UPDATE user SET ? where ?`, [{role: substitute}, {role: roleid}], function(err, rows, fields){
if (err) return reject(err.message);
resolve();
});
});
}
}
module.exports = UserRoleModel;