File: //var/dev/farhangmoaser/web/models/purchase.js
"use strict";
var md5 = require('md5');
class PurchaseModel {
/**
* Constructor
* @param {Object} data values for table fields.
*/
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();
}
add() {
var self = this;
return new Promise(function(resolve, reject){
var record = {};
if(self.data.hasOwnProperty('user')) record.user = self.data.user;
if(self.data.hasOwnProperty('book')) record.book = self.data.book;
if(self.data.hasOwnProperty('value')) record.value = self.data.value;
if(self.data.hasOwnProperty('dateStart')) record.dateStart = self.data.dateStart;
if(self.data.hasOwnProperty('dateExpire')) record.dateExpire = self.data.dateExpire;
if(self.data.hasOwnProperty('state')) record.state = self.data.state;
self.conn.query(`INSERT INTO purchase SET ?`, record, function(err, result){
if(err) return reject(err.message);
self.data.id = result.insertId;
resolve(self);
})
});
}
update() {
var self = this;
return new Promise(function(resolve, reject){
if(!self.data.hasOwnProperty('id')) reject('id is required.');
var record = {};
if(self.data.hasOwnProperty('user')) record.user = self.data.user;
if(self.data.hasOwnProperty('book')) record.book = self.data.book;
if(self.data.hasOwnProperty('value')) record.value = self.data.value;
if(self.data.hasOwnProperty('dateStart')) record.dateStart = self.data.dateStart;
if(self.data.hasOwnProperty('dateExpire')) record.dateExpire = self.data.dateExpire;
if(self.data.hasOwnProperty('state')) record.state = self.data.state;
self.conn.query(`UPDATE purchase SET ? where ?`, [record, {id: self.data.id}], function(err, result){
if(err) return reject(err.message);
resolve(self);
})
});
}
delete() {
var self = this;
return new Promise(function(resolve, reject){
if(!self.data.hasOwnProperty('id')) reject('id is required.');
self.conn.query(`delete from purchase where ?`, {id: self.data.id}, function(err, result){
if(err) return reject(err.message);
resolve();
})
});
}
load(master) {
var self = this;
return new Promise(function(resolve, reject){
if(!self.data.hasOwnProperty('id')) return reject('At least on of the id and email fields must be provided.');
var table = master ? 'purchase' : 'purchase_details';
self.conn.query(`SELECT * FROM ${table} WHERE ?`, {id: self.data.id}, function(err, rows, fields){
if (err) return reject(err.message);
if(rows.length) {
self.data = rows[0];
resolve(self);
} else
resolve(false);
});
});
}
static list(conn, query, limit, offset, orderBy) {
if(!orderBy) orderBy = 'newest';
var orderByStr = '';
switch(orderBy){
case 'newest':
orderByStr = 'ORDER BY `created` DESC, id DESC';
break;
case 'oldest':
orderByStr = 'ORDER BY `created` ASC, id ASC';
break;
case 'user:a-z':
orderByStr = 'ORDER BY `user_sortable` ASC, id ASC';
break;
case 'user:z-a':
orderByStr = 'ORDER BY `user_sortable` DESC, id DESC';
break;
case 'book:a-z':
orderByStr = 'ORDER BY `book_title` ASC, id ASC';
break;
case 'book:z-a':
orderByStr = 'ORDER BY `book_title` DESC, id DESC';
break;
}
limit = limit || 100;
offset = offset || 0;
return new Promise(function(resolve, reject){
var params = [offset, limit];
var where = '';
if(Object.keys(query).length) {
where = 'WHERE !!';
params.unshift(query);
}
var template = conn.format(`SELECT * FROM purchase_details ${where} ${orderByStr} limit ?, ?`, params);
conn.query(template, query, function(err, rows, fields){
if (err) return reject(err.message);
resolve(rows);
});
});
}
static count(conn, query) {
return new Promise(function(resolve, reject){
var where = '';
if(Object.keys(query).length)
where = 'WHERE !!';
var template = conn.format(`SELECT COUNT(*) AS sum FROM purchase_details ${where}`, query);
conn.query(template, query, function(err, rows, fields){
if (err) return reject(err.message);
resolve(rows[0].sum);
});
});
}
}
module.exports = PurchaseModel;