Skip to content

Sup3r-Us3r/go-clean-arch-template

Repository files navigation

Go Clean Arch Template

Coverage Status

Overview

This template implements the Clean Architecture in a REST API made in Golang, it also has unit tests for Entities, Repositories, UseCases, Handlers, Utility Functions and Factories.

.
├── cmd/
│   └── barber/
│       └── main.go
├── config/
│   ├── config.go
│   └── jwt.go
├── docs/
│   ├── docs.go
│   ├── swagger.json
│   └── swagger.yaml
├── internal/
│   ├── domain/
│   │   ├── apperr/
│   │   │   ├── apperr.go
│   │   │   └── barber.go
│   │   ├── entity/
│   │   │   ├── barber_test.go
│   │   │   └── barber.go
│   │   └── gateway/
│   │       └── barber.go
│   ├── infra/
│   │   ├── database/
│   │   │   └── mongodb.go
│   │   ├── repository/
│   │   │   ├── memory/
│   │   │   │   ├── barber_repository_test.go
│   │   │   │   └── barber_repository.go
│   │   │   ├── mongodb/
│   │   │   │   └── barber_repository.go
│   │   │   └── repository.go
│   │   └── web/
│   │       ├── handler/
│   │       │   ├── v1/
│   │       │   │   ├── auth/
│   │       │   │   │   ├── sign_in_test.go
│   │       │   │   │   └── sign_in.go
│   │       │   │   └── barber/
│   │       │   │       ├── create_barber_test.go
│   │       │   │       ├── create_barber_test.go
│   │       │   │       ├── delete_barber_test.go
│   │       │   │       ├── delete_barber.go
│   │       │   │       ├── fetch_barbers_test.go
│   │       │   │       ├── fetch_barbers.go
│   │       │   │       ├── get_barber_by_id_test.go
│   │       │   │       ├── get_barber_by_id.go
│   │       │   │       ├── update_barber_test.go
│   │       │   │       └── update_barber.go
│   │       │   └── handler.go
│   │       ├── middleware/
│   │       │   ├── logger.go
│   │       │   └── verify_token.go
│   │       └── webserver/
│   │           └── webserver.go
│   ├── mapper/
│   │   └── barber.go
│   ├── usecase/
│   │   ├── auth/
│   │   │   ├── sign_in_test.go
│   │   │   └── sign_in.go
│   │   ├── barber/
│   │   │   ├── create_barber_test.go
│   │   │   ├── create_barber_test.go
│   │   │   ├── delete_barber_test.go
│   │   │   ├── delete_barber.go
│   │   │   ├── fetch_barbers_test.go
│   │   │   ├── fetch_barbers.go
│   │   │   ├── get_barber_by_email_test.go
│   │   │   ├── get_barber_by_email.go
│   │   │   ├── get_barber_by_id_test.go
│   │   │   ├── get_barber_by_id.go
│   │   │   ├── update_barber_test.go
│   │   │   └── update_barber.go
│   │   └── usecase.go
│   └── util/
│       ├── do_passwords_match_test.go
│       ├── do_passwords_match.go
│       ├── email_is_valid_test.go
│       ├── email_is_valid.go
│       ├── generate_random_salt_test.go
│       ├── generate_random_salt.go
│       ├── hash_password_test.go
│       ├── hash_password.go
│       ├── password_is_valid_test.go
│       └── password_is_valid.go
├── log/
│   └── log.go
├── test/
│   └── factory/
│       ├── barber_test.go
│       └── barber.go
├── .editorconfig
├── .env.example
├── .gitignore
├── docker-compose.yml
├── Dockerfile
├── go.mod
├── go.sum
├── LICENSE
├── Makefile
└── README.md
  • REST API
  • Golang
  • Clean Arch
  • SOLID
  • Go Chi
  • JWT
  • MongoDB
  • Unit test
  • Factory
  • Container Pattern
  • Mapper
  • Swagger
  • Swag
  • Docker + Docker Compose

Setup API

Access the folder:

$ cd go-clean-arch-template

Create .env.development file:

$ cp .env.example .env.development

Update the variable values as needed.

Configure /etc/hosts:

# Mac and Linux
# /etc/hosts

# Windows
# C:\Windows\System32\drivers\etc\hosts

127.0.0.1 host.docker.internal

Run API

Note: Need Golang 1.21 or higher

Up Container:

$ docker-compose up -d

Access container:

$ docker exec -it barber-api /bin/bash

Install dependencies:

$ go mod tidy

Run API:

$ make dev

Scripts

Build API:

$ make build

Start API after build:

$ make start

Upgrade dependencies:

$ make upgrade-dependencies

Generate coverage:

$ make test-coverage

Generate docs:

You need to install swag to use the CLI.

$ make generate-docs

About

Template for application in Golang + Clean Architecture + SOLID

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages