File: //var/dev/farhangmoaser/web/models/app.js
/**
* App Model
* Version: 0.1
* Author: Babak Vandad
*
* Abstraction layer for App table in MySQL db
*/
"use strict";
var md5 = require('md5');
// var mysql = require('../connectors/mysql').client();
class AppModel {
/**
* Constructor
* @param {object} conn db connection from db pool.
* @param {Object} data values for table fields.
* At least on of `key` or `id` must be set.
*/
constructor(conn, data) {
this.conn = conn;
this.data = data;
}
field(key, value) {
if(arguments.length==0) return;
if(arguments.length==1)
return this.data[key];
else
this.data[key] = value;
}
fields(){
return this.data;
}
/**
* Reads the complete data object from db based on `key` or `id` fields.
* @return {Promise} Result of the operation
*/
load() {
var self = this;
return new Promise(function(resolve, reject){
if(!self.data.key && !self.data.id) return reject('A valid key or an id is required.');
var where = {};
if(self.data.key) where = {key: self.data.key};
if(self.data.id) where = {id: self.data.id};
self.conn.query(`SELECT * FROM app WHERE ?`, where, function(err, rows, fields){
if(err)
return reject(err.message);
if(!rows.length)
return reject('Requested app not found.');
var row = rows[0];
self.data = row;
resolve();
});
});
}
/**
* Increments the hit counter.
* IMPORTANT: Hence the hit limitations is a business rule we do not consider it in the model.
* @return {Promise} Result of the operation
*/
touch() {
var self = this;
return new Promise(function(resolve, reject){
self.conn.query(`UPDATE app SET last_visit=CURRENT_TIMESTAMP, hit_count=hit_count+1 WHERE ?`, {id: self.data.id}, function(err){
if(err)
return reject('db error.');
else
return resolve();
});
});
}
/**
* Resets the hit counter
* @return {Promise} Result of the operation
*/
resetHitCounter() {
var self = this;
return new Promise(function(resolve, reject){
self.conn.query(`UPDATE app SET last_visit=CURRENT_TIMESTAMP, hit_count=1, last_reset=CURRENT_TIMESTAMP WHERE ?`, {id: self.data.id}, function(err){
if(err)
return reject('db error.');
else
return resolve();
});
});
}
}
module.exports = AppModel;