UNPKG

the-game-domain

Version:

Complete domain layer for 'The Game' card game with rich business entities, automatic persistence, action tracking, and advanced game mechanics. Features Game, Player, Card, Deck, Pile entities with repository pattern, turn management, victory/defeat dete

173 lines (129 loc) 4.89 kB
# 🎯 Domínio - The Game Pacote de domínio do jogo "The Game" contendo toda a lógica de negócio e regras do jogo. ## 📋 Sobre Este pacote contém as entidades de domínio, regras de negócio e lógica central do jogo "The Game", seguindo os princípios de Domain-Driven Design (DDD). É uma biblioteca TypeScript independente que pode ser usada em qualquer projeto que precise implementar as regras deste jogo de cartas. ## 🚀 Tecnologias - **TypeScript** - Tipagem estática - **Jest** - Testes unitários - **Domain-Driven Design** - Arquitetura de domínio - **Clean Architecture** - Separação de responsabilidades ## 📁 Estrutura ``` src/ ├── entities/ # Entidades de domínio │ ├── Card.ts # Entidade Carta │ ├── Deck.ts # Entidade Baralho │ ├── Game.ts # Entidade Jogo │ ├── GameAction.ts # Entidade Ação │ ├── Pile.ts # Entidade Pilha │ └── Player.ts # Entidade Jogador ├── repositories/ # Interfaces de repositório ├── utils/ # Utilitários └── value-objects/ # Objetos de valor docs/ # 📚 Documentação ``` ## 🚀 Quick Start ### Pré-requisitos - Node.js 18+ - npm ou yarn - Git ### Instalação 1. **Clone o repositório** ```bash git clone https://github.com/rtsarakaki/the-game-domain.git cd the-game-domain ``` 2. **Configure o .npmrc localmente** ```bash npm run setup:npmrc ``` 3. **Instale as dependências** ```bash npm install ``` 4. **Execute os testes** ```bash npm test ``` ### Para Usuários ```bash # Instalar o pacote npm install the-game-domain # Usar no seu código import { Game } from 'the-game-domain' const game = new Game(2) // 2 jogadores ``` ### Para Desenvolvedores ```bash # Instalar dependências npm install # Testes npm test npm test:watch # Build npm build # Lint npm lint ``` ## 📋 Próximos Passos 1. **📖 Leia a [Documentação Completa](docs/)** para entender os conceitos 2. **🎮 Comece com a [Entidade Game](docs/Game.md)** - a principal do sistema 3. **🃏 Explore as [Entidades](docs/)** para entender cada componente 4. **📦 Configure [Publicação Local](docs/PUBLISH.md)** se quiser testar - ⚠️ **Importante:** Precisa rodar o Verdaccio primeiro (veja [🐳 Verdaccio Docker](docs/DOCKER.md)) ## 📚 Documentação ### 🚀 Primeiros Passos 1. **[📖 Documentação Completa](docs/)** - Visão geral e conceitos 2. **[🐳 Verdaccio Docker](docs/DOCKER.md)** - Configuração do registry local (obrigatório para publicação) 3. **[📦 Publicação Local](docs/PUBLISH.md)** - Como instalar e publicar localmente ### 🎯 Entidades de Negócio 4. **[🎮 Jogo](docs/Game.md)** - Entidade principal (comece aqui!) 5. **[🃏 Cartas](docs/Card.md)** - Entidade Card (validação de valores 1-100) 6. **[🎴 Baralho](docs/Deck.md)** - Entidade Deck (gestão de cartas 2-99) 7. **[👤 Jogador](docs/Player.md)** - Entidade Player (gestão de mão e turnos) 8. **[📚 Pilha](docs/Pile.md)** - Entidade Pile (regras de descarte) ### ⚙️ Recursos Avançados 9. **[🗄️ Repository System](docs/Repository.md)** - Sistema de persistência in-memory 10. **[🚀 GitHub Actions](docs/GITHUB_ACTIONS.md)** - Publicação automática no npm público 11. **[🔢 Versionamento Automático](docs/VERSIONING.md)** - Semantic versioning automático 12. **[📦 NPM Registry Inteligente](docs/NPM_REGISTRY.md)** - Fallback automático entre Verdaccio e npm público ## 🎯 Entidades ### Core Entities - **`Game`** - Estado do jogo e regras principais - **`Player`** - Jogador e suas cartas - **`Card`** - Carta individual - **`Deck`** - Baralho de cartas - **`Pile`** - Pilhas do jogo (crescente/decrescente) ### Supporting Entities - **`GameAction`** - Histórico de ações do jogo ## 🎮 Regras do Jogo ### Objetivo Descartar todas as cartas antes dos outros jogadores. ### Mecânicas - Cada jogador recebe 6 cartas - Cartas devem ser jogadas em ordem crescente ou decrescente - Diferença de 10 é permitida entre cartas - Jogador deve jogar pelo menos 1 carta por turno - Vitória: descartar todas as cartas - Derrota: não conseguir jogar cartas obrigatórias ## 🧪 Testes O domínio possui cobertura completa de testes para garantir a integridade das regras de negócio: ```bash # Executar todos os testes npm test # Testes em modo watch npm test:watch # Cobertura de testes npm run test:coverage ``` ## 📦 Uso ```typescript import { Game, Player, Card } from 'the-game-domain' // Criar um novo jogo const game = new Game(['Jogador 1', 'Jogador 2']) // Jogar uma carta game.moveCardToPile(playerId, cardId, pileId) // Verificar estado console.log(game.isFinished) console.log(game.currentPlayerId) ```