vending-machine-api
Allow users to register as Buyer or Seller. A Buyer can deposit coins and buy products with it, or reset the deposit to get the coins back. The seller can add or update products.
Start
Create or edit your local .env file
Set up the environment variable COMPOSE_FILE to avoid the 'Found orphan containers' warning:
MacOS:
COMPOSE_FILE=docker-compose.prod.yml:docker-compose.dev.yml:docker-compose.test.yml
Windows:
COMPOSE_FILE=docker-compose.prod.yml;docker-compose.dev.yml;docker-compose.test.yml
Installation
$ yarn
$ yarn build
Development
Starting the dev enviornment (Docker Container)
# create docker network for database connection
$ docker network create vending-machine-api-network-dev
# start the app and database in docker containers
$ docker-compose -f 'docker-compose.dev.yml' up
# start first migration to create the db tables
$ yarn db:migrate:dev
Testing Local (without app docker container)
# start test database in docker container
$ docker-compose -f 'docker-compose.test.yml' up
# start first migration to create the db tables
$ yarn db:migrate:test
# unit tests
$ yarn test
# watch mode
$ yarn test:watch
# e2e tests
$ yarn test:e2e
# test coverage
$ yarn test:cov
Testing in Docker Container
# start docker containers (app, dev + test)
$ yarn docker:up:hidden
# start first migration to create the db tables
$ yarn docker:db:migrate
# execute tests in the docker container
$ yarn docker:test
Deployment
First Start
- To create a docker image + container with the app & database.
- You have to provide the env variables for the docker-compose.prod file (I set the env variables with Github Secrets in the Github Action).
# create network to connect the app with the db
$ docker network create vending-machine-api-network
# build the docker image, create & run the app/db container in detached mode (background)
$ docker-compose -f 'docker-compose.prod.yml' up -d
# init tables with migration
$ docker-compose exec app yarn db:migrate:prod
Docker App Update
- To update the docker image and start the new docker container
$ docker build -t vending-machine-api .
$ docker-compose up -d
Docker Migration
- To run new migrations
# start migrations
$ docker-compose exec app yarn db:migrate:prod