a backend web service for a trading center. It will provide APIs for the frontend to do the following things:
- Create and manage accounts.
- Record all balance changes to each of the accounts.
- Perform a money transfer between 2 accounts.
The programming language is Golang. This whole project is presented in 4 sections:
-
Designed PostgreSQL DB using DBML, and generated Golang code to interact with DB without deadlock.
-
Built 7 RESTful HTTP APIs using Gin and wrote stronger tests using Gomock with 100% coverage.
-
Built Docker image and deployed the app to AWS Kubernetes cluster (EKS) automatically in less than 50s.
-
Used Redis as message queue, create and send emails to users via Gmail SMTP server.
-
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 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
-
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