O QuickQuiz é um projeto de revisão de programação por meio de quizzes curtos. Ele permite escolher um tópico e uma dificuldade, responder às questões e consultar o resultado. Este guia analítico aborda a experiência de edição e publicação do QuickQuiz.
Problema de Desempenho
O QuickQuiz era uma aplicação SPA em Vue/Quasar, com uma API em Go e um gerenciador de conteúdo em Symfony. O conteúdo era mantido em arquivos JSON no S3. A API carregava esses arquivos em memória ao iniciar e usava essa cópia para atender os jogadores. O gerenciador precisava listar questões, calcular quantidades, validar conteúdo e permitir edições. Conforme o catálogo cresceu, navegar no editor ficou demorado.
Solução: Migrar para Banco de Dados PostgreSQL
Para resolver esse problema, migramos a edição de temas, tópicos, questões e alternativas para PostgreSQL. As páginas do gerenciador passaram a consultar o banco, inclusive para filtros e contagens, sem precisar ler objetos no S3 durante a navegação normal. Isso permitiu melhorar a experiência de edição preservando o contrato que a API e as SPAs já utilizavam.
Publicação e Recarga
O gerenciador registra a revisão do conteúdo e o resultado da publicação. Se a publicação falhar, essa situação precisa ficar visível e permitir uma nova tentativa. Existe ainda uma limitação operacional: a API carrega o catálogo na inicialização. Para novas questões aparecerem no jogo, hoje preciso recarregar o serviço depois da publicação. O estado das partidas fica no Redis, o que permite preservar as sessões ativas durante esse reinício.
Integração de IA
O QuickQuiz também faz parte do meu estudo sobre adoção de IA em aplicações. Estou explorando seu uso em dois momentos. No gerenciador, a IA ajuda a criar enunciados e alternativas. Posso revisar e editar as sugestões antes de salvá-las e publicá-las. Esse conteúdo passa a integrar o banco de questões utilizado nas partidas, permitindo reaproveitar a mesma geração em várias rodadas. Ao final do quiz, o jogador pode solicitar uma explicação para uma questão que errou. A correção já foi determinada pelo gabarito; a IA recebe a questão e suas alternativas para explicar a resposta correta e os conceitos envolvidos. As explicações ficam em cache e podem ser reutilizadas enquanto forem compatíveis com o conteúdo da questão.
Aprendizado
O principal aprendizado foi olhar separadamente para as consultas do editor e para a leitura feita durante o jogo. O mesmo conteúdo tinha necessidades diferentes em cada parte da aplicação, e essa diferença passou a orientar a persistência.
Conclusão
O QuickQuiz está disponível em dev.quickquiz.com.br. Git ou JavaScript são dois tópicos para começar. Gostaria de ouvir principalmente se as perguntas estão claras e se o nível de dificuldade corresponde à sua expectativa. Se alguma questão parecer ambígua ou incorreta, pode comentar o tópico, a dificuldade e o enunciado para eu localizar e revisar. Também tenho interesse em saber como vocês lidam com a separação entre edição e publicação.