GOLANG API REST
Clean api rest with Go, Gin and GORM.
Clean Architecture with DDD, CQRS.
Use Redis for cache and Postgres for database.
---
Table of Contents
Develop: With local Go
make localrun
make createdb
make migrateup
Release: With dockerized Go
make run
make createdb
make migrateup
Endpoints
-
Public methods
-
With authorization
Package Structure
.
├── LICENSE
├── README.md
├── Makefile
├── Dockerfile
├── docker-compose.yml
├── docker-compose.local.yml
├── .env
├── .env.local
└── src # Main Application
├── application
│ ├── product
│ │ └── query
│ │ └── get_products
│ │ ├── get_products_query.go
│ │ ├── get_products_query_handler.go
│ │ ├── get_products_query_response.go
│ │ └── main.go
│ └── user
│ ├── command
│ │ ├── create_user
│ │ │ ├── create_user_command.go
│ │ │ ├── create_user_command_handler.go
│ │ │ └── main.go
│ └── query
│ ├── get_user_by_email
│ │ ├── get_user_by_email_query.go
│ │ ├── get_user_by_email_query_handler.go
│ │ ├── get_user_by_email_query_response.go
│ │ └── main.go
│ └── login_user
│ ├── login_user_query.go
│ ├── login_user_query_handler.go
│ ├── login_user_query_response.go
│ └── main.go
├── domain
│ ├── common
│ │ ├── custom-error
│ │ │ └── invalid_argument_error.go
│ │ ├── service
│ │ │ ├── auth
│ │ │ │ ├── auth.go
│ │ │ │ └── token.go
│ │ │ └── security
│ │ │ └── security.go
│ │ └── valueobject
│ │ ├── access
│ │ │ └── access_detail.go
│ │ └── token
│ │ └── token_detail.go
│ ├── product
│ │ ├── aggregate
│ │ │ └── product_aggregate.go
│ │ ├── repository
│ │ │ └── product_repository.go
│ │ ├── service
│ │ │ └── get_products
│ │ │ └── get_products.go
│ │ └── valueobject
│ │ ├── cost
│ │ │ └── cost.go
│ │ ├── id
│ │ │ └── id.go
│ │ └── name
│ │ └── name.go
│ └── user
│ ├── aggregate
│ │ └── product_aggregate.go
│ ├── errors
│ │ ├── already_exists_error.go
│ │ ├── incorrect_user_or_password_error.go
│ │ └── not_found_error.go
│ ├── repository
│ │ └── user_repository.go
│ ├── service
│ │ ├── create_user
│ │ │ └── create_user_service.go
│ │ ├── get_user_by_email
│ │ │ └── get_user_by_email_service.go
│ │ └── login_user
│ │ └── login_user_service.go
│ └── valueobject
│ ├── email
│ │ └── email.go
│ ├── first_name
│ │ └── first_name.go
│ ├── id
│ │ └── id.go
│ ├── last_name
│ │ └── last_name.go
│ └── password
│ └── password.go
└── infrastructure
├── common
│ ├── config
│ │ ├── database.go
│ │ ├── main.go
│ │ ├── redis.go
│ │ ├── server.go
│ │ └── swagger.go
│ │
│ ├── persistence
│ │ ├── migration
│ │ └── model
│ │ ├── product_model.go
│ │ └── user_model.go
│ └── service
│ ├── auth
│ │ ├── auth.go
│ │ ├── redisdb.go
│ │ └── token.go
│ ├── middleware
│ │ └── middleware.go
│ └── security
│ └── security.go
├── product
│ ├── controller
│ │ ├── get_products
│ │ │ ├── get_products_controller.go
│ │ │ └── main.go
│ ├── repository
│ │ └── product_repository
│ └── main.go
└── user
├── controller
│ ├── create_user
│ │ ├── create_user_controller.go
│ │ └── main.go
│ └── login_user
│ ├── login_user_controller.go
│ └── main.go
├── repository
│ └── user_repository
└── main.go
Feedbacks
Feel free to write your thoughts
License
GNU General Public License v3.0.
Author
srcanton