| Linha 77: | Linha 77: | ||
<b>create schema if not exists "college_helper";</b> | |||
<b>CREATE TABLE if not exists college_helper.curso </b> | |||
<pre> | <pre> | ||
Edição das 22h53min de 27 de novembro de 2025
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
Fase 2 - 2025-2
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;
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.
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 | 80% |
| 7 | 01/12/2025 | Melhores Práticas | |
| 8 | 01/12/2025 | RF01: Modelar o BD | |
| 9 | RF02: Criar o BD | ||
| 10 | Desenvolver 3o RF | ||
| 11 | Desenvolver 4o RF | ||
| 12 | Incrementar diferencial tecnológico |