Skip to content

Latest commit

 

History

66 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

API REST com Go - Pós-Graduação Go Expert (Full Cycle)

Go Version License

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.

📚 Sobre o Projeto

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.

🎯 Objetivos de Aprendizado

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

🏗️ Arquitetura

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

📐 Camadas da Arquitetura

  1. Entities (Domínio): Regras de negócio e validações (internal/entity)
  2. Use Cases: Lógica de aplicação (implícito nos handlers)
  3. Interface Adapters: Handlers HTTP e repositories (internal/infra)
  4. Frameworks & Drivers: Chi Router, GORM, SQLite (cmd/server)

🚀 Tecnologias Utilizadas

Core

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

Autenticação & Segurança

Documentação

Configuração & Testes

  • Viper - Gerenciamento de configurações
  • Testify - Biblioteca de testes

📋 Funcionalidades

🔐 Autenticação

  • POST /users - Criar novo usuário
  • POST /users/generate_token - Gerar token JWT

📦 Produtos (Requer Autenticação)

  • 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

📖 Documentação

  • GET /docs/* - Interface Swagger UI

⚙️ Configuração e Execução

Pré-requisitos

  • Go 1.23 ou superior
  • Make (opcional, para comandos facilitados)

1️⃣ Clone o Repositório

git clone https://github.com/BrooitsFeiskJR/api-app.git
cd api-app

2️⃣ Configurar Variáveis de Ambiente

Crie 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=fullcycle

3️⃣ Instalar Dependências

go mod download

4️⃣ Gerar Documentação Swagger

make swag
# ou
swag init -g cmd/server/main.go

5️⃣ Executar a Aplicação

make run
# ou
go run cmd/server/main.go

A API estará disponível em: http://localhost:8080 Documentação Swagger: http://localhost:8080/docs/index.html


🧪 Executando Testes

# Todos os testes
go test ./...

# Com cobertura
go test -cover ./...

# Testes de um pacote específico
go test ./internal/entity/...

📝 Exemplos de Uso

Criar Usuário

curl -X POST http://localhost:8080/users \
  -H "Content-Type: application/json" \
  -d '{
    "name": "John Doe",
    "email": "john@example.com",
    "password": "secret123"
  }'

Gerar Token JWT

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..."
}

Criar Produto (Autenticado)

curl -X POST http://localhost:8080/products \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer SEU_TOKEN_AQUI" \
  -d '{
    "name": "Notebook",
    "price": 2999.99
  }'

Listar Produtos com Paginação

curl "http://localhost:8080/products?page=1&limit=10&sort=asc" \
  -H "Authorization: Bearer SEU_TOKEN_AQUI"

🔑 Padrões e Boas Práticas Aplicadas

✨ Clean Code

  • Nomes descritivos e intencionais
  • Funções pequenas e de responsabilidade única
  • Tratamento adequado de erros

🎯 SOLID Principles

  • 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

🔒 Segurança

  • Senhas armazenadas com bcrypt (salt + hash)
  • Autenticação stateless com JWT
  • Validação de entrada de dados
  • UUIDs para identificadores únicos

📊 Qualidade de Código

  • 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

🛣️ Roadmap de Aprendizado

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

📚 Referências e Recursos


👨‍💻 Autor

Toninho Estudante de Pós-Graduação Go Expert @ Full Cycle


📄 Licença

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 🚀

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages