Requirements - tomaspalma/tts-fe-exchange GitHub Wiki

Sistema de Troca de Turmas (FEUP Exchange Revamped)

0. Introdução

Atualmente, o processo de troca de turmas sofre do problema de ser demasiado demorado e defeituoso.

Isto advém-se das seguintes situações:

  • Foi observado que uma grande maioria das pessoas, após a alocação de turmas, começa a inundar os grupos de conversa do ano respetivo da cadeira do horário do qual pretende trocar com perguntas cujo objetivo é encontrar outra pessoa. A quantidade de perguntas pode levar a que inúmeros pedidos sejam perdidos e ter um mecanismo de trocas indiretas é uma solução para esse problema.

  • É necessário o preenchimento de um formulário pelos alunos, o qual oferece pouco apoio ao seu preenchimento.

  • Trocas indiretas são efetuadas manualmente pela secretaria, o que implica uma sobrecarga indesejável de trabalho para estes, além de falhas e atrasos que podem surgir através desta.

O objetivo desta aplicação é elaborar um sistema de troca de turmas para facilitar o atual que permita necessariamente trocas diretas e preferencialmente trocas indiretas (estudantes colocam as suas preferências de trocas de turma e ao fim de um tempo o programa corre um algoritmo de criação de trocas). Esta plataforma será integrada dentro do TimeTableScheduler desenvolvido pelo NIAEFEUP

Outros sistemas com funcionalidades similares incluem o Swap da Universidade do Minho.

1. Requisitos técnicos

1.1. Tecnologias Usadas

  • Django $\rightarrow$ Framework utilizada para a API com interação da base de dados.
  • React $\rightarrow$ Biblioteca de javascript para desenvolver a parte visual reativa.
  • Shadcn/ui $\rightarrow$ Biblioteca de componentes Tailwind para desenvolver a UI da plataforma.

1.2. Autenticação

Existem duas possibilidades discutidas

  • Utilizar o sistema de autenticação federada da Universidade do Porto.
  • Os estudantes colocam o seu email institucional, sendo enviadas credenciais enviadas para tal endereço eletrónico para confirmar a identidade desse estudante.

1.3. Submissão das escolhas das turmas

O processo atual engloba a geração de um ficheiro csv que depois é enviado para a diretora dos Sistemas de Informação para depois ser processado.

Uma possível solução que seria a desejada para implementar seria a plataforma de troca de turmas enviar as opções para a mesma.

2. Funcionalidades

2.1. Trocas diretas

A ideia de funcionamento desta funcionalidade seria:

  1. Um estudante quer trocar de turmas de forma direta com outro estudante.
  2. Dirige-se à plataforma de troca de turmas.
  3. Autentica-se e escolhe o conjunto de unidades curriculares que quer trocar com o outro estudante.
  4. Após submeter, irá ser enviado um email de confirmação ou uma notificação dentro da plataforma (dependendo se a autenticação federada poderá ser corretamente implementada).

Nota após submissão

Após a submissão, deverá ser mostrado ao estudante um pop-up de confirmação, assim como a informação de que irá receber um email de confirmação (este email de confirmação deverá ser enviado independentemente do tipo de autenticação implementada)

Como é que um estudante irá selecionar o outro estudante com o qual pretende trocar de turma com?

A especificação do estudante com o qual se pretende efetuar a troca irá depender da integração com o sigarra ou outro mecanismo:

  • Se for fácil sabermos os alunos inscritos a uma cadeira, podemos colocar um menu dropdown em que o estudante consegue facilmente encontrar o outro com o qual pretende trocar.
  • Caso não seja, o estudante irá apenas colocar o e-mail institucional ou o número mecanográfico do colega com o qual pretende trocar.

Nota sobre a obtenção das turmas que um estudante está inscrito

Caso não seja possível obter facilmente as turmas em que um estudante se encontra inscrito, ter-se-á de implementar um mecanismo de escolha das turmas em que se encontra inscrito similar ao popup que aparece para a escolha dos horários na aba Planner da plataforma do TTS.

2.1.1. Mockups da interface

