| (15 revisões intermediárias por 2 usuários não estão sendo mostradas) | |||
| Linha 72: | Linha 72: | ||
* RF13 - Exclusão de disciplinas | * RF13 - Exclusão de disciplinas | ||
** O sistema deve alertar o aluno caso o trancamento ou exclusão de uma disciplina comprometa a progressão ou organização da grade | ** O sistema deve alertar o aluno caso o trancamento ou exclusão de uma disciplina comprometa a progressão ou organização da grade | ||
<br> | |||
== Requisitos Não-Funcionais == | |||
<br> | |||
* RNF01 - Interface Amigável ['''Usabilidade'''] | |||
** O sistema deve possuir uma interface intuitiva e de fácil uso para estudantes sem conhecimento técnico. | |||
<br> | |||
* RNF02 - Responsividade | |||
** A interface deve ser responsiva, permitindo o uso em diferentes dispositivos (computadores, tablets e smartphones). | |||
<br> | |||
* RNF03 - Disponibilidade | |||
** O sistema deve ter uma disponibilidade de 99,5%, garantindo que os alunos possam acessar a qualquer momento | |||
<br> | |||
* RNF04 - Auto-Recuperação | |||
** Deve possuir um mecanismo de recuperação automática em caso de falha. | |||
<br> | |||
* RNF05 - Tempo de Resposta ['''Desempenho '''] | |||
** O sistema deve processar a simulação da grade curricular em no máximo 2 segundos. | |||
<br> | |||
* RNF06 - Atualização em Tempo Real ['''Desempenho'''] | |||
** A integração com o sistema deve ocorrer em tempo real, garantindo informações atualizadas sobre disciplinas e vagas Segurança | |||
<br> | |||
* RNF07 - Legalmente dentro dos padrões | |||
** O sistema deve estar em conformidade com a legislação vigente sobre proteção de dados (LGPD). | |||
<br> | |||
* RNF08 - Criptografia de Dados | |||
** Os dados dos usuários devem ser armazenados de forma criptografada. | |||
<br> | |||
* RNF09 - Suporte para Atualizações ['''Distribuição'''] | |||
** Deve oferecer suporte para atualizações automáticas sem perda de dados. | |||
<br> | |||
* RNF10 - Orientação a Objetos ['''Padrões'''] | |||
** O código deve ser feito totalmente orientado a objetos, sendo a linguagem de escolha C#, para maior compatibilidade com as demais ferramentas já utilizadas e para maior escalabilidade. | |||
<br> | |||
* RNF11 - Sistema Operacional ['''Hardware e software'''] | |||
** O sistema deve ser compatível com servidores Linux e Windows. | |||
<br> | <br> | ||
=== Fase 2 - 2025-2 === | === Fase 2 - 2025-2 === | ||
<br> | |||
<b> | |||
*Banco de Dados College Helper | |||
</b> | |||
Este script SQL cria toda a estrutura do banco de dados utilizada pelo sistema College Helper. Ele define o schema principal (college_helper) e todas as tabelas responsáveis por armazenar informações de cursos, disciplinas, requisitos, horários, usuários e alunos. | Este script SQL cria toda a estrutura do banco de dados utilizada pelo sistema College Helper. Ele define o schema principal (college_helper) e todas as tabelas responsáveis por armazenar informações de cursos, disciplinas, requisitos, horários, usuários e alunos. | ||
| Linha 83: | Linha 132: | ||
Esse conjunto de tabelas forma a base para funcionalidades como cadastro de disciplinas, montagem automática de horários, gestão de requisitos e administração de contas de estudantes e administradores dentro do sistema. | Esse conjunto de tabelas forma a base para funcionalidades como cadastro de disciplinas, montagem automática de horários, gestão de requisitos e administração de contas de estudantes e administradores dentro do sistema. | ||
<br> | |||
-- | |||
<b>create schema if not exists "college_helper";</b> | <b>create schema if not exists "college_helper";</b> | ||
| Linha 197: | Linha 249: | ||
select * from college_helper.usuario; | select * from college_helper.usuario; | ||
</pre> | </pre> | ||
== Melhores Práticas == | == Melhores Práticas == | ||
| Linha 327: | Linha 332: | ||
</pre> | </pre> | ||
= | = CRONOGRAMA = | ||
<br> | <br> | ||
| Linha 344: | Linha 349: | ||
| 5 || 17/11/2025 || Especificar RFs e RNFs - Fase 2 || 100% | | 5 || 17/11/2025 || Especificar RFs e RNFs - Fase 2 || 100% | ||
|- | |- | ||
| 6 || 17/11/2025 || RF01: Modelar o BD || | | 6 || 17/11/2025 || RF01: Modelar o BD || 100% | ||
|- | |||
| x || 24/11/2025 || TeckWeek || | |||
|- | |- | ||
| 7 || 01/12/2025 || Melhores Práticas || | | 7 || 01/12/2025 || Melhores Práticas || 100% | ||
|- | |- | ||
| 8 || 01/12/2025 || RF01: Modelar o BD || | | 8 || 01/12/2025 || RF01: Modelar o BD || 100% | ||
|- | |- | ||
| 9 || | | 9 || 01/12/2025 || RF02: Criar o BD || 100% | ||
|- | |||
| 10 || 01/12/2025 || RF03: Criar autenticação da aplicação || 80% | |||
|- | |||
| 11 || 15/12/2025 || Segunda Entrega || | |||
|- | |- | ||
| | | 12 || 02/02/2026 || Desenvolver 4o RF || 100% | ||
|- | |||
| 13 || || RF04: Criar tela de resultados pós upload da grade horária || | |||
|- | |||
| 14 || || Incrementar diferencial tecnológico || | |||
|- | |||
| 15 || 19/12/2025 || Cliente aguardando vídeo demo || | |||
|- | |||
|} | |||
{| class="wikitable" | |||
|- | |- | ||
! Item !! Data !! Atividades CollegeHelper!! Responsável | |||
|- | |- | ||
| | | 1 || 09/02/2026 || xx || | ||
|- | |- | ||
| 2 || 23/02/2026 || xx || | |||
|- | |||
| 3 || 02/03/2026 || xx || | |||
|- | |||
| 4 || 09/03/2026 || xx || | |||
|- | |||
| 5 || 16/03/2026 || xx || | |||
|- | |||
|} | |} | ||
Edição atual tal como às 20h55min de 9 de fevereiro de 2026
Fase 2
Escopo
- Desenvolver um aplicativo para uso dos universitários da faculdade UFU (Universidade Federal de Uberlândia), no qual seja possível definir a grade horária mais compatível com o aluno de acordo com o curso que o mesmo está matriculado e as matérias que ainda estão disponíveis para matrícula, baseando-se na rotina definida pelo aluno.
Requisitos Funcionais
Fase 1 - 2025-1
- RF01 - Cadastro
- O sistema deve permitir que o aluno realize o cadastro com nome, e-mail, matrícula e senha
- RF02 - Login
- O sistema deve permitir que o usuário realize login na plataforma utilizando seus dados, para ter uma experiencia customizada
- RF03 - Recuperação de senha
- O sistema deve permitir que o usuário recupere sua senha perdida por meio de um e-mail secundário ou número de telefone
Grade Curricular: requisitos que se relacionam e interagem com disciplinas, horários, matrícula, carga horária, pré-requisitos em disciplinas.
- RF04 - Listar disciplinas disponíveis
- O sistema deve exibir a lista de disciplinas disponíveis para o semestre atual, deixando para que o usuário escolha entre elas
- RF05 - Selecionar disciplinas
- O sistema deve permitir que o usuário selecione e peça a matrícula das disciplinas que ele desejar
- RF06 - Verificar conflitos entre disciplinas
- O sistema deve verificar e alertar o usuário de possíveis conflitos de horário ao selecionar as disciplinas desejadas
- RF07 - Validar Pré-requisitos
- O sistema deve validar os pré-requisitos antes de permitir a matrícula em uma disciplina
- RF08 - Verificar carga horária
- O sistema deve verificar a carga mínima e máxima permitida
- RF09 - Disponibilidade de vagas
- O sistema deve informar ao aluno a disponibilidade de vagas nas disciplinas selecionadas
Personalização de Grade
- RF10 - Preferencias de horários
- O sistema deve permitir que o aluno defina preferencias de horários e dias livres
- RF11 - Opções diferentes de grade curricular
- O sistema deve permitir que o aluno visualize diferentes opções de grades antes de confirmar a escolha
Ajuste e Modificação
- RF12 - Edição da grade
- sistema deve permitir que o aluno modifique sua grade, adicionando ou removendo disciplinas dentro do período de ajuste acadêmico
- RF13 - Exclusão de disciplinas
- O sistema deve alertar o aluno caso o trancamento ou exclusão de uma disciplina comprometa a progressão ou organização da grade
Requisitos Não-Funcionais
- RNF01 - Interface Amigável [Usabilidade]
- O sistema deve possuir uma interface intuitiva e de fácil uso para estudantes sem conhecimento técnico.
- RNF02 - Responsividade
- A interface deve ser responsiva, permitindo o uso em diferentes dispositivos (computadores, tablets e smartphones).
- RNF03 - Disponibilidade
- O sistema deve ter uma disponibilidade de 99,5%, garantindo que os alunos possam acessar a qualquer momento
- RNF04 - Auto-Recuperação
- Deve possuir um mecanismo de recuperação automática em caso de falha.
- RNF05 - Tempo de Resposta [Desempenho ]
- O sistema deve processar a simulação da grade curricular em no máximo 2 segundos.
- RNF06 - Atualização em Tempo Real [Desempenho]
- A integração com o sistema deve ocorrer em tempo real, garantindo informações atualizadas sobre disciplinas e vagas Segurança
- RNF07 - Legalmente dentro dos padrões
- O sistema deve estar em conformidade com a legislação vigente sobre proteção de dados (LGPD).
- RNF08 - Criptografia de Dados
- Os dados dos usuários devem ser armazenados de forma criptografada.
- RNF09 - Suporte para Atualizações [Distribuição]
- Deve oferecer suporte para atualizações automáticas sem perda de dados.
- RNF10 - Orientação a Objetos [Padrões]
- O código deve ser feito totalmente orientado a objetos, sendo a linguagem de escolha C#, para maior compatibilidade com as demais ferramentas já utilizadas e para maior escalabilidade.
- RNF11 - Sistema Operacional [Hardware e software]
- O sistema deve ser compatível com servidores Linux e Windows.
Fase 2 - 2025-2
- Banco de Dados College Helper
Este script SQL cria toda a estrutura do banco de dados utilizada pelo sistema College Helper. Ele define o schema principal (college_helper) e todas as tabelas responsáveis por armazenar informações de cursos, disciplinas, requisitos, horários, usuários e alunos.
Além disso, estabelece relacionamentos entre as entidades (incluindo chave estrangeira, deleções em cascata e validações), cria as extensões necessárias (como pgcrypto para gerar UUIDs) e garante regras importantes, como validação de perfis de usuário e integridade referencial da grade horária.
Esse conjunto de tabelas forma a base para funcionalidades como cadastro de disciplinas, montagem automática de horários, gestão de requisitos e administração de contas de estudantes e administradores dentro do sistema.
--
create schema if not exists "college_helper";
CREATE TABLE if not exists college_helper.curso
id SERIAL PRIMARY KEY,
nome TEXT NOT NULL,
coordenador TEXT,
codigo_do_curso BIGINT UNIQUE
CREATE TABLE if not exists college_helper.disciplina
id SERIAL PRIMARY KEY,
nome TEXT NOT NULL,
carga_horaria INTEGER NOT NULL,
periodo TEXT,
nome_professor TEXT,
curso_id INT REFERENCES college_helper.curso(id) ON DELETE SET NULL
CREATE TABLE if not exists college_helper.disciplina_requisito
disciplina_id INT NOT NULL REFERENCES college_helper.disciplina(id) ON DELETE CASCADE,
requisito_id INT NOT NULL REFERENCES college_helper.disciplina(id) ON DELETE CASCADE,
PRIMARY KEY (disciplina_id, requisito_id)
CREATE TABLE if not exists college_helper.horario_aula
id SERIAL PRIMARY KEY,
dia_semana INT NOT NULL, -- 1 a 7
hora_inicio TIME NOT NULL,
hora_fim TIME NOT NULL
CREATE TABLE if not exists college_helper.disciplina_horario
disciplina_id INT NOT NULL REFERENCES college_helper.disciplina(id) ON DELETE CASCADE,
horario_id INT NOT NULL REFERENCES college_helper.horario_aula(id) ON DELETE CASCADE,
PRIMARY KEY (disciplina_id, horario_id)
create extension if not exists pgcrypto;
create table if not exists college_helper.usuario
id UUID primary key default gen_random_uuid(),
nome text not null,
email text not null,
hash_senha text not null,
perfil text not null
constraint valid_roles
check (perfil in ('ESTUDANTE', 'ADMIN'))
CREATE TABLE if not exists college_helper.aluno
id SERIAL PRIMARY KEY,
nome TEXT NOT NULL,
matricula TEXT NOT NULL,
data_nascimento DATE,
periodo TEXT,
curso_id INT REFERENCES college_helper.curso(id) ON DELETE SET null,
usuario_id uuid not null references college_helper.usuario(id) on delete cascade
CREATE TABLE if not exists college_helper.grade_horaria
id SERIAL PRIMARY KEY,
aluno_id INT UNIQUE REFERENCES college_helper.aluno(id) ON DELETE CASCADE
CREATE TABLE if not exists college_helper.grade_horaria_disponibilidade
grade_id INT REFERENCES college_helper.grade_horaria(id) ON DELETE CASCADE,
horario INTEGER NOT NULL,
PRIMARY KEY (grade_id, horario)
CREATE TABLE if not exists college_helper.grade_horaria_preferencia
grade_id INT REFERENCES college_helper.grade_horaria(id) ON DELETE CASCADE, horario INTEGER NOT NULL, PRIMARY KEY (grade_id, horario)
CREATE TABLE if not exists college_helper.grade_horaria_disciplina
grade_id INT REFERENCES college_helper.grade_horaria(id) ON DELETE CASCADE,
disciplina_id INT REFERENCES college_helper.disciplina(id) ON DELETE CASCADE,
PRIMARY KEY (grade_id, disciplina_id)
-- Creates a user
-- if the role is from "ESTUDANTE" or "ADMIN", the DB will prevent the insertion
insert into college_helper.usuario(nome, email, hash_senha, perfil) values ('Paulo Oliveira', 'paulo@email.com', '123123123', 'ADMIN');
select * from college_helper.usuario;
Melhores Práticas
1) Uso de modelos Pydantic, garantindo padronização validação e conversão dos dados
- class TimeSlot(BaseModel):
start: str
end: str
- class DaySchedule(BaseModel):
day: str
available: bool
timeSlots: List[TimeSlot]
- class UploadedSubject(BaseModel):
name: str
schedule: str
credits: int
difficulty: int
- class FormData(BaseModel):
subjectCount: int
preferenceStrategy: str
prioritizeDependencies: bool
includeSaturday: bool
weeklySchedule: List[DaySchedule]
additionalNotes: Optional[str] = ""
uploadedSubjects: List[UploadedSubject]
totalAvailableHours: float
2) Padrão de Nome Snake Case
def normalize(lst): async def submit_preferences(form_data: FormData): getCollegeGradeFromFile(subjects_list)
3) Documentação por modulo:
- CHATGPT INTEGRATION MODULE
This module provides AI-powered subject advisory services using OpenAI's ChatGPT.
4) Separação de servidores, front e back rodam separados
5) Nomenclatura auto explicativa
const [showPassword, setShowPassword] = useState(false)
const [isLoading, setIsLoading] = useState(false)
const [error, setError] = useState("")
const [success, setSuccess] = useState("")
6) Tratamento de erros
catch (err) {
if (err instanceof Error) {
if (err.message.includes("401")) {
setError("Invalid email or password.")
} else if (err.message.includes("500")) {
setError("Server error.")
} else if (err.message.includes("fetch")) {
setError("Unable to connect to server.")
} else {
setError(err.message || "An unexpected error occurred.")
}
}
}
CRONOGRAMA
| Item | Data | College Helper | Realizado |
|---|---|---|---|
| 1 | 14/11/2025 | Documentar Investigação e Visão | 100% |
| 2 | 14/11/2025 | Criar Diagramas Comp/Implantação | 100% |
| 3 | 14/11/2025 | Definir Proposta de Projeto | 100% |
| 4 | 14/11/2025 | Validar Visão do Usuário | 100% |
| 5 | 17/11/2025 | Especificar RFs e RNFs - Fase 2 | 100% |
| 6 | 17/11/2025 | RF01: Modelar o BD | 100% |
| x | 24/11/2025 | TeckWeek | |
| 7 | 01/12/2025 | Melhores Práticas | 100% |
| 8 | 01/12/2025 | RF01: Modelar o BD | 100% |
| 9 | 01/12/2025 | RF02: Criar o BD | 100% |
| 10 | 01/12/2025 | RF03: Criar autenticação da aplicação | 80% |
| 11 | 15/12/2025 | Segunda Entrega | |
| 12 | 02/02/2026 | Desenvolver 4o RF | 100% |
| 13 | RF04: Criar tela de resultados pós upload da grade horária | ||
| 14 | Incrementar diferencial tecnológico | ||
| 15 | 19/12/2025 | Cliente aguardando vídeo demo |
| Item | Data | Atividades CollegeHelper | Responsável |
|---|---|---|---|
| 1 | 09/02/2026 | xx | |
| 2 | 23/02/2026 | xx | |
| 3 | 02/03/2026 | xx | |
| 4 | 09/03/2026 | xx | |
| 5 | 16/03/2026 | xx |