Este é um planejamento detalhado para o microsserviço de Catálogo de Jogos, estruturado para atender a todos os requisitos do projeto GameVerse.
1. Nome do Microsserviço
Microsserviço de Catálogo e Metadados de Jogos
2. Integrantes do grupo
[Inserir nome completo de todos os integrantes aqui]
3. Objetivo do microsserviço
O objetivo deste serviço é centralizar e gerenciar todo o inventário de títulos disponíveis na plataforma GameVerse. Ele atua como a "vitrine" do ecossistema, resolvendo o problema de fragmentação de informações sobre os jogos. Sem ele, o sistema não teria uma fonte única de verdade para descrições, requisitos técnicos ou categorização. Ele é fundamental porque fornece os dados necessários para que a Loja exiba produtos e para que a Biblioteca do Usuário saiba exatamente o que o jogador adquiriu.
4. Responsabilidades do microsserviço
- Gerenciar o inventário: Cadastrar, atualizar e remover jogos do catálogo.
- Categorização: Administrar gêneros (RPG, FPS, Indie) e plataformas (PC, Console, Cloud).
- Curadoria de Conteúdo: Armazenar descrições detalhadas, notas de patch e classificações indicativas.
- Gestão de Mídia: Vincular URLs de imagens, trailers e capas aos respectivos títulos.
- Busca e Filtragem: Permitir que outros serviços consultem jogos por critérios específicos.
5. Dados que o serviço precisa receber
Para o cadastro ou atualização de um jogo, o serviço requer:
- Nome do jogo: (String)
- Descrição: (Text/Markdown)
- Gêneros: (Array de IDs ou nomes)
- Plataformas: (Array de IDs - ex: Steam, Epic, Xbox)
- Mídia: (URLs de imagens de capa e galeria)
- Desenvolvedora/Distribuidora: (String)
- Requisitos de Sistema: (Objeto JSON com CPU, GPU, RAM mínimos e recomendados)
6. Dados que o serviço deve retornar
Exemplo de resposta ao consultar um jogo específico:
{
"success": true,
"message": "Jogo localizado com sucesso",
"data": {
"game_id": "gv-8829",
"title": "Cyber-Acre 2077",
"slug": "cyber-acre-2077",
"platforms": ["PC", "Linux"],
"genres": ["Action", "RPG"],
"description": "Um RPG de ação em um futuro distópico no norte do Brasil.",
"images": {
"thumbnail": "https://cdn.gameverse.com/covers/ca2077_thumb.jpg",
"header": "https://cdn.gameverse.com/headers/ca2077_wide.jpg"
},
"active": true
}
}
7. Com quais serviços ele precisa se comunicar
- Loja de Jogos (Storefront): Para fornecer os dados que serão exibidos ao comprador.
- Biblioteca do Usuário: Para validar se o ID do jogo que o usuário possui ainda existe e está atualizado.
- Busca (Search Service): Para indexar novos títulos em motores de busca como Elasticsearch.
- Laravel Central/API Gateway: Para autenticação de administradores que gerenciam o catálogo.
8. Fluxo principal do serviço
- Administrador envia uma requisição de cadastro com os dados do novo jogo.
- O serviço valida se o título já existe e se todos os campos obrigatórios estão presentes.
- O serviço persiste os dados no banco de dados (Gêneros, Plataformas e Dados Gerais).
- O serviço emite um evento (via RabbitMQ/Kafka ou Webhook) informando que um novo jogo foi adicionado.
- A Loja recebe a atualização e passa a exibir o jogo para os usuários.
- O Usuário realiza uma busca e o serviço retorna a lista filtrada de jogos.
9. Rotas iniciais da API
- GET /api/v1/catalog/games (Listagem com paginação e filtros de gênero/plataforma)
- POST /api/v1/catalog/games (Criação de novo título - Restrito a Admin)
- GET /api/v1/catalog/games/{id_ou_slug} (Detalhes completos de um jogo específico)
- PATCH /api/v1/catalog/games/{id} (Atualização parcial de dados como descrição ou imagens)
10. Possíveis erros
- Jogo não encontrado: Quando um ID inválido é solicitado.
- Título Duplicado: Tentativa de cadastrar um jogo com nome ou slug já existente.
- Falha na persistência de mídia: Erro ao tentar vincular links de imagens inválidos.
- Dados incompletos: Envio de formulário sem campos obrigatórios (ex: sem plataforma definida).
- Incompatibilidade de Versão: Tentativa de atualizar um jogo que foi removido ou arquivado.
DEVE SER FEITO EM FAST API (python)
11. Como Executar (Docker)
Este projeto foi containerizado para facilitar a execução.
Pré-requisitos
- Docker e Docker Compose instalados.
Passos
- Execute o script na raiz do projeto:
./run.sh - A aplicação FastAPI estará disponível em: http://localhost:8000
- A documentação interativa (Swagger UI) pode ser acessada em: http://localhost:8000/docs
- O banco de dados PostgreSQL estará rodando internamente na porta
5432.