wotcs-api-system
Version:
Base system used to build WoTcs clans and players API
82 lines (74 loc) • 2.42 kB
JavaScript
var Eventer = require('../base/eventer');
var _ = require('underscore');
var squel = require('squel');
squel.useFlavour('postgres');
module.exports = Eventer.extend({
init: function (db, app, params) {
this.db = db;
this.app = app;
var self = this;
_.each(params, function(value, key) {
self[key] = value;
});
if(this.id){
this.id = parseInt(this.id,10);
}
},
hasChanged: function(fields) {
var changed = false;
var self = this;
_.each(fields, function (field) {
if(self[field] != self.oldParams[field]){
changed = true;
}
});
return changed;
},
save: function(fields, callback) {
var query;
var self = this;
if(this.newRecord){
query = squel.insert({replaceSingleQuotes: true}).into(this.tableName);
if(this.id){
fields.push('id');
}
if(this.timestamps){
fields.push('created_at');
self.created_at = (new Date()).toISOString();
}
}else{
if(!this.hasChanged(fields)){
if(this.forceChange){
fields = [];
}else{
if(callback){
callback(null);
}
return;
}
}
query = squel.update({replaceSingleQuotes: true}).table(this.tableName).where("id = ?", this.id);
}
if(this.timestamps){
fields.push('updated_at');
self.updated_at = (new Date()).toISOString();
}
this.oldParams = {};
_.each(fields, function (field) {
query.set(field, self[field]);
self.oldParams[field] = self[field];
});
this.newRecord = false;
//if(query.toString().indexOf('NaN') > -1/* || query.toString().toLowerCase().indexOf('infinity') > -1*/){
// console.log(query.toString());
//}else{
this.db.batchQuery(query.toString(), this.tableName, callback);
//}
},
remove: function(callback) {
var query = squel.delete().from(this.tableName).where('id = ?', this.id);
this.db.query(query.toString(), function(err){
if(callback){callback(err);}
});
}
});