The service provides APIs for the frontend to do following things:
- Create and manage bank accounts, which are composed of owner’s name, balance, and currency.
- Record all balance changes to each of the account. So every time some money is added to or subtracted from the account, an account entry record will be created.
- Perform a money transfer between 2 accounts. This should happen within a transaction, so that either both accounts’ balance are updated successfully or none of them are.
-
brew install golang-migrate
-
npm install -g dbdocs dbdocs login
-
npm install -g @dbml/cli dbml2sql --version
-
brew install sqlc
-
go install github.com/golang/mock/mockgen@v1.6.0
-
Create the bank-network
make network
-
Start postgres container:
make postgres
-
Create simple_bank database:
make createdb
-
Run db migration up all versions:
make migrateup
-
Run db migration up 1 version:
make migrateup1
-
Run db migration down all versions:
make migratedown
-
Run db migration down 1 version:
make migratedown1
-
Generate DB documentation:
make db_docs
-
Access the DB documentation at this address. Password:
secret
-
Generate schema SQL file with DBML:
make db_schema
-
Generate SQL CRUD with sqlc:
make sqlc
-
Generate DB mock with gomock:
make mock
-
Create a new db migration:
make new_migration name=<migration_name>
-
Run server:
make server
-
Run test:
make test
-
Start minikube:
Minikube and kubectl must be installed as prerequisites. Then start minikube
minikube start
To view minikube dashboard, use the command
minikube dashboard
or use k9s with the commandk9s
. -
Pod deployments:
Use the command
kubectl apply -f <file-name>.yml
-
Running Postgres and Redis on the host machine:
To spin up database on local machine, run the following command
docker-compose -f database.yml up -d
To connect to database from minikube, change the host from localhost to
host.minikube.internal
in the deployment.yaml file. -
Install nginx ingress controller:
Enable ingress add-ons
minikube addons enable ingress minikube addons enable ingress-dns
Apply ingress
kubectl apply -f k8s/ingress-nginx.yaml kubectl apply -f k8s/ingress-http.yaml kubectl apply -f k8s/ingress-grpc.yaml kubectl get ingress
-
Configure ingress:
Add ingress host to /etc/hosts as follows
sudo vi /etc/hosts
Append to the file
127.0.0.1 api.simplebank.test 127.0.0.1 gapi.simplebank.test
Create a minikube tunnel
minikube tunnel
The app is now available at
http://api.simplebank.test
in the browser.Test ingress by running
nslookup simplebank.test
-
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.4.0/cert-manager.yaml
-
Install nginx ingress controller:
kubectl apply -f https://raw.githubusercontent.com/kubernetes/ingress-nginx/controller-v0.48.1/deploy/static/provider/aws/deploy.yaml
-
kubectl apply -f https://github.com/jetstack/cert-manager/releases/download/v1.4.0/cert-manager.yaml
-
Generate files
NOTE: You should add the
protoc-gen-go-grpc
to your PATHPATH="${PATH}:${HOME}/go/bin"
make proto