This sample project is managing gateways - master devices that control multiple peripheral devices.
Your task is to create a REST service (JSON/HTTP) for storing information about these gateways and their associated devices. This information must be stored in the database.
When storing a gateway, any field marked as “to be validated” must be validated and an error returned if it is invalid. Also, no more that 10 peripheral devices are allowed for a gateway.
The service must also offer an operation for displaying information about all stored gateways (and their devices) and an operation for displaying details for a single gateway. Finally, it must be possible to add and remove a device from a gateway.
Each gateway has:
- a unique serial number (string),
- human-readable name (string),
- IPv4 address (to be validated),
- multiple associated peripheral devices.
Each peripheral device has:
- a UID (number),
- vendor (string),
- date created,
- status - online/offline.
- Frontend: Vue.js + Bootstrap 5
- Backend: NodeJS + Express + MongoDB REST API
- Clone this repo:
git clone https://github.com/glpzzz/gateways
- Move to the cloned directory:
cd gateways
- Rename the file
.env.template
to.env
and adjust the variables values properly - Run
docker-compose up
- The app should be ready on http://localhost
- Rename the file
.env.template
to.env
and adjust the variables values properly - Execute
npm install
to get all dependencies including dev ones - Run
docker-compose -f docker-compose.dev.yml up
which mounts a volume so you can make changes and the container stays in sync. - The app should be ready on http://localhost
- Rename the file
.env.template
to.env-test
and adjust the variables values properly - Run
docker-compose -f docker-compose.test.yml run node npm run test
A Github actions is configured to be executed on every push so tests must be passed for the push (or PR) to be effective.