Geração de oportunidades acadêmicas para estudantes brasileiros.
Estilo arquitetural escolhido: Model-View-Controller (MVC)
O estilo arquitetural Model-View-Controller (MVC) foi escolhido para este projeto devido à sua capacidade de separar claramente as responsabilidades em um sistema. Ele divide a aplicação em três componentes principais:
Model: Representa os dados e a lógica de negócio, incluindo o acesso ao banco de dados e regras de manipulação dos dados.
View: Responsável pela apresentação dos dados ao usuário, seja em formato de página web ou interface gráfica.
Controller: Atua como intermediário entre a View e o Model, processando as entradas dos usuários, manipulando os dados e atualizando a View de forma adequada.
O MVC foi escolhido por permitir uma clara separação de responsabilidades, o que facilita a manutenção e evolução do sistema. Ele também suporta o desenvolvimento modular, onde a camada de apresentação pode ser alterada sem impactar diretamente a lógica de negócios.
Padrão de projeto escolhido (já implementado): Singleton
Para o login e verificação de autenticação do usuário, usuamos um singleton com uma instância única, um booleano isAtuthenticated e um localStorage para que o usuário não seja deslogado sempre que recarrega a página. Esse padrão permite que protejamos páginas que não devem ser visualizadas, como a 'profile', por usuários que não estão logados. O Singleton também garante que teremos somente uma instância durante a execução, ou seja, que somente um usuário esteja logado em um dado momento.
Funcionamento: Sempre que um usuário realiza seu login, o Singleton armazena a informação de que ele está logado e permite que essa verificação seja realizada em qualquer página do projeto. Também criamos um AuthGuard, que verifica se o usuário está logado e, caso não esteja, o envia diretamente para a página de login. Quando um usuário tenta acessar uma página que não permitimos sem que tenha feito login, o AuthGuard o redireciona para a página de login. Além disso, é possível deslogar um usuário facilmente trocando a flag isAuthenticated para false.
Justificativa: O Singleton permite que somente uma instância de sessão de usuário seja criado a cada vez, impossibilitando uma situação de diversos logins ao mesmo tempo. Além disso, permite uma maneira simples de verificar se o usuário está logado em qualquer momento.
Padrão de projeto escolhido (ainda não foi implementado): Observer (Publish/Subscribe)
Para o componente de comunidade, onde o usuário pode ver as atividades dos amigos, o padrão de projeto Observer (Publish/Subscribe) foi escolhido. Esse padrão permite que objetos sejam assinantes de eventos gerados por outros objetos. No contexto da plataforma desenvolvida pelo nosso grupo, quando um usuário se inscreve em um projeto, os amigos do usuário podem ficar sabendo de tal informação através da página de "comunidade" da plataforma.
Funcionamento: O padrão Observer permite que o sistema de comunidade atue como um "publicador" de eventos de inscrição, enquanto os perfis dos amigos são os "assinantes". Sempre que um usuário se inscreve em um projeto e deseja compartilhar sua experiência, o sistema publica um evento que é enviado aos perfis dos amigos para atualização.
Justificativa: Esse padrão é adequado pois promove um sistema desacoplado, onde os módulos de notificação de atividades e de perfis de usuários podem funcionar de forma independente, melhorando a escalabilidade e a manutenibilidade.
-
Página Inicial: Exibe todos os projetos do banco de dados e permite a navegação para as páginas de detalhes.
-
Página do Projeto: Mostra informações detalhadas sobre o projeto selecionado, como descrição, categoria e participantes.
-
Página de Pesquisa: Contém filtros para refinar a busca por projetos com base em categorias e interesses.
-
Página de Comunidade: Exibe projetos em que os amigos do usuário estão inscritos.
-
Página de Perfil: Permite que o usuário visualize e edite suas informações pessoais e gerencie seus projetos inscritos.
Abaixo seguem as descrições dos principais componentes e suas responsabilidades:
Responsabilidade: Renderizar as páginas da aplicação, incluindo a listagem de projetos, a página de pesquisa com filtros, a página de comunidade e a página de perfil do usuário.
Tecnologias: React, Next.js, Tailwind CSS, Daisy UI
Responsabilidade: Controlar o acesso dos usuários às funcionalidades do sistema e garantir que somente usuários autenticados possam acessar recursos restritos.
Tecnologias: NextAuth.js
Responsabilidade: Fazer o registro dos novos usuários no banco de dados.
Tecnologias: NextAuth.js
Responsabilidade: Gerenciar o sistema de recuperação de senha do usuário.
Tecnologias: NextAuth.js
Responsabilidade: Gerenciar a atualização e acesso às informações nos perfis dos usuários.
Tecnologias: Node.js, Next.js
Responsabilidade: Realizar a busca dos projetos coerentes com os filtros do usuário.
Tecnologias: Node.js, Next.js
Responsabilidade: Controlar a lista de usuários interessados/participantes dos projetos.
Tecnologias: Node.js, Next.js
Responsabilidade: Armazenar os dados dos usuários, tais como informações de perfil e de acesso.
Tecnologias: MongoDB
Responsabilidade: Armazenar os dados dos projetos, detalhes, imagens, lista de participantes e outras informações relevantes.
Tecnologias: MongoDB