Skip to content

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:

  1. O usuário acessa o site do Sua Grade UnB
  2. Há uma busca de disciplinas por nome ou código
  3. O usuário seleciona as disciplinas que deseja cursar
  4. O usuário gera as grades possíveis
  5. 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:

  1. O usuário acessa o site do Sua Grade UnB e é apresentado com a tela de login
  2. O usuário pode se cadastrar ou logar com uma conta já existente da Google
  3. Há o redirecionamento para tela de login da Google
  4. Logo após o login, a aplicação recebe um token de autenticação e a API pega as informações cedidas pela Google
  5. Assim, há o redirecionamento para a tela de busca de disciplinas
  6. O usuário pode buscar por disciplinas por nome ou código e a API gerencia esse search
  7. O usuário pode selecionar as disciplinas que deseja cursar
  8. Após isso, há um request para gerar as grades possíveis e API retorna as 5 melhores grades
  9. O usuário pode salvar a grade que desejar ou manter no armazenamento local
  10. 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.

Extra: Se você quiser saber mais sobre o algoritmo de produto cartesiano, pode acessar site www.cuemath.com.

Tecnologias Utilizadas

Backend

Frontend