app/web
: diretório para os principais pontos de entrada, injeção dependência ou comandos do aplicativo. O subdiretório ‘web’ contém o ponto de entrada principal a API REST.domain/entities
: diretório que contém modelos/entidades de domínio que representam os principais conceitos de negócios.domain/usecases
: diretório que contém Serviços de Domínio ou Use Cases.domain/ports
: diretório que contém ‘interfaces’ ou contratos definidos que os adaptadores devem seguir.frameworks/rest
: diretório que contém os controllers e manipulador de requisições REST.frameworks/rest/dto
: diretório que contém objetos/modelo de request e response.frameworks/repository
: diretório que contém adaptadores de banco de dados exemplo para PostgreSQL.frameworks/repository/dbo
: diretório que contém objetos/entidades de banco de dados..infra
: diretório que contém arquivos de infrainstrutura.infra/kubernetes
: diretório que contém os manifestos kubernetes.infra/terraform
: diretório que contém os arquivos terraform para provisionar a infra do projeto
- Go
- Domain-Driven Design
- Hexagonal Architecture
- Gin Web Framework - Routes, JSON validation, Error management, Middleware support
- MongoDB - Database persistence
- GORM ORM library for Golang
- Slog - Package slog provides structured logging, in which log records include a message, a severity level, and various other attributes expressed as key-value pairs.
- GoDotEnv - A Go (golang) port of dotenv project (which loads env vars from a .env file).
- gin-swagger - gin middleware to automatically generate RESTful API documentation with Swagger 2.0.
- swag - Swag converts Go annotations to Swagger Documentation 2.0
- CORS gin's middleware - Gin middleware/handler to enable CORS support.
Dependencies
Check for go version 1.21.3
go version
Preparing app
git clone git@github.com:fabianogoes/fiap-tech-challenge-kitchen-api.git
cd fiap-tech-challenge-kitchen-api
go mod tidy
docker-compose up -d postgres && go run app/web/main.go
docker-compose up -d
curl --request GET --url http://localhost:8020/health
## response
{"status":"UP"}
docker login -u=fabianogoes
docker build -t fabianogoes/kitchen-api:latest .
docker tag fabianogoes/kitchen-api:latest fabianogoes/kitchen-api:latest
docker push fabianogoes/kitchen-api:latest
go test -v ./...