Projeto desenvolvido durante a Pós-Graduação Go Expert da Full Cycle Este repositório serve como checkpoint do meu aprendizado e portfólio das tecnologias e conceitos aplicados ao longo do curso.
API RESTful completa desenvolvida em Go, aplicando conceitos de Clean Architecture, autenticação JWT, documentação OpenAPI (Swagger) e testes automatizados. O projeto demonstra a implementação de um CRUD de produtos com sistema de autenticação de usuários.
Este projeto consolida os seguintes conceitos estudados na pós-graduação:
- ✅ Arquitetura Limpa (Clean Architecture): Separação de responsabilidades em camadas (entities, use cases, interfaces, frameworks)
- ✅ Domain-Driven Design (DDD): Modelagem de domínio rico com validações de negócio
- ✅ API RESTful: Construção de endpoints seguindo princípios REST
- ✅ Autenticação JWT: Implementação de autenticação stateless com tokens
- ✅ Documentação OpenAPI: Geração automática de documentação Swagger
- ✅ ORM com GORM: Mapeamento objeto-relacional e migrations
- ✅ Testes Automatizados: Testes unitários e de integração
- ✅ Injeção de Dependências: Desacoplamento de componentes
O projeto segue os princípios da Clean Architecture, organizado em camadas:
api-app/
├── cmd/
│ └── server/ # Ponto de entrada da aplicação
├── configs/ # Configurações (env, viper)
├── internal/
│ ├── entity/ # Entidades de domínio (Product, User)
│ ├── dto/ # Data Transfer Objects
│ └── infra/
│ ├── database/ # Implementações de repositórios
│ └── webserver/
│ └── handlers/ # HTTP Handlers (Controllers)
├── pkg/
│ └── entity/ # Entidades compartilhadas (ID, UUID)
├── docs/ # Documentação Swagger gerada
└── test/ # Testes e exemplos HTTP
- Entities (Domínio): Regras de negócio e validações (
internal/entity) - Use Cases: Lógica de aplicação (implícito nos handlers)
- Interface Adapters: Handlers HTTP e repositories (
internal/infra) - Frameworks & Drivers: Chi Router, GORM, SQLite (
cmd/server)
- Go 1.23 - Linguagem de programação
- Chi Router - HTTP router leve e performático
- GORM - ORM para Go
- SQLite - Banco de dados (dev/test)
- Swagger/OpenAPI - Especificação de API
- swaggo - Geração automática de docs
- POST
/users- Criar novo usuário - POST
/users/generate_token- Gerar token JWT
- POST
/products- Criar produto - GET
/products- Listar produtos (paginação e ordenação) - GET
/products/{id}- Buscar produto por ID - PUT
/products/{id}- Atualizar produto - DELETE
/products/{id}- Deletar produto
- GET
/docs/*- Interface Swagger UI
- Go 1.23 ou superior
- Make (opcional, para comandos facilitados)
git clone https://github.com/BrooitsFeiskJR/api-app.git
cd api-appCrie um arquivo .env na raiz do projeto:
JWT_SECRET=your-secret-key-here
JWT_EXPIRES_IN=3600
WEB_SERVER_PORT=8080
DB_DRIVER=mysql
DB_HOST=localhost
DB_PORT=3306
DB_USER=root
DB_PASSWORD=root
DB_NAME=fullcyclego mod downloadmake swag
# ou
swag init -g cmd/server/main.gomake run
# ou
go run cmd/server/main.goA API estará disponível em: http://localhost:8080
Documentação Swagger: http://localhost:8080/docs/index.html
# Todos os testes
go test ./...
# Com cobertura
go test -cover ./...
# Testes de um pacote específico
go test ./internal/entity/...curl -X POST http://localhost:8080/users \
-H "Content-Type: application/json" \
-d '{
"name": "John Doe",
"email": "john@example.com",
"password": "secret123"
}'curl -X POST http://localhost:8080/users/generate_token \
-H "Content-Type: application/json" \
-d '{
"email": "john@example.com",
"password": "secret123"
}'Resposta:
{
"access_token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}curl -X POST http://localhost:8080/products \
-H "Content-Type: application/json" \
-H "Authorization: Bearer SEU_TOKEN_AQUI" \
-d '{
"name": "Notebook",
"price": 2999.99
}'curl "http://localhost:8080/products?page=1&limit=10&sort=asc" \
-H "Authorization: Bearer SEU_TOKEN_AQUI"- Nomes descritivos e intencionais
- Funções pequenas e de responsabilidade única
- Tratamento adequado de erros
- Single Responsibility: Cada struct tem uma responsabilidade
- Open/Closed: Extensível via interfaces
- Liskov Substitution: Interfaces bem definidas
- Interface Segregation: Interfaces específicas (
ProductInterface,UserInterface) - Dependency Inversion: Dependência de abstrações, não implementações
- Senhas armazenadas com bcrypt (salt + hash)
- Autenticação stateless com JWT
- Validação de entrada de dados
- UUIDs para identificadores únicos
- Testes unitários para entidades e repositórios
- Validações de domínio nas entidades
- Tratamento consistente de erros HTTP
- Documentação completa via Swagger
- Configuração do projeto e estrutura base
- Implementação de entidades de domínio
- Repositories com GORM
- Handlers HTTP com Chi
- Autenticação JWT
- Documentação Swagger/OpenAPI
- Testes automatizados
- Middleware de logging estruturado
- Integração com PostgreSQL
- Containerização com Docker
- CI/CD com GitHub Actions
- Deploy em produção (AWS/GCP)
Toninho Estudante de Pós-Graduação Go Expert @ Full Cycle
- GitHub: @BrooitsFeiskJR
- Email: tontech.dev@outlook.com
Este projeto foi desenvolvido para fins educacionais durante a Pós-Graduação Go Expert da Full Cycle.
⭐ Se este projeto foi útil para você, considere dar uma estrela!
Desenvolvido com dedicação durante a jornada Go Expert 🚀