Aplicação estilo Pokédex para visualizar e explorar personagens do universo de God of War.
- Backend: Python com FastAPI
- Frontend: React
- Containerização: Docker e Docker Compose
- Armazenamento: JSON (sem banco de dados)
godex/
├── api/ # Backend Python
│ ├── app/
│ │ ├── main.py # Aplicação FastAPI
│ │ ├── models/ # Modelos Pydantic
│ │ ├── routers/ # Rotas da API
│ │ └── data/ # Dados JSON
│ ├── requirements.txt
│ └── Dockerfile
├── web/ # Frontend React
│ ├── src/
│ │ ├── components/ # Componentes React
│ │ ├── services/ # Serviços API
│ │ └── App.jsx
│ ├── package.json
│ └── Dockerfile
└── docker-compose.yml
- Docker e Docker Compose instalados
- Git (opcional)
- Clone ou baixe o repositório:
cd godex- Execute com Docker Compose:
docker-compose up --build- Acesse a aplicação:
- Frontend: http://localhost:3000
- Backend API: http://localhost:8000
- Documentação da API: http://localhost:8000/docs
- Parar os containers:
docker-compose down- Ver logs:
docker-compose logs -f- Reconstruir containers:
docker-compose up --buildRetorna lista de todos os personagens.
Resposta:
[
{
"id": 1,
"name": "Kratos",
"title": "Fantasma de Esparta",
...
}
]Retorna detalhes de um personagem específico.
Exemplo: /api/characters/1
- Listagem de personagens em grid estilo Pokédex
- Visualização detalhada de cada personagem
- Estatísticas, armas e habilidades
- Design responsivo
- Navegação intuitiva
Para desenvolver sem Docker:
cd api
pip install -r requirements.txt
uvicorn app.main:app --reloadPara desenvolver sem Docker:
cd web
npm install
npm startEdite o arquivo api/app/data/characters.json e adicione novos personagens seguindo a estrutura:
{
"id": 7,
"name": "Nome do Personagem",
"title": "Título",
"description": "Descrição",
"image": "URL da imagem",
"realm": "Reino",
"weapons": ["Arma 1", "Arma 2"],
"abilities": ["Habilidade 1", "Habilidade 2"],
"stats": {
"strength": 80,
"speed": 70,
"magic": 60,
"defense": 75
},
"games": ["Jogo 1", "Jogo 2"]
}Os containers são configurados com volumes para desenvolvimento, permitindo hot-reload tanto no backend quanto no frontend.
Este projeto é apenas para fins educacionais e de demonstração.