Skip to content

srcanton/go-gin-ddd-cqrs

Repository files navigation

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

    • GET /register
    • GET /login
  • With authorization

    • GET /api/v1/products

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published