Arquitetura
Visão Geral
A arquitetura do sistema é composta por 2 aplicações: o backend e o frontend. O backend é responsável por fornecer uma API REST que apresenta as seguintes funcionalidades:
- Usuários:
- Autenticação
- Armazenamento de grades salvas
- Disciplinas:
- Busca por nome e código
- Grade:
- Gerador de grade de horários
O frontend é responsável por consumir a API REST e apresentar as informações para o usuário final. O fluxo da aplicação se dá da seguinte forma:
- O usuário acessa o site do Sua Grade UnB
- Há uma busca de disciplinas por nome ou código
- O usuário seleciona as disciplinas que deseja cursar
- O usuário gera as grades possíveis
- O usuário salva a grade que desejar ou mantém no armazenamento local
Design do Sistema
O design do sistema foi feito utilizando a ferramenta Figma e comporta-se da seguinte forma:
- O usuário acessa o site do Sua Grade UnB e é apresentado com a tela de login
- O usuário pode se cadastrar ou logar com uma conta já existente da Google
- Há o redirecionamento para tela de login da Google
- Logo após o login, a aplicação recebe um token de autenticação e a API pega as informações cedidas pela Google
- Assim, há o redirecionamento para a tela de busca de disciplinas
- O usuário pode buscar por disciplinas por nome ou código e a API gerencia esse search
- O usuário pode selecionar as disciplinas que deseja cursar
- Após isso, há um request para gerar as grades possíveis e API retorna as 5 melhores grades
- O usuário pode salvar a grade que desejar ou manter no armazenamento local
- O salvamento é feito no Banco de Dados e a API gerencia esse save para acessar posteriormente de qualquer dispositivo
Lógica do WebScraping
Para nossa aplicação gerenciar as disciplinas e horários disponíveis, foi necessário fazer um web scraping no site da UnB para obter as informações necessárias e não gerar um overload de requisições no site da universidade.
Após a obtenção dos dados, foi feito um tratamento para que as informações ficassem mais legíveis e organizadas para o usuário final, cadastrando-as no Banco de Dados PostgreSQL que é gerenciado pela API Django.
As requisições de web scraping ainda não são feitas de forma automática, mas sim pela equipe de desenvolvimento, assim tentamos executar o web scraping a cada 24h para manter as informações atualizadas.
- Para execução do web scraping de forma total é necessário executar o comando
make updatedb-all
no servidor da Heroku.
Lógica da criação de grades
Para a criação de grades, foi necessário utilizar o algoritmo de produto cartesiano para gerar todas as combinações possíveis de horários e disciplinas. Após isso, foi feito um tratamento para que as grades geradas não tivessem conflitos de horários e que não houvesse disciplinas repetidas.
- Para execução desse algoritmo foi utilizado o itertools.product do Python.
Extra: Se você quiser saber mais sobre o algoritmo de produto cartesiano, pode acessar site www.cuemath.com.