Directory Structure
├── cmd
│ └── api // Main applications for this project
├── config // Configuration app
├── delivery // Delivery usefull to encode raw body, query params, make a response to client
│ ├── http
│ └── middleware
├── docs // Design and user documents (in addition to your godoc generated documentation)
├── domain // Domains is a struct to store any objects from database, example you have a products in your tables.
├── infrastructure
│ └── datastore // Database configuration
├── migration // Database migrations.
├── mocks // Mock code, generated by mockery
├── repository // Represents the behavior of the data store. It can be implemented using PostgreSQL, MongoDB, etc
│ ├── pgsql
│ └── redis
├── transport // Request and response model
│ └── request
├── usecase // Usecase contains all of business logic
└── utils // Additional services
├── crypto
├── jwt
Prerequisite and full list what has been used
- PostgreSQL - PostgreSQL Database
- Redis - Redis
- golang-migrate - Database migrations. CLI and Golang library
- echo - Web framework
- go-redis - Type-safe Redis client for Golang
- zerolog - Logger
- ozzo-validation - Go Struct and Field validation
- mockery - A mock code autogenerator for Golang
- swag - Generator RESTful API documentation with Swagger
- echo-swagger - Echo middleware for Swagger
- testify - A toolkit with common assertions and mocks
- godotenv - Environment variables loader
App requires 2 database (PostgreSQL and Redis server), run from your local machine or run it using docker with the following command
# run postgreSQL
docker run -d -p 5432:5432 -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=postgres -e POSTGRES_DB=go_boilerplate postgres
# run redis
docker run -d -p 6379:6379 redis
Migration
Run below command to run migration
migrate -path migration -database "${DATABASE_URL}" up
To create a new migration file
migrate create -ext sql -dir migration -seq name
Test
Run below command to run test, and make sure that all tests are passing
go test -v ./...
Running
Run below command to run app
go run ./cmd/api/main.go
Swagger URL
${BASE_URL}/swagger/index.html
You can find usefull commands in Makefile
.