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
Markdown
# 🎯 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)
```