{"id":15771805,"url":"https://github.com/vagnercardosoweb/go-rest-api","last_synced_at":"2026-04-12T18:20:27.883Z","repository":{"id":172589964,"uuid":"593027879","full_name":"vagnercardosoweb/go-rest-api","owner":"vagnercardosoweb","description":"Create Rest API with GoLang","archived":false,"fork":false,"pushed_at":"2025-05-29T04:19:31.000Z","size":397,"stargazers_count":0,"open_issues_count":0,"forks_count":1,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-05-29T05:25:49.899Z","etag":null,"topics":["backend","gin-gonic","golang","http-server","postgresql","redis","rest-api"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/vagnercardosoweb.png","metadata":{"files":{"readme":"readme.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null}},"created_at":"2023-01-25T03:36:49.000Z","updated_at":"2025-05-29T04:19:34.000Z","dependencies_parsed_at":null,"dependency_job_id":"c4d79df3-4d9f-48e6-9ef9-ef11ccdc31a8","html_url":"https://github.com/vagnercardosoweb/go-rest-api","commit_stats":{"total_commits":61,"total_committers":1,"mean_commits":61.0,"dds":0.0,"last_synced_commit":"5318545a0bcdc95ae199f1a8f9fd8218b174494b"},"previous_names":["vagnercardosoweb/go-rest-api"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/vagnercardosoweb/go-rest-api","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vagnercardosoweb%2Fgo-rest-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vagnercardosoweb%2Fgo-rest-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vagnercardosoweb%2Fgo-rest-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vagnercardosoweb%2Fgo-rest-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/vagnercardosoweb","download_url":"https://codeload.github.com/vagnercardosoweb/go-rest-api/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/vagnercardosoweb%2Fgo-rest-api/sbom","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":267505099,"owners_count":24098346,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-07-28T02:00:09.689Z","response_time":68,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["backend","gin-gonic","golang","http-server","postgresql","redis","rest-api"],"created_at":"2024-10-04T15:05:15.347Z","updated_at":"2026-04-12T18:20:22.827Z","avatar_url":"https://github.com/vagnercardosoweb.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Go REST API\n\nUma API REST robusta e escalável desenvolvida em Golang, seguindo boas práticas de arquitetura limpa e design patterns modernos.\n\n## 🚀 Tecnologias Utilizadas\n\n- **Go 1.24+**: Linguagem de programação principal\n- **Gin**: Framework web para construção de APIs REST\n- **PostgreSQL**: Banco de dados relacional\n- **Redis**: Cache e gerenciamento de filas\n- **JWT**: Autenticação baseada em tokens\n- **Docker \u0026 Docker Compose**: Containerização e orquestração\n- **Golang Migrate**: Gerenciamento de migrações de banco de dados\n- **AWS SDK v2**: Integração com serviços AWS (SES, S3, SNS, SQS)\n- **Bcrypt**: Hash de senhas seguro\n- **Air**: Hot-reload para desenvolvimento\n- **Testcontainers**: Testes de integração com containers\n- **Slack Integration**: Sistema de alertas e notificações\n\n## 📋 Pré-requisitos\n\n- Go 1.24 ou superior\n- Docker e Docker Compose\n- Make (opcional, para facilitar o uso dos comandos)\n\n## ⚙️ Configuração do Ambiente\n\n1. **Clone o repositório:**\n\n   ```bash\n   git clone https://github.com/vagnercardosoweb/go-rest-api.git\n   cd go-rest-api\n   ```\n\n2. **Configure as variáveis de ambiente:**\n\n   ```bash\n   # Crie o arquivo de ambiente baseado no de exemplo\n   cp .env.example .env.development\n   # Edite o arquivo conforme necessário\n   ```\n\n3. **Instale as ferramentas de desenvolvimento (opcional):**\n   ```bash\n   make install_tools\n   ```\n\n## 🏃‍♂️ Executando o Projeto\n\n### Usando Docker (Recomendado) com Hot-Reload\n\n```bash\nmake start_docker\n```\n\n### Desenvolvimento Local com Hot-Reload\n\n```bash\nmake start_development\n```\n\n### Execução Direta\n\n```bash\nmake run\n```\n\n## 🗄️ Gerenciamento do Banco de Dados\n\n### Migrações\n\n```bash\n# Criar nova migração\nmake create_migration name=\"nome_da_migracao\"\n\n# Executar todas as migrações\nmake migration_up\n\n# Reverter a última migração\nmake migration_down\n\n# Reverter todas as migrações\nmake migration_clean\n```\n\n## 🧪 Testes\n\n```bash\n# Executar todos os testes\nmake test\n\n# Testes com detecção de race conditions\nmake test_race\n\n# Testes com relatório de cobertura\nmake test_coverage\n```\n\n## 🔍 Qualidade de Código\n\n```bash\n# Executar todas as verificações de qualidade\nmake quality\n\n# Verificações individuais\nmake lint          # Linting com golangci-lint\nmake security      # Verificações de segurança (gosec + govulncheck)\nmake staticcheck   # Análise estática\nmake format        # Formatação de código\n```\n\n## 🏗️ Build e Deploy\n\n### Build Local\n\n```bash\nmake generate_bin local\n```\n\n### Build para Linux (Produção)\n\n```bash\nmake generate_bin linux\n```\n\n### Build Docker\n\n```bash\n# Build local\nmake docker_build dev local\n\n# Build e push para AWS ECR\nmake docker_build prod aws\n```\n\n## 📁 Arquitetura do Projeto\n\n```\ngo-rest-api/\n├── cmd/api/                    # Ponto de entrada da aplicação\n├── internal/                   # Código específico da aplicação\n│   ├── events/                 # Sistema de eventos\n│   ├── handlers/               # Handlers HTTP por domínio\n│   │   └── user/\n│   ├── repositories/           # Camada de acesso a dados\n│   │   └── user/\n│   ├── schedules/              # Tarefas agendadas\n│   ├── services/               # Lógica de negócio\n│   │   └── user/\n│   └── types/                  # Tipos e estruturas específicas\n├── pkg/                        # Pacotes reutilizáveis\n│   ├── api/                    # Framework REST customizado\n│   │   ├── context/            # Contexto da API\n│   │   ├── handlers/           # Handlers genéricos\n│   │   ├── middlewares/        # Middlewares\n│   │   ├── request/            # Utilitários de request\n│   │   └── response/           # Utilitários de response\n│   ├── aws/                    # Clientes AWS (SES, S3, SNS, SQS)\n│   ├── env/                    # Gerenciamento de variáveis de ambiente\n│   ├── errors/                 # Sistema de tratamento de erros\n│   ├── events/                 # Sistema de eventos\n│   ├── logger/                 # Sistema de logging estruturado\n│   ├── mailer/                 # Sistema de envio de emails\n│   ├── monitoring/             # Profiling e monitoramento\n│   ├── password/               # Utilitários para hash de senhas\n│   ├── postgres/               # Cliente PostgreSQL\n│   ├── redis/                  # Cliente Redis\n│   ├── slack/                  # Integração com Slack\n│   ├── token/                  # Implementação JWT\n│   └── utils/                  # Funções utilitárias\n├── migrations/                 # Migrações do banco de dados\n├── resources/                  # Recursos estáticos\n│   ├── aws_ses_templates/      # Templates de email\n│   └── kubernetes/             # Manifests Kubernetes\n└── tests/                      # Utilitários para testes\n```\n\n## ✨ Funcionalidades Principais\n\n- **🔐 Autenticação JWT**: Sistema completo de autenticação baseado em tokens\n- **📧 Sistema de Email**: Integração com AWS SES e templates\n- **📊 Sistema de Eventos**: Arquitetura orientada a eventos para desacoplamento\n- **⏰ Tarefas Agendadas**: Scheduler para execução de jobs em background\n- **🔔 Alertas Slack**: Notificações automáticas de eventos importantes\n- **📝 Logging Estruturado**: Sistema de logs com metadados e redação de dados sensíveis\n- **🛡️ Tratamento de Erros**: Sistema padronizado de tratamento e propagação de erros\n- **📈 Monitoramento**: Profiling e métricas de performance\n- **🧪 Testes Integrados**: Suporte completo a testes com containers\n- **🐳 Containerização**: Suporte completo ao Docker e Kubernetes\n\n## 🌍 Variáveis de Ambiente\n\n### Aplicação\n\n- `APP_ENV`: Ambiente da aplicação (`development`, `production`, `test`)\n- `PORT`: Porta da aplicação (padrão: `3000`)\n- `IS_LOCAL`: Execução local (padrão: `false`)\n\n### Autenticação\n\n- `JWT_SECRET_KEY`: Chave secreta para assinatura JWT\n- `JWT_EXPIRES_IN_SECONDS`: Tempo de expiração do token (padrão: `86400`)\n\n### Banco de Dados\n\n- `DB_HOST`: Host do PostgreSQL\n- `DB_PORT`: Porta do PostgreSQL (padrão: `5432`)\n- `DB_NAME`: Nome do banco de dados\n- `DB_USERNAME`: Usuário do banco\n- `DB_PASSWORD`: Senha do banco\n- `DB_ENABLED_SSL`: Habilitar SSL (padrão: `false`)\n- `DB_AUTO_MIGRATE`: Executar migrações automaticamente (padrão: `false`)\n\n### Redis\n\n- `REDIS_HOST`: Host do Redis\n- `REDIS_PORT`: Porta do Redis (padrão: `6379`)\n- `REDIS_PASSWORD`: Senha do Redis\n- `REDIS_DATABASE`: Database do Redis (padrão: `0`)\n\n### AWS\n\n- `AWS_REGION`: Região AWS (padrão: `us-east-1`)\n- `AWS_ACCESS_KEY_ID`: Chave de acesso AWS\n- `AWS_SECRET_ACCESS_KEY`: Chave secreta AWS\n- `AWS_SES_SOURCE`: Email remetente para SES\n\n### Slack\n\n- `SLACK_ENABLED`: Habilitar integração Slack (padrão: `true`)\n- `SLACK_TOKEN`: Token do bot Slack\n- `SLACK_CHANNEL`: Canal para alertas (padrão: `alerts`)\n- `SLACK_USERNAME`: Nome do usuário bot (padrão: `go-rest-api`)\n\n### Sistema\n\n- `SCHEDULER_ENABLED`: Habilitar scheduler (padrão: `false`)\n- `SCHEDULER_SLEEP`: Intervalo do scheduler em segundos (padrão: `60`)\n- `LOGGER_ENABLED`: Habilitar logging (padrão: `true`)\n- `PROFILER_ENABLED`: Habilitar profiler (padrão: `false`)\n\n## 🚀 Pipeline CI/CD\n\n```bash\n# Executar pipeline completo\nmake ci\n```\n\nO pipeline inclui:\n\n1. Verificação de build e dependências\n2. Formatação de código\n3. Linting\n4. Análise estática\n5. Verificações de segurança\n6. Testes com cobertura\n\n## 📚 Comandos Disponíveis\n\nExecute `make help` para ver todos os comandos disponíveis organizados por categoria:\n\n- **🏗️ Build \u0026 Run**: `run`, `check_build`, `generate_bin`\n- **🐳 Docker**: `start_docker`, `docker_build`\n- **🧪 Testing**: `test`, `test_race`, `test_coverage`\n- **🔍 Quality \u0026 Security**: `lint`, `security`, `staticcheck`, `format`, `quality`\n- **📦 Installation**: `install_tools`, `lint_install`, `security_install`\n- **🚀 CI/CD**: `ci`\n- **🗄️ Database**: `create_migration`, `migration_up`, `migration_down`\n\n## 🤝 Contribuindo\n\n1. Faça um fork do projeto\n2. Crie uma branch para sua feature (`git checkout -b feat/AmazingFeature`)\n3. Execute os testes e verificações de qualidade (`make ci`)\n4. Commit suas mudanças (`git commit -m 'feat: add some AmazingFeature'`)\n5. Push para a branch (`git push origin feat/AmazingFeature`)\n6. Abra um Pull Request\n\n## 📄 Licença\n\nEste projeto está sob a licença MIT. Veja o arquivo [LICENSE](LICENSE) para mais detalhes.\n\n## 👨‍💻 Autor\n\nDesenvolvido por [Vagner Cardoso](https://github.com/vagnercardosoweb)\n\n---\n\n⭐ Se este projeto foi útil para você, considere dar uma estrela no repositório!\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvagnercardosoweb%2Fgo-rest-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fvagnercardosoweb%2Fgo-rest-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fvagnercardosoweb%2Fgo-rest-api/lists"}