{"id":36731799,"url":"https://github.com/rgomids/go-api-template-clean","last_synced_at":"2026-01-12T12:13:40.582Z","repository":{"id":305069345,"uuid":"1021134925","full_name":"rgomids/go-api-template-clean","owner":"rgomids","description":"Template de API em Go com Clean Architecture e princípios SOLID aplicados de forma rigorosa. Organizado em camadas desacopladas (domain, usecase, infra, handler), com injeção explícita de dependências, testes facilitados e prontos para CI/CD e Docker. Ideal para projetos escaláveis, modulares e com foco em legibilidade e manutenção a longo prazo.","archived":false,"fork":false,"pushed_at":"2025-07-20T21:28:03.000Z","size":119,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-08-16T11:23:53.147Z","etag":null,"topics":["api","clean-architecture","docker","go","makefile","solid"],"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/rgomids.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":"2025-07-17T00:17:16.000Z","updated_at":"2025-07-17T03:39:19.000Z","dependencies_parsed_at":"2025-07-18T06:51:34.407Z","dependency_job_id":"ef232c00-b339-4005-8a5e-5057cfedf592","html_url":"https://github.com/rgomids/go-api-template-clean","commit_stats":null,"previous_names":["rgomids/go-api-template-clean"],"tags_count":0,"template":true,"template_full_name":null,"purl":"pkg:github/rgomids/go-api-template-clean","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgomids%2Fgo-api-template-clean","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgomids%2Fgo-api-template-clean/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgomids%2Fgo-api-template-clean/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgomids%2Fgo-api-template-clean/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rgomids","download_url":"https://codeload.github.com/rgomids/go-api-template-clean/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rgomids%2Fgo-api-template-clean/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":28338975,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-01-12T10:58:46.209Z","status":"ssl_error","status_checked_at":"2026-01-12T10:58:42.742Z","response_time":98,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.5:443 state=error: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["api","clean-architecture","docker","go","makefile","solid"],"created_at":"2026-01-12T12:13:40.179Z","updated_at":"2026-01-12T12:13:40.578Z","avatar_url":"https://github.com/rgomids.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# go-api-template-clean\n\nEste repositório apresenta uma estrutura base para APIs em Go.\nConsulte o diretório [`docs`](docs/README.md) para detalhes de arquitetura e instruções de uso.\n\n## Requisitos\n\n- Go 1.20 ou superior\n- Make\n- Ferramentas de lint como [staticcheck](https://staticcheck.io) (instalado via `make setup`)\n\n## Conexões externas\n\nO projeto já inclui integrações para:\n\n- Banco de dados PostgreSQL\n- Cache Redis\n- Envio de emails via SMTP\n\n## Configuração rápida\n\n1. Execute o comando abaixo para preparar o ambiente de desenvolvimento:\n   ```bash\n   make setup\n   ```\n   Esse passo copia o `.env.example` para `.env` (caso ainda não exista), instala as dependências Go e a ferramenta `staticcheck`.\n2. Ajuste as variáveis no arquivo `.env`:\n   - `APP_ENV` (dev|prod)\n   - `PORT` (padrão 8080)\n   - `DATABASE_URL` (obrigatória)\n   - `REDIS_URL`\n   - `SMTP_HOST`\n   - `SMTP_PORT` (padrão 587)\n   - `SMTP_USER`\n   - `SMTP_PASSWORD`\n3. Execute a aplicação:\n   ```bash\n   make run\n   ```\n\n## Testes e cobertura\n\nPara executar os testes com relatório de cobertura, utilize:\n\n```bash\nmake coverage\n```\nO comando gera os arquivos `coverage/coverage.out` e `coverage/coverage.html`.\n\n## Rotas disponíveis\n\n- `GET /health` retorna o status e a versão da API.\n- `POST /users` cria um usuário.\n- `DELETE /users/{id}` remove um usuário.\n\nImporte a coleção `docs/postman_collection.json` e o ambiente `docs/postman_environment.json` no Postman para testar os endpoints rapidamente.\n\n## Evoluindo a API\n\nSiga os passos abaixo para adicionar novas funcionalidades. O exemplo a seguir mostra como criar uma rota para cadastro de produtos.\n\n1. Crie a estrutura do produto em `internal/domain/entity/product.go`:\n   ```go\n   package entity\n\n   type Product struct {\n       ID   string\n       Name string\n   }\n   ```\n2. Defina `ProductRepository` em `internal/domain/repository` e a interface `ProductService` em `internal/domain/service`.\n3. Implemente `ProductUseCase` em `internal/domain/usecase` seguindo as interfaces criadas.\n4. Crie `ProductHandler` em `internal/handler/http` para expor os métodos via HTTP.\n5. Registre as rotas em `internal/handler/http/routes/routes.go`:\n   ```go\n   func RegisterRoutes(router *chi.Mux, userHandler *http.UserHandler, productHandler *http.ProductHandler) {\n       router.Route(\"/users\", func(r chi.Router) {\n           r.Post(\"/\", userHandler.Register)\n           r.Delete(\"/{id}\", userHandler.Delete)\n       })\n\n       router.Route(\"/products\", func(r chi.Router) {\n           r.Post(\"/\", productHandler.Create)\n           r.Get(\"/{id}\", productHandler.FindByID)\n       })\n   }\n   ```\n6. Atualize `BuildContainer` em `internal/app/container.go` para injetar o novo handler.\n7. Execute `go test ./...` para garantir que tudo continua funcionando.\n\n### Referências sobre Patterns\n- [Wikipedia - Software design pattern](https://en.wikipedia.org/wiki/Software_design_pattern)\n- [Refactoring Guru - Design Patterns in Go](https://refactoring.guru/design-patterns/go)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frgomids%2Fgo-api-template-clean","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frgomids%2Fgo-api-template-clean","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frgomids%2Fgo-api-template-clean/lists"}