Mockup da interface de trocas diretas

2.1.2. Possibilidade de uma ideia similar ao marketplace do Facebook

De modo a facilitar uma troca direta entre os estudantes, uma das ideias possíveis de se poder implementar mas que ainda não carecem de uma inclusão definitiva neste projeto, seria:

  1. Um estudante pretende trocar de uma turma para outra ou de várias para outras.
  2. O estudante publica esse objetivo
  3. Os outros estudantes conseguem filtrar os pedidos por turma e unidade curricular

2.2 Trocas indiretas

Dentro do escopo deste projeto, as trocas indiretas serão uma funcionalidade que é importante de ser implementada mas possui uma menor prioridade do que a funcionalidade das trocas diretas.

Numa modalidade mais autónoma e automática, o sistema de trocas indiretas funcionaria do seguinte modo:

  1. Um estudante quer trocar de turmas sem ter outro estudante com quem trocar.
  2. Dirige-se à plataforma de troca de turmas.
  3. Autentica-se e escolhe a turma ou as turmas com as quais pretende ir para.
  4. Os pedidos ficam guardados no sistema.
  5. Após um certo periodo de tempo, um algoritmo analísa os pedidos e tenta maximizar o número de trocas satisfeitas.
  6. É notificado, por email ou na plataforma que foi (ou não) encontrada uma troca.

2.2.1. Possíveis algoritmos

Dependendo do tipo de algoritmo que utilizarmos, será prudente, dependendo do peso e da complexidade do algoritmo, não utilizarmos a mesma linguagem (python) que está a ser utilizado no backend com django, uma vez que existem outras linguagens nas quais a implementação seria mais eficiente (como C ou Rust), em que seja possível fazer uma ponte entre django e outra linguagem.

Deteção de ciclos

Se modelarmos as trocas de turmas como um grafo para cada Unidade Curricular, em que cada nó é uma turma da Unidade Curricular e em que cada aresta representa um estudante que pretende uma troca, podemos simplificar o algoritmo para a deteção de ciclos.

  • Cada nó terá um número identificador da turma que representa no grafo (e.g. 9 no grafo CG seria o nó para a turma 9 de Computação Gráfica).
  • Cada aresta corresponderá a troca de um aluno de uma turma (origem) para outra (destino).
  • No caso de trocas que envolvem mais que uma UC, haverá arestas correspondentes à mesma troca em diferentes grafos, e será necessário verificar se todas são possíveis de satisfazer.

Na deteção de ciclos, se utilizarmos uma lista de adjacências para as arestas a complexidade de deteção de ciclos em cada grafo será $O(V + N)$.

2.2.2. Mockups da interface

Mockup da interface de trocas indiretas

3. User Stories

ID Prioridade Descrição
US01 Alta Como utilizador, eu quero efetuar um pedido de troca direta com outro utilizador à escolha
US02 Média Como utilizador, eu quero efetuar pedidos de trocas diretas de várias cadeiras com outro utilizador
US03 Média Como utilizador, eu quero autenticar-se na plataforma, obtendo assim as cadeiras a que está inscrito, facilitando o preenchimento do pedido de troca
US04 Média Como utilizador, eu quero efetuar trocas indiretas com outros utilizadores, apenas escolhendo as suas preferências
US05 Média Como utilizador, eu quero visualizar o horário resultante da troca
US06 Média Como utilizador, eu quero perceber se o seu horário é válido através da plataforma
US07 Alta Como utilizador, eu quero efetuar troca direta, confirmando o pedido através do correio eletrónico institucional
US08 Média Como utilizador, eu quero consultar a informação esclarecedora sobre o processo de pedido de troca de turmas
US09 Baixa Como utilizador, eu quero guardar as minhas escolhas para editar mais tarde
US10 Alta Como sistema, eu quero guardar as trocas confirmadas para posteriormente enviar um .csv formatado para a Diretora dos Sistemas de Informação
US11 Baixa Como utilizador, eu quero apagar as minhas escolhas selecionadas para as refazer de forma rápida

4. Anexos

Figma

Github