This repository has been archived on 2025-12-25. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
qmi-cloud/server/mongo.js
Manuel Romero 9a7084626e send email
2020-01-14 15:50:01 +01:00

147 lines
3.2 KiB
JavaScript

const mongoose = require('mongoose');
const options = {
loggerLevel: 'error',
useNewUrlParser: true,
reconnectInterval: 2000,
reconnectTries: 30 // Retry up to 30 times
};
// Connect to DB
mongoose.connect(process.env.MONGO_URI, options);
// When successfully connected
mongoose.connection.on('connected', () => {
console.log('MongoDB connected...');
});
// When successfully reconnected
mongoose.connection.on('reconnected', () => {
console.log('dbevent: reconnected');
});
// If the connection throws an error
mongoose.connection.on('error', (err) => {
console.log(`dbevent: error: ${err}`);
});
// External Dependancies
const boom = require('boom');
// Get Data Models
const Provision = require('./models/Provision');
const Destroy = require('./models/Destroy');
const User = require('./models/User');
const Scenario = require('./models/Scenario');
const getOid = async (oid, reply) => {
try {
const entity = await User.findOne({ oid: oid});
return entity;
} catch (err) {
throw boom.boomify(err)
}
}
const getScenarioByName = async (name, reply) => {
try {
const entity = await Scenario.findOne({ name: name});
return entity;
} catch (err) {
throw boom.boomify(err)
}
}
const get = async (model, filter, reply) => {
try {
const entity = await model.find(filter).sort({created: -1});
return entity;
} catch (err) {
throw boom.boomify(err)
}
}
const getSingle = async (model, id, reply) => {
try {
const entity = await model.findById(id);
return entity;
} catch (err) {
throw boom.boomify(err);
}
};
const add = async (model, data, reply) => {
try {
const entity = new model(data)
return entity.save();
} catch (err) {
throw boom.boomify(err);
}
};
const update = async (model, id, body, reply) => {
try {
const { ...updateData } = body;
updateData.updated = new Date();
const update = await model.findByIdAndUpdate(id, updateData, { new: true });
return update;
} catch (err) {
throw boom.boomify(err)
}
};
const del = async (model, id, reply) => {
try {
const entity = await model.findByIdAndRemove(id)
return entity;
} catch (err) {
throw boom.boomify(err)
}
}
function _m(model) {
return {
get: async (filter, reply) => {
return get(model, filter, reply);
},
getSingle: async (id, reply) => {
return getSingle(model, id, reply);
},
add: async (data, reply) => {
return add(model, data, reply);
},
update: async (id, data, reply) => {
return update(model, id, data, reply);
},
del: async (id, reply) => {
return del(model, id, reply);
}
}
}
const mScenarios = _m(Scenario);
mScenarios.getScenarioByName = getScenarioByName;
module.exports = {
provision: _m(Provision),
destroy: _m(Destroy),
scenario: mScenarios,
user: {
get: async (filter, reply) => {
return get(User, filter, reply);
},
getOid: async (oid, reply) => {
return getOid(oid, reply);
},
getSingle: async (req, reply) => {
return getSingle(User, req, reply);
},
add: async (data, reply) => {
return add(User, data, reply);
},
update: async (data, reply) => {
return update(User, data, reply);
}
}
}