| Linha 131: | Linha 131: | ||
<br> | <br> | ||
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 = | = Evolução do projeto = | ||
Edição das 22h23min 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
- RF01: Modelar o Banco de Dados
- RF01: Criar o Banco de Dados
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 |