https://github.com/script47/motorway-tech-test
https://github.com/script47/motorway-tech-test
Last synced: 11 months ago
JSON representation
- Host: GitHub
- URL: https://github.com/script47/motorway-tech-test
- Owner: Script47
- Created: 2023-10-11T14:29:53.000Z (over 2 years ago)
- Default Branch: master
- Last Pushed: 2023-10-11T23:25:29.000Z (over 2 years ago)
- Last Synced: 2024-11-10T02:48:16.405Z (over 1 year ago)
- Language: TypeScript
- Size: 101 KB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
## Preface
This is my first time using Nest.js, I came across it a few months ago but never got the chance to try it out, and so I
thought this might be the perfect opportunity - or not!
### Assumptions & Guiding Principles
- We will be able to dictate to the API consumers how we expect dates e.g. pass dates as encoded strings
- Skinny controllers, skinny repositories, fat services
- If you have limited time, prefer e2e tests over integration/unit specifically for APIs
### Repo
I've reorganised things to make it neater following a clear mono-repo strategy.
### Setup
I've setup a network so all containers can communicate with each other but we only surface up `nginx:80` for public
use:
- `nginx`
- Web server, port 80,
- Reverse proxy setup with upstream possibility to setup multiple instances
- `api`
- Nest.js API, no external ports,
- `db`
- DB, no external ports
- `redis`
- Redis, no external ports
### API
- `GET http://localhost/vehicle-states/3?timestamp=2022-09-12%2010%3A00%3A00%2B00`
**Response:**
```json
{
"vehicleId": 3,
"state": "selling",
"timestamp": "2022-09-11 23:21:38+00"
}
```
## App
- `./api`
- Setup the `.env` file from the `.env.example` - if it hasn't been done so already
- `./db`
- Setup the `.env` file from the `.env.example` - if it hasn't been done so already
**Run:**
```
docker-compose up -d --build
```
## Tests
For brevity, my focus was on the e2e tests, though, I did go back and add unit/integration tests, you'll need to set `api` target to dev, rebuild, and then run:
**Run:**
```
npm run test # unit + integration
npm run test:e2e # e2e
```