Flight Engine
Mock flight data delivered simply and quickly without a database.
Running the App Locally
First, make sure you have Node.js and npm then install project dependencies by running npm install.
After dependencies have been installed, run npm run dev, which will perform the following actions:
- Transpile TS into
distfromsrc - Start the application
- Watch
srcfor changes, and transpile intodistagain after observed changes - Watch
distfor changes and restart the application after observed changes
Once the app has started, try hitting localhost:3030 (3030 is the default port unless overridden from .env) from a browser.
Randomization via a Seed Value
In order to keep the app lightweight and eliminate the need for a database, this project uses seed randomization (credit to @JohnKahn for the amazing idea!). If you don't care about the way data is generated, just read the first two bullets below and skip the rest.
Here are some important things to note if you plan to modify the random data generation:
- After a
Generatoris initialized with aseed, therandommethod will generate random data each time it is called, however, this data generation is deterministic... - Because this method of random generation is deterministic, the order and value of the "random" value sets generated by multiple calls to
randomfor a given seed will always be the same- That was a lot... let's say we have
generatorAandgeneratorBand each have been initialized with a seed value ofRANDOMIZATION_IS_COOL!. If we call therandommethod of each generator (e.g.,A1andB1), the result will be the same (A1 === B1). If, however, we call therandommethod again, the new values will again be the same (A2 === B2) but they should differ from the first set of values generated by each of the generators (A1 !== A2 && B1 !== B2).
- That was a lot... let's say we have
- Whenever a
GET /flightscall is performed, the app generates all flights for the specifieddate, regardless of the presence oforiginand/ordestination- If we only generate a subset of the data based on origin and/or destination, the order in which the flights generated for each O&D pair would differ and flight data would be different depending on the request parameters (e.g., flight
123retrieved via/flights?date=2020-01-01and/flights?date=2020-01-01&origin=DFWwould differ). Here's an example:randommethod calls 1-10 with a seed of2020-01-01will ALWAYS result in:[1, 7, 9, 1, 8, 4, 5, 7, 2, 3]/flights?date=2020-01-01:- Generate LGA flights (
randomcalls 1-4) - Generate MIA flights (
randomcalls 6-7) - Generate DFW flights (
randomcalls 8-10), flight123was call 9 and got a random value of2
- Generate LGA flights (
/flights?date=2020-01-01?origin=DFW:- Generate DFW flights (
randomcalls 1-3), flight123was call 2 and got a random value of7
- Generate DFW flights (
- Because the values are different, the data for flight 123 will not be the same for those two calls
- If we only generate a subset of the data based on origin and/or destination, the order in which the flights generated for each O&D pair would differ and flight data would be different depending on the request parameters (e.g., flight
Testing
This project utilizes framework uses Facebook's Jest framework for testing. Jest is based on the Jasmine framework. While some developers prefer Mocha, we've chosen to fully adopt Jest on top of Jasmine as-is until a significant need requires an alternative solution.
Writing a test is as simple as creating a *.test.ts file in the ./src directory along with an associated describe() and test() function.
Simply run npm run test to run tests.
Additional testing scripts:
test: runs all teststest:changed: runs tests related to uncommited git changes only
Contributing
Interested in contributing to the project? Check out our Contributing Guidelines.
Log in or sign up for Devpost to join the conversation.