Dyany.garcia (discussão | contribs)
Sem resumo de edição
Dyany.garcia (discussão | contribs)
Sem resumo de edição
Linha 349: 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 || 80%
| 6 || 17/11/2025 || RF01: Modelar o BD || 100%
|-
|-
| x || 24/11/2025 || TeckWeek ||
| x || 24/11/2025 || TeckWeek ||
Linha 363: Linha 363:
| 11 || 15/12/2025 || Segunda Entrega ||
| 11 || 15/12/2025 || Segunda Entrega ||
|-
|-
| 12 || || Desenvolver 4o RF ||
| 12 || 02/02/2026 || Desenvolver 4o RF || 100%
|-
|-
| 13 || || Incrementar diferencial tecnológico ||
| 13 || || RF04: Criar tela de resultados pós upload da grade horária ||
|-
| 14 || || Incrementar diferencial tecnológico ||
|-
|-
| 14 || 19/12/2025 || Cliente aguardando vídeo demo ||
| 15 || 19/12/2025 || Cliente aguardando vídeo demo ||
|-
|-
|}
|}

Edição das 23h06min de 2 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.")
    }
  }
}

Evolução do projeto


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