Contribuindo

Tipos de Contribuição

Aceitamos diferentes tipos de contribuição:

  • 🐛 Bug Reports - Reportar problemas encontrados

  • 💡 Feature Requests - Sugerir novas funcionalidades

  • 📝 Documentation - Melhorar documentação

  • 🔧 Code Changes - Implementar melhorias

  • 🧪 Testing - Testar e validar funcionalidades

  • 🎨 UI/UX - Melhorar interface do usuário

Processo de Contribuição

  1. Fork o repositório

  2. Clone seu fork localmente

  3. Crie uma branch para sua feature

  4. Desenvolva suas mudanças

  5. Teste suas alterações

  6. Commit suas mudanças

  7. Push para sua branch

  8. Abra um Pull Request

Reportando Bugs

Template de Bug Report

Use o template de issue para bugs:

## 🐛 Bug Report

**Descrição do Bug**
Uma descrição clara e concisa do que aconteceu.

**Para Reproduzir**
Passos para reproduzir o comportamento:
1. Vá para '...'
2. Clique em '...'
3. Role até '...'
4. Veja o erro

**Comportamento Esperado**
Uma descrição clara do que deveria acontecer.

**Screenshots**
Se aplicável, adicione screenshots para ajudar a explicar o problema.

**Ambiente:**
- OS: [ex: Windows, macOS, Linux]
- Python: [ex: 3.10.0]
- Docker: [ex: 20.10.0]

**Contexto Adicional**
Adicione qualquer outro contexto sobre o problema aqui.

Informações Necessárias

Para bugs, inclua sempre:

  • Descrição detalhada do problema

  • Passos para reproduzir

  • Comportamento esperado vs atual

  • Screenshots (se aplicável)

  • Informações do ambiente

  • Logs de erro (se disponível)

Desenvolvimento

Configuração do Ambiente

  1. Fork e clone:

    git clone https://github.com/SEU_USUARIO/2025.1-Minecraft.git cd 2025.1-Minecraft

  2. Configure o ambiente:

    python -m venv venv source venv/bin/activate # Linux/macOS pip install -r app/requirements.txt

  3. Inicie os containers:

    docker-compose up -d

  4. Teste a instalação:

    python app/main.py

Criando uma Branch

Use branches descritivas:

# Para novas features
git checkout -b feat/nova-funcionalidade

# Para correções
git checkout -b fix/correcao-bug

# Para documentação
git checkout -b docs/melhorar-docs

Padrões de Código

Estilo de Código

Siga o PEP 8 para Python:

# ✅ Bom
def criar_personagem(nome: str, vida_max: int = 100) -> Optional[PlayerSession]:
    """Cria um novo personagem."""
    if not nome.strip():
        return None

    return PlayerSession(
        nome=nome,
        vida_max=vida_max,
        vida_atual=vida_max
    )

# ❌ Ruim
def criar_personagem(nome,vida_max=100):
    if nome=="":
        return None
    return PlayerSession(nome=nome,vida_max=vida_max,vida_atual=vida_max)

Documentação

Use docstrings no formato Google:

def calcular_dano(base: int, modificador: float = 1.0) -> int:
    """Calcula o dano baseado em valores e modificadores.

    Args:
        base: Dano base do ataque
        modificador: Multiplicador de dano (padrão: 1.0)

    Returns:
        Dano final calculado

    Raises:
        ValueError: Se base for negativo

    Example:
        >>> calcular_dano(10, 1.5)
        15
    """
    if base < 0:
        raise ValueError("Dano base não pode ser negativo")

    return int(base * modificador)

Tratamento de Erros

Use exceções específicas:

class PersonagemError(Exception):
    """Exceção base para erros de personagem."""
    pass

class NomeDuplicadoError(PersonagemError):
    """Exceção para nomes duplicados."""
    pass

def criar_personagem(nome: str) -> PlayerSession:
    if nome_existe(nome):
        raise NomeDuplicadoError(f"Nome '{nome}' já existe")

    # Criação do personagem...

Testes

Organização dos Testes

Os testes estão organizados em subpastas por categoria:

  • ``tests/model/``: Testes de models (Player, Chunk, Mapa, Bioma)

  • ``tests/repositorio/``: Testes de repositórios e padrão Repository

  • ``tests/servicos/``: Testes de serviços e integração

  • ``tests/utils/``: Testes de utilitários (preparado para futuro)

Ao adicionar novos testes, coloque-os na pasta apropriada:

# Para novos models
tests/model/test_novo_model.py

# Para novos repositórios
tests/repositorio/test_novo_repository.py

# Para novos serviços
tests/servicos/test_novo_service.py

# Para novos utilitários
tests/utils/test_novo_utils.py

Escrevendo Testes

Crie testes para novas funcionalidades:

import pytest
from utils.player_manager import PlayerSession, criar_personagem

def test_criar_personagem_sucesso():
    """Testa criação bem-sucedida de personagem."""
    player = criar_personagem("Teste", 100)

    assert player is not None
    assert player.nome == "Teste"
    assert player.vida_max == 100
    assert player.vida_atual == 100

def test_criar_personagem_nome_vazio():
    """Testa criação com nome vazio."""
    with pytest.raises(ValueError):
        criar_personagem("")

def test_criar_personagem_nome_duplicado():
    """Testa criação com nome duplicado."""
    criar_personagem("Teste")

    with pytest.raises(NomeDuplicadoError):
        criar_personagem("Teste")

Executando Testes

# Instalar pytest
pip install pytest pytest-cov

# Executar todos os testes
pytest

# Executar testes por categoria
pytest tests/model/ -v
pytest tests/repositorio/ -v
pytest tests/servicos/ -v

# Com cobertura
pytest --cov=app --cov-report=html

# Testes específicos
pytest tests/model/test_player_manager.py

Commits

Convenções de Commit

Use commits semânticos:

  • feat: Nova funcionalidade

  • fix: Correção de bug

  • docs: Documentação

  • style: Formatação (espaços, ponto e vírgula, etc.)

  • refactor: Refatoração de código

  • test: Adicionando ou corrigindo testes

  • chore: Tarefas de manutenção

Exemplos:

feat: add character deletion functionality
fix: resolve duplicate session exit message
docs: update installation guide
style: fix indentation in display.py
refactor: simplify player loading logic
test: add tests for character creation
chore: update dependencies

Mensagens de Commit

  • Use o imperativo (“add” não “added”)

  • Máximo 50 caracteres

feat: add character deletion functionality

- Add delete_player function to player_manager
- Add confirmation dialog for deletion
- Prevent deletion of active character
- Add tests for deletion functionality

Closes #123

Pull Requests

Criando um PR

  1. Atualize sua branch com a main:

    git checkout main git pull origin main git checkout sua-branch git rebase main

  2. Teste suas mudanças:

    python -m pytest python app/main.py

  3. Push suas mudanças:

    git push origin sua-branch

  4. Abra o PR no GitHub

Documentação

Atualizando Documentação

Para mudanças que afetam a documentação:

  1. Atualize os arquivos .rst relevantes

  2. Gere a documentação:

    cd docs make html

  3. Verifique se está correto:

    open build/html/index.html

  4. Commit as mudanças:

    git add docs/ git commit -m “docs: update API documentation”

Estrutura de Documentação

  • installation.rst: Guias de instalação

  • quickstart.rst: Início rápido

  • user_guide.rst: Guia do usuário

  • api_reference.rst: Documentação da API

  • database.rst: Estrutura do banco

  • development.rst: Guia de desenvolvimento

  • contributing.rst: Este guia

Para mais informações: