{"id":28281865,"url":"https://github.com/joschonarth/node-clean-domain","last_synced_at":"2026-04-16T11:01:53.291Z","repository":{"id":290625557,"uuid":"941616534","full_name":"joschonarth/node-clean-domain","owner":"joschonarth","description":"🧩 Independent and decoupled Domain Layer, developed following the principles of DDD, to model business rules in a clear, consistent and reusable way.","archived":false,"fork":false,"pushed_at":"2025-05-02T18:35:44.000Z","size":152,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-06-17T00:41:44.290Z","etag":null,"topics":["aggregate-root","clean-architecture","ddd","design-patterns","domain","domain-driven-design","domain-events","either","eslint","factory-pattern","in-memory","nodejs","solid","tdd","typescript","value-object","vitest","watched-list","zod"],"latest_commit_sha":null,"homepage":"https://github.com/joschonarth/nest-clean-api","language":"TypeScript","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/joschonarth.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-03-02T17:52:40.000Z","updated_at":"2025-05-02T18:35:47.000Z","dependencies_parsed_at":"2025-04-29T19:58:53.809Z","dependency_job_id":null,"html_url":"https://github.com/joschonarth/node-clean-domain","commit_stats":null,"previous_names":["joschonarth/node-clean-domain"],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/joschonarth/node-clean-domain","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fnode-clean-domain","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fnode-clean-domain/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fnode-clean-domain/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fnode-clean-domain/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/joschonarth","download_url":"https://codeload.github.com/joschonarth/node-clean-domain/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/joschonarth%2Fnode-clean-domain/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31882886,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-16T09:23:21.276Z","status":"ssl_error","status_checked_at":"2026-04-16T09:23:15.028Z","response_time":69,"last_error":"SSL_connect returned=1 errno=0 peeraddr=140.82.121.6: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":["aggregate-root","clean-architecture","ddd","design-patterns","domain","domain-driven-design","domain-events","either","eslint","factory-pattern","in-memory","nodejs","solid","tdd","typescript","value-object","vitest","watched-list","zod"],"created_at":"2025-05-21T12:13:47.692Z","updated_at":"2026-04-16T11:01:53.276Z","avatar_url":"https://github.com/joschonarth.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003ch1 align=\"center\"\u003e🧩 Camada de Domínio com DDD e Clean Architecture\u003c/h1\u003e\n\n\u003cp align=\"center\"\u003e\u003ci\u003eCamada de \u003cb\u003eDomínio\u003c/b\u003e independente e desacoplada, desenvolvida seguindo os princípios do \u003cb\u003eDomain-Driven Design\u003c/b\u003e e da \u003cb\u003eClean Architecture\u003c/b\u003e, para modelar regras de negócio de forma clara, consistente e reutilizável.\u003c/i\u003e\u003c/p\u003e\n\n## 📑 Índice\n\n- [📖 Visão Geral](#-visão-geral)\n- [🛠️ Tecnologias Utilizadas](#️-tecnologias-utilizadas)\n- [⚙️ Funcionalidades](#️-funcionalidades)\n- [📚 Conceitos Aplicados](#-conceitos-aplicados)\n- [🗂️ Estrutura do Projeto](#️-estrutura-do-projeto)\n- [🧪 Testes](#-testes)\n- [🌐 Relação com a API](#-relação-com-a-api)\n- [🤝 Contribuições](#-contribuições)\n- [⭐ Apoie este Projeto](#-apoie-este-projeto)\n- [📞 Contato](#-contato)\n\n## 📖 Visão Geral\n\nEste projeto representa a camada de domínio de uma aplicação construída com base nos princípios do **Domain-Driven Design (DDD)** e da **Clean Architecture**.\n\nResponsável por centralizar as regras de negócio, o domínio é totalmente independente de frameworks e infraestrutura, tornando-o reutilizável, testável e manutenível.\n\nA modelagem segue os fundamentos do **DDD**, com foco em refletir com fidelidade os processos centrais de um fórum, como o gerenciamento de usuários, tópicos, postagens, respostas e comentários.\n\n## 🛠️ Tecnologias Utilizadas\n\n- 🟢 **Node.js**: Plataforma para execução do JavaScript no servidor.\n- 🟦 **TypeScript**: Tipagem estática para segurança e escalabilidade.\n- 🧪 **Vitest**: Testes de unidade para garantir a integridade das regras de negócio.\n- 🧩 **Zod**: Validação de entidades e objetos de valor.\n- ⚙️ **ESLint**: Padronização e qualidade de código.\n\n## ⚙️ Funcionalidades\n\n- 📝 **Criação e gestão de perguntas**: Usuários podem criar, editar e excluir suas próprias perguntas no fórum.\n- 💬 **Sistema de respostas**: Respostas podem ser adicionadas a perguntas e editadas ou excluídas posteriormente.\n- 🗨️ **Sistema de comentários**: Comentários podem ser adicionados a perguntas e respostas, além de poderem ser editados ou excluídos.\n- 🏆 **Escolha da melhor resposta**: O autor de uma pergunta pode marcar uma resposta como a melhor solução.\n- 🔍 **Busca de perguntas e respostas**: Permite consultar perguntas recentes, respostas e seus respectivos comentários.\n- 🗑️ **Gerenciamento de conteúdo**: Permite a exclusão de perguntas, respostas e comentários específicos.\n\n## 📚 Conceitos Aplicados\n\n- 🧩 **Domain-Driven Design (DDD)**: Foco no domínio de negócio como núcleo da aplicação.\n- 🛡️ **Clean Architecture**: Separação de responsabilidades e independência de frameworks.\n- 🧱 **Entidades e Value Objects**: Organização robusta de dados e comportamentos.\n- 📂 **Repositórios como Contratos**: Persistência desacoplada e flexível.\n- 🧹 **SOLID**: Aplicação de princípios para alta manutenibilidade e extensibilidade.\n- 🧪 **TDD (Test-Driven Development)**: Desenvolvimento orientado a testes desde o início.\n- 🔄 **In-Memory Repository**: Repositório volátil usado para testes e simulações sem dependência externa.\n- 🏭 **Factory Pattern**: Criação estruturada de objetos para testes ou instâncias complexas.\n- 🧠 **Design Patterns**: Aplicação de padrões de projeto para promover reutilização, flexibilidade e clareza na modelagem.\n- 🌐 **Domain Events**: Comunicação entre partes do sistema através de eventos explícitos do domínio.\n- 🔗 **Aggregate Root**: Entidades raiz que garantem a integridade e consistência de um agregado.\n- 📜 **Watched List**: Lista observável usada para rastrear mudanças em coleções (ex: notificações de alterações).\n- ↔️ **Either**: Abordagem funcional para tratamento explícito de erros e retornos esperados.\n\n## 🗂️ Estrutura do Projeto\n\nA estrutura do projeto está organizada com foco em **modularidade**, **separação de responsabilidades** e adesão à **Clean Architecture**. A seguir, um panorama das principais pastas e seus propósitos:\n\n```plaintext\nnode-clean-domain/\n├── src/\n│   ├── core/                          # Camada genérica e compartilhada entre os domínios\n│   │   ├── entities/                  # Entidades base como AggregateRoot e WatchedList\n│   │   ├── errors/                    # Erros e exceções globais do domínio\n│   │   ├── events/                    # Eventos de domínio genéricos\n│   │   ├── repositories/              # Contratos genéricos de repositórios\n│   │   ├── types/                     # Tipos utilitários\n│   ├── domain/                        # Camadas específicas por contexto de domínio\n│   │   ├── forum/\n│   │   │   ├── application/           # Casos de uso e interfaces da camada de domínio\n│   │   │   │   ├── repositories/      # Contratos específicos de repositórios para o fórum\n│   │   │   │   └── use-cases/         # Casos de uso do fórum\n│   │   │   ├── enterprise/            # Entidades e regras de negócio específicas do fórum\n│   │   │   │   ├── entities/          # Entidades\n│   │   │   │   │   └── value-objects/ # Objetos de valor do domínio fórum\n│   │   │   │   └── events/            # Eventos específicos do domínio fórum\n│   │   ├── notification/\n│   │   │   ├── application/           # Camada de aplicação do domínio de notificações\n│   │   │   │   ├── repositories/      # Contratos de persistência para notificações\n│   │   │   │   ├── subscribers/       # Assinantes de eventos\n│   │   │   │   └── use-cases/         # Casos de uso para notificações\n│   │   │   └── enterprise/            # Entidades do domínio de notificações\n│   │   │       └── entities/\n├── test/\n│   ├── factories/                     # Fábricas para criação de entidades e objetos de teste\n│   ├── repositories/                  # Implementações in-memory dos repositórios para testes\n│   └── utils/                         # Utilitários de suporte aos testes\n```\n\n## 🧪 Testes\n\nEste projeto inclui **testes unitários** para garantir a confiabilidade e o funcionamento correto dos recursos implementados. Para executar os testes, utilize os seguintes comandos:\n\n- **Executar testes unitários:**\n\n  ```bash\n  npm run test\n  ```\n\n- **Executar testes unitários em modo de observação:**\n\n  ```bash\n  npm run test:watch\n  ```\n\n## 🌐 Relação com a API\n\nEsta camada **Domain** é utilizada pela aplicação que expõe a **API**, responsável por disponibilizar os recursos para consumo externo.\nA aplicação da **API** utiliza as entidades e regras definidas no **Domain** para realizar suas operações de forma consistente.\n\n👉 Você pode acessar o repositório da API [aqui](https://github.com/joschonarth/nest-clean-api).\n\n## 🤝 Contribuições\n\nContribuições são muito bem-vindas! Sinta-se à vontade para abrir issues ou pull requests com melhorias ou correções. 🚀\n\n## ⭐ Apoie este Projeto\n\nSe você gostou da aplicação, deixe uma ⭐ no repositório!\n\n## 📞 Contato\n\n[![LinkedIn](https://img.shields.io/badge/LinkedIn-0077B5?style=for-the-badge\u0026logo=linkedin\u0026logoColor=white)](https://www.linkedin.com/in/joschonarth/)\n[![Gmail](https://img.shields.io/badge/Gmail-D14836?style=for-the-badge\u0026logo=gmail\u0026logoColor=white)](mailto:joschonarth@gmail.com)\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoschonarth%2Fnode-clean-domain","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjoschonarth%2Fnode-clean-domain","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjoschonarth%2Fnode-clean-domain/lists"}