{"id":30838860,"url":"https://github.com/lucas4tech/golang-eudaimon-engine-clean-api-project","last_synced_at":"2025-09-06T18:13:01.851Z","repository":{"id":305638095,"uuid":"1023435956","full_name":"lucas4tech/golang-eudaimon-engine-clean-api-project","owner":"lucas4tech","description":"🏢 A robust API for managing users, products, and orders, built in Golang. Engineered with TDD, Clean Architecture, and DDD for maximum scalability and reliability 🔒","archived":false,"fork":false,"pushed_at":"2025-07-21T07:09:06.000Z","size":43,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-07-21T09:18:10.465Z","etag":null,"topics":["design-patterns","docker","docker-compose","domain-driven-design","golang","graphql","solid-principles","test-driven-development"],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/lucas4tech.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","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-21T06:56:27.000Z","updated_at":"2025-07-21T07:17:28.000Z","dependencies_parsed_at":"2025-07-21T09:32:37.746Z","dependency_job_id":null,"html_url":"https://github.com/lucas4tech/golang-eudaimon-engine-clean-api-project","commit_stats":null,"previous_names":["lucas4tech/golang-emptyname-clean-api-project"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/lucas4tech/golang-eudaimon-engine-clean-api-project","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucas4tech%2Fgolang-eudaimon-engine-clean-api-project","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucas4tech%2Fgolang-eudaimon-engine-clean-api-project/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucas4tech%2Fgolang-eudaimon-engine-clean-api-project/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucas4tech%2Fgolang-eudaimon-engine-clean-api-project/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/lucas4tech","download_url":"https://codeload.github.com/lucas4tech/golang-eudaimon-engine-clean-api-project/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/lucas4tech%2Fgolang-eudaimon-engine-clean-api-project/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":273941528,"owners_count":25195105,"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-09-06T02:00:13.247Z","response_time":2576,"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":["design-patterns","docker","docker-compose","domain-driven-design","golang","graphql","solid-principles","test-driven-development"],"created_at":"2025-09-06T18:12:56.802Z","updated_at":"2025-09-06T18:13:01.837Z","avatar_url":"https://github.com/lucas4tech.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"## 🏠 Visão Geral\n\nEste projeto é uma API moderna e eficiente para gerenciar usuários, produtos e pedidos, seguindo princípios de Clean Architecture, Domain-Driven Design (DDD), boas práticas de Go e desenvolvido com TDD (Test Driven Development) 🧪.\n\n---\n\n## 🛠️ Decisões Técnicas\n\n### 1. 🥞 Stack Principal\n- **Go:** `1.23.0`\n- **GraphQL:** `graphql-go`\n- **Banco de Dados:** `GORM` + `SQLite`\n- **Roteador:** `gorilla/mux`\n- **Logging:** `Logrus`\n- **Testes:** `testify`\n\n### 2. 🏗️ Arquitetura e Organização\n- **Domain-Driven Design (DDD):**\n  - Entidades, agregados e value objects modelam o domínio de forma explícita.\n  - Serviços de domínio encapsulam regras de negócio complexas.\n- **Clean Architecture:**\n  - Separação clara entre domínio, usecases, infraestrutura e interfaces (API).\n  - Facilita testes, manutenção e evolução do sistema.\n- **Pacotes:**\n  - `internal/domain/entity`: Entidades do domínio (User, Product, OrderItem).\n  - `internal/domain/aggregate`: Agregados (Order).\n  - `internal/domain/value_object`: Tipos de valor imutáveis (UUID, Money, Email).\n  - `internal/usecase`: Casos de uso (application service layer).\n  - `internal/infra/persistence/gorm`: Models e repositórios usando GORM.\n  - `internal/infra/api/graphql`: Schema e resolvers GraphQL.\n\n### 3. 🔗 GraphQL\n- **Retorno de dados aninhados:**\n  - Queries retornam dados completos e aninhados (usuário, itens, produto de cada item, etc).\n\n### 4. 🧪 Testes (TDD)\n- **Desenvolvimento orientado a testes (TDD):**\n  - As regras de negócio e entidades foram implementadas sempre acompanhadas de testes automatizados.\n- **Cobertura de testes:**\n  - Comando `make coverage` e integração com GitHub Actions.\n\n### 5. 🐳 Docker e Deploy\n- **Dockerfile multi-stage:**\n  - Imagem enxuta e segura, build separado do runtime.\n- **docker-compose:**\n  - Facilita rodar a aplicação localmente, com persistência do banco de dados.\n\n### 6. ⚙️ CI/CD\n- **GitHub Actions:**\n  - Workflow automatizado para build, testes e cobertura a cada push/pull request.\n\n---\n\n## ▶️ Como rodar localmente\n\n1. **Build e subir com Docker Compose:**\n   ```bash\n   docker-compose up --build\n   ```\n2. **Rodar testes:**\n   ```bash\n   make test\n   ```\n3. **Cobertura de testes:**\n   ```bash\n   make coverage\n   ```\n4. **Acessar a API:**\n   - [http://localhost:8080/graphql](http://localhost:8080/graphql)\n\n---\n\n## 💡 Observações\n- O projeto é facilmente adaptável para outros bancos relacionais.\n- O uso de value objects e entidades imutáveis garante integridade dos dados.\n- O GraphQL permite consultas flexíveis e aninhadas, ideais para frontend moderno.\n- Desenvolvido com TDD para máxima confiabilidade e facilidade de refatoração.\n\n---\n\n## 🤝 Contribuição\nPull requests são bem-vindos! Siga o padrão dos testes e mantenha a cobertura alta. 💚\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucas4tech%2Fgolang-eudaimon-engine-clean-api-project","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Flucas4tech%2Fgolang-eudaimon-engine-clean-api-project","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Flucas4tech%2Fgolang-eudaimon-engine-clean-api-project/lists"}