WIP: Setup basic API routing and controllers.

This commit is contained in:
mike.rode
2019-02-10 19:37:38 -06:00
parent 61659d1ab2
commit 174fd8a836
23 changed files with 199 additions and 205 deletions
+12
View File
@@ -0,0 +1,12 @@
/* eslint-disable no-undef */
const _ = require('lodash');
const env = process.env.NODE_ENV || 'local';
const envConfig = require(`./${env}`);
const defaultConfig = {
env,
};
export default _.merge(defaultConfig, envConfig);
+7
View File
@@ -0,0 +1,7 @@
const localConfig = {
hostname: 'localhost',
port: 8000,
// viewDir: './app/views',
};
module.exports = localConfig;
+6
View File
@@ -0,0 +1,6 @@
import config from './config';
const server = require('./server')();
server.create(config);
server.start();
-181
View File
@@ -1708,12 +1708,6 @@
"xdg-basedir": "^3.0.0"
}
},
"contains-path": {
"version": "0.1.0",
"resolved": "https://registry.npmjs.org/contains-path/-/contains-path-0.1.0.tgz",
"integrity": "sha1-/ozxhP9mcLa67wGp1IYaXL7EEgo=",
"dev": true
},
"content-disposition": {
"version": "0.5.2",
"resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.2.tgz",
@@ -2177,56 +2171,6 @@
"get-stdin": "^6.0.0"
}
},
"eslint-import-resolver-node": {
"version": "0.3.2",
"resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.2.tgz",
"integrity": "sha512-sfmTqJfPSizWu4aymbPr4Iidp5yKm8yDkHp+Ir3YiTHiiDfxh69mOUsmiqW6RZ9zRXFaF64GtYmN7e+8GHBv6Q==",
"dev": true,
"requires": {
"debug": "^2.6.9",
"resolve": "^1.5.0"
}
},
"eslint-module-utils": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.3.0.tgz",
"integrity": "sha512-lmDJgeOOjk8hObTysjqH7wyMi+nsHwwvfBykwfhjR1LNdd7C2uFJBvx4OpWYpXOw4df1yE1cDEVd1yLHitk34w==",
"dev": true,
"requires": {
"debug": "^2.6.8",
"pkg-dir": "^2.0.0"
}
},
"eslint-plugin-import": {
"version": "2.16.0",
"resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.16.0.tgz",
"integrity": "sha512-z6oqWlf1x5GkHIFgrSvtmudnqM6Q60KM4KvpWi5ubonMjycLjndvd5+8VAZIsTlHC03djdgJuyKG6XO577px6A==",
"dev": true,
"requires": {
"contains-path": "^0.1.0",
"debug": "^2.6.9",
"doctrine": "1.5.0",
"eslint-import-resolver-node": "^0.3.2",
"eslint-module-utils": "^2.3.0",
"has": "^1.0.3",
"lodash": "^4.17.11",
"minimatch": "^3.0.4",
"read-pkg-up": "^2.0.0",
"resolve": "^1.9.0"
},
"dependencies": {
"doctrine": {
"version": "1.5.0",
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-1.5.0.tgz",
"integrity": "sha1-N53Ocw9hZvds76TmcHoVmwLFpvo=",
"dev": true,
"requires": {
"esutils": "^2.0.2",
"isarray": "^1.0.0"
}
}
}
},
"eslint-plugin-prettier": {
"version": "3.0.1",
"resolved": "https://registry.npmjs.org/eslint-plugin-prettier/-/eslint-plugin-prettier-3.0.1.tgz",
@@ -2667,15 +2611,6 @@
"integrity": "sha1-M8RLQpqysvBkYpnF+fcY83b/jVQ=",
"dev": true
},
"find-up": {
"version": "2.1.0",
"resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz",
"integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=",
"dev": true,
"requires": {
"locate-path": "^2.0.0"
}
},
"flat-cache": {
"version": "1.3.4",
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-1.3.4.tgz",
@@ -4435,36 +4370,6 @@
"figures": "^2.0.0"
}
},
"load-json-file": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz",
"integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=",
"dev": true,
"requires": {
"graceful-fs": "^4.1.2",
"parse-json": "^2.2.0",
"pify": "^2.0.0",
"strip-bom": "^3.0.0"
},
"dependencies": {
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
}
}
},
"locate-path": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz",
"integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=",
"dev": true,
"requires": {
"p-locate": "^2.0.0",
"path-exists": "^3.0.0"
}
},
"lodash": {
"version": "4.17.11",
"resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.11.tgz",
@@ -6140,36 +6045,12 @@
"integrity": "sha1-P7z7FbiZpEEjs0ttzBi3JDNqLK4=",
"dev": true
},
"p-limit": {
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz",
"integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==",
"dev": true,
"requires": {
"p-try": "^1.0.0"
}
},
"p-locate": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz",
"integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=",
"dev": true,
"requires": {
"p-limit": "^1.1.0"
}
},
"p-map": {
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/p-map/-/p-map-1.2.0.tgz",
"integrity": "sha512-r6zKACMNhjPJMTl8KcFH4li//gkrXWfbD6feV8l6doRHlzljFWGJ2AP6iKaCJXyZmAUMOPtvbW7EXkbWO/pLEA==",
"dev": true
},
"p-try": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz",
"integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=",
"dev": true
},
"package-json": {
"version": "4.0.1",
"resolved": "https://registry.npmjs.org/package-json/-/package-json-4.0.1.tgz",
@@ -6222,15 +6103,6 @@
}
}
},
"parse-json": {
"version": "2.2.0",
"resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz",
"integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=",
"dev": true,
"requires": {
"error-ex": "^1.2.0"
}
},
"parseurl": {
"version": "1.3.2",
"resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.2.tgz",
@@ -6279,23 +6151,6 @@
"resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz",
"integrity": "sha1-32BBeABfUi8V60SQ5yR6G/qmf4w="
},
"path-type": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz",
"integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=",
"dev": true,
"requires": {
"pify": "^2.0.0"
},
"dependencies": {
"pify": {
"version": "2.3.0",
"resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz",
"integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=",
"dev": true
}
}
},
"pathval": {
"version": "1.1.0",
"resolved": "https://registry.npmjs.org/pathval/-/pathval-1.1.0.tgz",
@@ -6323,15 +6178,6 @@
"pinkie": "^2.0.0"
}
},
"pkg-dir": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/pkg-dir/-/pkg-dir-2.0.0.tgz",
"integrity": "sha1-9tXREJ4Z1j7fQo4L1X4Sd3YVM0s=",
"dev": true,
"requires": {
"find-up": "^2.1.0"
}
},
"please-upgrade-node": {
"version": "3.1.1",
"resolved": "https://registry.npmjs.org/please-upgrade-node/-/please-upgrade-node-3.1.1.tgz",
@@ -6510,27 +6356,6 @@
"strip-json-comments": "~2.0.1"
}
},
"read-pkg": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz",
"integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=",
"dev": true,
"requires": {
"load-json-file": "^2.0.0",
"normalize-package-data": "^2.3.2",
"path-type": "^2.0.0"
}
},
"read-pkg-up": {
"version": "2.0.0",
"resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz",
"integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=",
"dev": true,
"requires": {
"find-up": "^2.0.0",
"read-pkg": "^2.0.0"
}
},
"readable-stream": {
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.1.5.tgz",
@@ -7162,12 +6987,6 @@
"ansi-regex": "^3.0.0"
}
},
"strip-bom": {
"version": "3.0.0",
"resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz",
"integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=",
"dev": true
},
"strip-eof": {
"version": "1.0.0",
"resolved": "https://registry.npmjs.org/strip-eof/-/strip-eof-1.0.0.tgz",
-1
View File
@@ -33,7 +33,6 @@
"eslint": "5.13.0",
"eslint-config-airbnb-base": "^13.1.0",
"eslint-config-prettier": "4.0.0",
"eslint-plugin-import": "^2.16.0",
"eslint-plugin-prettier": "3.0.1",
"husky": "1.3.1",
"lint-staged": "8.1.3",
+9
View File
@@ -0,0 +1,9 @@
const express = require('express');
const plexService = require('../../../services/plex');
const router = express.Router();
router.get('/', plexService.getUsers);
// router.get('/:id', plexService.getDogWithId);
module.exports = router;
+9
View File
@@ -0,0 +1,9 @@
function index(req, res) {
res.render('error/index', {
title: 'Error',
});
}
export default {
index,
};
+16
View File
@@ -0,0 +1,16 @@
function index(req, res) {
res.render('home/index', {
title: 'Home',
});
}
function info(req, res) {
res.render('home/info', {
title: 'More info',
});
}
module.exports = {
index,
info,
};
+42
View File
@@ -0,0 +1,42 @@
const express = require('express');
const bodyParser = require('body-parser');
module.exports = function() {
const server = express();
let create;
let start;
create = function(config) {
const routes = require('./routes');
// Server settings
server.set('env', config.env);
server.set('port', config.port);
server.set('hostname', config.hostname);
server.set('viewDir', config.viewDir);
// Returns middleware that parses json
server.use(bodyParser.json());
// Set up routes
routes.init(server);
};
start = function() {
const hostname = server.get('hostname');
const port = server.get('port');
server.listen(port, function() {
console.log(`Express server listening on - http://${hostname}:${port}`);
});
};
return {
create,
start,
};
};
+8
View File
@@ -0,0 +1,8 @@
const express = require('express');
const v1ApiController = require('./v1');
const router = express.Router();
router.use('/v1', v1ApiController);
module.exports = router;
+8
View File
@@ -0,0 +1,8 @@
const express = require('express');
const plexController = require('../../../controllers/apis/plex');
const router = express.Router();
router.use('/plex', plexController);
module.exports = router;
+9
View File
@@ -0,0 +1,9 @@
const express = require('express');
const errorController = require('../controllers/error');
const router = express.Router();
// router.get('/', errorController.index);
module.exports = router;
+9
View File
@@ -0,0 +1,9 @@
const express = require('express');
const homeController = require('../controllers/home');
const router = express.Router();
router.get('/', homeController.index);
router.get('/info', homeController.info);
module.exports = router;
+23
View File
@@ -0,0 +1,23 @@
const apiRoute = require('./apis');
const homeRoute = require('./home');
const errorRoute = require('./error');
function init(server) {
server.get('*', function(req, res, next) {
console.log(`Request was made to: ${req.originalUrl}`);
return next();
});
server.get('/', function(req, res) {
res.redirect('/home');
});
server.use('/api', apiRoute);
server.use('/home', homeRoute);
server.use('/error', errorRoute);
}
module.exports = {
init,
};
+21
View File
@@ -0,0 +1,21 @@
const dogs = [
{
id: 1,
name: 'Corgi',
origin: 'Wales',
breeds: ['Pembroke', 'Cardigan'],
},
{
id: 2,
name: 'Husky',
breeds: ['Alaskan', 'Siberian', 'Labrador', 'Sakhalin'],
},
];
function getUsers(req, res) {
res.json(dogs);
}
module.exports = {
getUsers,
};
+16
View File
@@ -0,0 +1,16 @@
import { Router } from 'express';
const router = Router();
// const actionController = require('../controllers/action.controller');
// router.post('/points', actionController.populatePointMessage);
// router.post('/', actionController.handleActionResponse);
router.get('/', actionController.);
router.get('/', (req, res) => {
res.json({
msg: 'Plex server autenticated',
});
});
export default router;
+4
View File
@@ -0,0 +1,4 @@
import mocha from 'mocha';
import chai from 'chai';
import nock from 'nock';
import chaiHttp from 'chai-http';
-14
View File
@@ -1,14 +0,0 @@
import express from 'express';
import { json, urlencoded } from 'body-parser';
import './services/plex/route';
const app = express();
const port = 8000;
app.use(json());
app.use(urlencoded({ extended: true }));
app.listen(port, () => {
console.log(`We are live on ${port}`);
});
View File
-9
View File
@@ -1,9 +0,0 @@
const express = require('express');
const router = express.Router();
// const actionController = require('../controllers/action.controller');
// router.post('/points', actionController.populatePointMessage);
// router.post('/', actionController.handleActionResponse);
module.exports = router;