fully-api
Version:
API framework for Fully Stacked, LLC REST-ful APIs
120 lines • 5.11 kB
JavaScript
"use strict";
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.Models = void 0;
const ErrorObj_1 = require("./ErrorObj");
const Q = require('q');
const fs_1 = __importDefault(require("fs"));
const aws_sdk_1 = __importDefault(require("aws-sdk"));
const path = require('path');
const rootDir = path.dirname(require.main.filename);
// ===============================================================================
// UTILITY FUNCTIONS
// ===============================================================================
class Models {
constructor(s, file) {
this.s3 = new aws_sdk_1.default.S3();
this.settings = s;
this.file = file;
}
init(b, f, rs) {
const deferred = Q.defer();
let md;
this.bucket = b;
this.file = f ? f : this.file;
this.remoteSettings = rs;
// if(this.file.substring(0,2) !== './') {this.file = './'+this.file;}
if (this.remoteSettings == null || this.remoteSettings === false) {
try {
md = require(this.file);
deferred.resolve(true);
}
catch (e) {
const errorObj = new ErrorObj_1.ErrorObj(403, 'md0001', __filename, 'init', 'unauthorized', 'Failure to initialize models. Models.json not found at path' + this.file, null);
deferred.reject(errorObj);
}
this.data = md;
deferred.resolve(true);
}
else {
this.s3.getObject({ Bucket: this.bucket, Key: this.file }, function (err, res) {
if (!err) {
const f = JSON.parse(res.Body.toString());
Models.prototype.data = f;
deferred.resolve(true);
}
else {
const errorObj = new ErrorObj_1.ErrorObj(500, 'm0002', __filename, 'init', 'error getting file from S3', 'S3 error', err);
deferred.reject(errorObj);
}
});
}
return deferred.promise;
}
reload() {
const m = this;
const deferred = Q.defer();
m.init(this.bucket, this.file, this.remoteSettings)
.then(function (res) {
deferred.resolve(res);
})
.fail(function (err) {
if (err !== undefined && err !== null && typeof (err.addToError) === 'function') {
deferred.reject(err.addToError(__filename, 'reload'));
}
else {
const errorObj = new ErrorObj_1.ErrorObj(500, 'm1002', __filename, 'reload', 'error reloading configs', 'Error reloading configs', err);
deferred.reject(errorObj);
}
});
return deferred.promise;
}
save(doNetworkReload) {
const deferred = Q.defer();
if (this.remoteSettings == null || this.remoteSettings === false) {
const fswrite = Q.denodeify(fs_1.default.writeFile);
fswrite(this.file, JSON.stringify(this.constructor.prototype.data, null, 4))
.then(function (write_res) {
deferred.resolve(true);
})
.fail(function (err) {
const errorObj = new ErrorObj_1.ErrorObj(500, 'm0003', __filename, 'save', 'error with fswrite()', 'External Error', err);
deferred.reject(errorObj);
});
}
else {
this.s3.putObject({ Bucket: this.bucket, Key: this.file, Body: JSON.stringify(this.constructor.prototype.data, null, 4) }, function (err, save_res) {
if (!err) {
if (doNetworkReload === true) {
this.settings.reloadNetwork()
.then(function (reload_res) {
deferred.resolve(true);
})
.fail(function (err) {
if (err !== undefined && err !== null && typeof (err.addToError) === 'function') {
deferred.reject(err.addToError(__filename, 'save'));
}
else {
const errorObj = new ErrorObj_1.ErrorObj(500, 'm1003', __filename, 'save', 'error reloading network', 'Error reloading network', err);
deferred.reject(errorObj);
}
});
}
else {
deferred.resolve(true);
}
}
else {
const errorObj = new ErrorObj_1.ErrorObj(500, 'm0004', __filename, 'save', 'error writing models file to s3', 'S3 error', err);
deferred.reject(errorObj);
}
});
}
return deferred.promise;
}
;
}
exports.Models = Models;
//# sourceMappingURL=models.js.map