go_api_boilerplate
                                
                                 go_api_boilerplate copied to clipboard
                                
                                    go_api_boilerplate copied to clipboard
                            
                            
                            
                        🐶Go (Golang)🚀REST / GraphQL API + Postgres boilerplate
Go (Golang) REST / GraphQL API Boilerplate
- DEMO (GraphQL Playground): https://go-gin-postgres-api.herokuapp.com/graphql
- DEMO (REST API Swagger): https://go-gin-postgres-api.herokuapp.com/swagger/index.html
Note: in demo, I disabled email
Used libraries:
- Components Diagram

- See Swagger Doc http://localhost:3000/swagger/index.html

- See GraphQL Playground http://localhost:3000/graphql

Features
- [x] User Auth functionality (Signup, Login, Forgot Password, Reset Password)
- [x] JWT Authentication
- [x] REST API
- [x] GraphQL API
- [x] Gorm (Golang SQL DB ORM) with Postgres implementation and auto migration
- [x] Configs via environmental variables
- [x] Email notification (Welcome email, Reset password email)
- [x] Swagger REST API documentation
- [x] GraphQL playground
- [x] Unit tests
- [x] Dependency injection
Run locally
Create .env at root, i.e.
MAILGUN_API_KEY=key-b9jksfh8s9843uhfsdhds
MAILGUN_DOMAIN=xxxxx.mailgun.org
EMAIL_FROM=support@go_api_boilerplate.com
DB_HOST=localhost
DB_PORT=5432
DB_USER=your-user
DB_PASSWORD=your-password
DB_NAME=local-dev-db
JWT_SIGN_KEY=secret
HAMC_KEY=secret
PEPPER=secret
ENV=development
APP_PORT=3000
APP_HOST=http://localhost
Run
# Terminal 1
docker-compose up        # docker-compose up (Run postgres)
docker-compose down      # docker-compose down (Shutdown postgres)
# Terminal 2
go run github.com/99designs/gqlgen -v # Generate Graphql stuff
swag init -g app/app.go               # Generates Swagger
go run *.go                           # Run application
go test -v -cover ./...               # Run go test
Todo
- [ ] Input Validations
- [ ] Custom Error messages
- [ ] Logger
- [ ] More unit tests
maybe?
- [ ] gRPC
- [ ] Redis Streams
- [ ] Redis PubSub
- [ ] WebSocket
- [ ] MongoDB
Contribution
Welcome for suggestions
