|
|
@@ -1,48 +1,42 @@
|
|
|
import restify from 'restify';
|
|
|
-import nano from 'nano';
|
|
|
import yup from 'yup';
|
|
|
|
|
|
import validationFactory from './modules/validations.js';
|
|
|
-import dbWrapper from './modules/db.js';
|
|
|
+import connectAndWrapDbs from './modules/db.js';
|
|
|
import logger from './modules/logging.js';
|
|
|
|
|
|
-function setupRoute(routeFactory, dbs, server, log) {
|
|
|
- const route = routeFactory({ dbs, yup, log });
|
|
|
- const handlers = route.schema ? [validationFactory(route, log), ...route.handlers] : route.handlers;
|
|
|
-
|
|
|
- switch (route.verb) {
|
|
|
- case 'get':
|
|
|
- server.get(route.path, ...handlers);
|
|
|
- break;
|
|
|
- case 'post':
|
|
|
- server.post(route.path, ...handlers);
|
|
|
- break;
|
|
|
- default:
|
|
|
- throw new Error();
|
|
|
- }
|
|
|
-}
|
|
|
-
|
|
|
-async function connectDbs(client, dbs) {
|
|
|
- return dbs.reduce(async (wrappedDbs, dbName) => ({ ...wrappedDbs, [dbName]: await dbWrapper(client, dbName) }), {});
|
|
|
-}
|
|
|
-
|
|
|
async function start({ routes, host, port, middlewares, couchDbOpts, restifyOpts }) {
|
|
|
try {
|
|
|
- const connStr = `${couchDbOpts.protocol}://${couchDbOpts.username}:${couchDbOpts.password}@${couchDbOpts.host}:${couchDbOpts.port}`;
|
|
|
- const client = await nano(connStr);
|
|
|
- const dbs = await connectDbs(client, couchDbOpts.dbs);
|
|
|
+ logger.info('connecting to db...');
|
|
|
+ const dbs = await connectAndWrapDbs(couchDbOpts);
|
|
|
|
|
|
- logger.info('connected to db, starting server...');
|
|
|
+ logger.info('connected to db, setting up server...');
|
|
|
const server = restify.createServer(restifyOpts);
|
|
|
|
|
|
+ logger.info('setting up middlewares...');
|
|
|
middlewares.forEach(middlewareFactory => {
|
|
|
server.use(middlewareFactory({ server, restify }));
|
|
|
});
|
|
|
|
|
|
+ logger.info('setting up routes...');
|
|
|
routes.forEach(routeFactory => {
|
|
|
- setupRoute(routeFactory, dbs, server, logger);
|
|
|
+ const route = routeFactory({ dbs, yup, logger });
|
|
|
+ const handlers = route.schema ? [validationFactory(route, logger), ...route.handlers] : route.handlers;
|
|
|
+
|
|
|
+ switch (route.verb) {
|
|
|
+ case 'get':
|
|
|
+ server.get(route.path, ...handlers);
|
|
|
+ break;
|
|
|
+ case 'post':
|
|
|
+ server.post(route.path, ...handlers);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ throw new Error();
|
|
|
+ }
|
|
|
});
|
|
|
|
|
|
+ logger.info('server setup complete');
|
|
|
+
|
|
|
server.listen(port, host, () => {
|
|
|
logger.info(`${server.name} listening at ${server.url}`);
|
|
|
});
|