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
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
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
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