Este projeto é a API e servidor de WebSocket responsáveis pela lógica de jogo e comunicação em tempo real do Chess Multiplayer. Construído com Kotlin e Spring Boot, ele gerencia o estado das partidas, controle de tempo (relógio), histórico de movimentos e validação do lado do servidor.
O objetivo é fornecer uma arquitetura de comunicação bidirecional rápida e confiável, garantindo que os jogadores recebam atualizações do tabuleiro (FEN) e eventos da partida de forma instantânea.
A arquitetura foi pensada para escalar a comunicação em tempo real e isolar a complexidade das regras do jogo:
| Componente | Responsabilidade | Aplicação no Projeto |
|---|---|---|
| WebSocket | Comunicação full-duplex | Configuração centralizada para envio e recebimento de movimentos de xadrez e eventos em tempo real (PartidaWebSocketController). |
| Serviço de Relógio | Controle de Tempo Assíncrono | Um RelogioService e PartidaTimeoutScheduler gerenciam os modos de tempo e disparam eventos quando o tempo de um jogador esgota. |
| DTOs (Data Transfer Objects) | Desacoplamento de dados | Isolamento completo entre a camada de persistência (entidades) e as mensagens trafegadas no WebSocket. |
| Gestão de Estado | Consistência da Partida | A classe Partida mantém o estado atualizado (FEN, status, turno) evitando concorrência indesejada. |
| Inteligência Artificial | Análise de Desempenho | O GeminiService (Groq/LLaMA 3) atua sob demanda gerando JSON estruturado para analisar a partida e dar dicas sem ferir a LGPD. |
- Java JDK 17+
- Gradle (ou utilize o
gradlewembutido)
- Clone o repositório.
- Importe o projeto na sua IDE (IntelliJ IDEA recomendado).
- Execute o comando para iniciar a aplicação:
./gradlew bootRun- O servidor WebSocket estará disponível na porta configurada (padrão:
8080).
Ao iniciar a aplicação, um usuário administrador é criado automaticamente (se ainda não existir) para facilitar os testes da API e login no frontend:
- Email:
admin@email.com - Senha:
123456