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:
- Um estudante quer trocar de turmas de forma direta com outro estudante.
- Dirige-se à plataforma de troca de turmas.
- Autentica-se e escolhe o conjunto de unidades curriculares que quer trocar com o outro estudante.
- 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
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:
- Um estudante pretende trocar de uma turma para outra ou de várias para outras.
- O estudante publica esse objetivo
- 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:
- Um estudante quer trocar de turmas sem ter outro estudante com quem trocar.
- Dirige-se à plataforma de troca de turmas.
- Autentica-se e escolhe a turma ou as turmas com as quais pretende ir para.
- Os pedidos ficam guardados no sistema.
- Após um certo periodo de tempo, um algoritmo analísa os pedidos e tenta maximizar o número de trocas satisfeitas.
- É 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
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 |