This submission is provided to prove that I might be worthy of either an interview, a job offer, or a substantial lesson in the correct way to architect javascript software. While I personally am hoping for one of the first two options the third option always looms large.
While this is a technical challenge and one would assume that the reviewer is able to get things up and running by following "standard" NodeJS practices, this is not always the case, thus the following items are given as required to run this software.
- NodeJS version 8 (or greater)
- The ability to read and follow simple directions and to have a great sense of humor
The following will install the library software upon which this program depends.
- npm install
The following commands are available via package.json
.
- npm start
- Perform all build operations and start the server
- npm run debug
- Perform all build operations and start the server in DEBUG mode (extra output to console)
- npm run lint
- Perform linting on the project. This will also be done as part of the build process.
- npm run build
- Perform all build operations but do not start the server
- npm run document
- Generate the project documentation (available in the [docs/](./docs/index.html) directory)
- npm run test
- Run all of the unit and integration tests. This will generate a coverage report available in [coverage/](./coverage/index.html)
- npm run debug-test
- Similar to the `debug` command above, but for the tests. Extra output will be included during the test run.
- npm run tsc
- Run the typescript compiler. No linting is performed. This does NOT send a runner to Tropical Smoothie Cafe for a mocha madness smoothie. You will be disappoint.
This is the meat of the application and shows all of the endpoints and how they are hooked together.
Run npm start
and then use the Swagger http://localhost:3000/api-docs
So many things can go here (lack of HTTPS, better authentication, significantly better specification of API).
I could write several pages here, however if further discussion is warranted let's schedule a phone call.
Below is a list of URLs that I referenced while implementing this project.
https://www.typescriptlang.org/docs/home.html
https://www.npmjs.com/package/swagger-ui-express https://www.npmjs.com/package/swagger-jsdoc https://swagger.io/
https://journal.artfuldev.com/unit-testing-node-applications-with-typescript-using-mocha-and-chai-384ef05f32b2 https://istanbul.js.org/docs/tutorials/typescript/ https://azimi.me/2016/09/30/nyc-mocha-typescript.1.html https://medium.com/@RupaniChirag/writing-unit-tests-in-typescript-d4719b8a0a40