HEX
Server: nginx/1.24.0
System: Linux nowruzgan 6.8.0-57-generic #59-Ubuntu SMP PREEMPT_DYNAMIC Sat Mar 15 17:40:59 UTC 2025 x86_64
User: babak (1000)
PHP: 8.3.6
Disabled: NONE
Upload Files
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;