https://academic-share-three.vercel.app/
https://github.com/TomasF05/AcademicShare
- Tomás Felicíssimo nº31375
- Inês Delgado nº31414
- Diana Matos nº31399
O AcademicShare é uma plataforma colaborativa desenvolvida para facilitar a partilha de materiais de estudo entre estudantes. O principal objetivo do Academic Share é garantir que todos os estudantes têm acesso aos conteúdos das aulas, mesmo quando não estão presentes, promovendo colaboração e solidariedade entre colegas.
- Framework Front-end: React.js (Vite).
- Back-end: Node.js com Express.
- Comunicação em Tempo Real: Socket.io (para Chat de Aula).
- Gestão de Dados: MongoDB com Mongoose.
- Autenticação: JWT (JSON Web Tokens) e bcryptjs para encriptação de palavras-passe.
- Gestão de Ficheiros: Multer para upload de materiais.
A estrutura de dados foi modelada em MongoDB utilizando o Mongoose, focando-se nas seguintes entidades:
- User: Gestão de utilizadores, perfis e autenticação.
- Disciplina: Organização das áreas de estudo.
- Aula: Subdivisão das disciplinas para melhor organização.
- Material: Armazenamento de PDFs (via upload físico) e links externos.
- ChatMessage: Histórico de conversas em tempo real.
- Autenticação: Registo e login de utilizadores com validação JWT.
- Perfil de Utilizador: Visualização de dados pessoais e alteração de palavra-passe com verificação de segurança.
- Proteção de Rotas: O acesso ao dashboard e aos materiais requer um token válido.
- Dashboard Dinâmico: Visualização de todas as disciplinas com sistema de pesquisa em tempo real por nome.
- CRUD de Disciplinas: Possibilidade de criar, editar e arquivar disciplinas (apenas pelo criador ou admin).
- Organização por Aulas: Cada disciplina contém a sua lista de aulas agendadas.
- Upload de Ficheiros: Suporte para submissão de ficheiros PDF utilizando o middleware Multer.
- Links Externos: Possibilidade de partilhar links úteis (Ex: Google Drive, vídeos, sites).
- Download Direto: Funcionalidade de download via Blob para garantir a transferência de ficheiros entre diferentes domínios (CORS).
- Arquivação de Materiais: Gestão de ficheiros submetidos, permitindo o arquivamento do materiais, sem que seja eliminado da base de dados, só fisicamente.
- Chat de Aula: Sistema de chat em tempo real por aula, permitindo a discussão de dúvidas específicas sobre os materiais partilhados.
-
Clonar o Repositório:
git clone cd nome-do-projeto -
Instalação das bibliotecas:
# No diretório backend cd backend npm install # No diretório frontend cd ../frontend npm install
-
Criação do ficheiro .env:
# No diretório backend MONGO_URI=mongodb+srv://<teu_utilizador>:<tua_password>@cluster.mongodb.net/academicshare JWT_SECRET=uma_chave_secreta_muito_segura PORT=5000 # No diretório backend VITE_API_URL=http://localhost:5000/api VITE_BACKEND_URL=http://localhost:5000
-
Iniciar o projeto:
#Terminal 1(Backend) cd backend # Certifica-te de que a pasta 'uploads' existe na raiz do backend npm run dev #Terminal 2(Frontend) cd frontend npm run dev
- Registo/Login: Ao aceder à aplicação, o utilizador deve autenticar-se. Se não tiver conta, pode registar-se fornecendo nome, email e palavra-passe.
- Gestão de Perfil: No ícone de utilizador no cabeçalho, é possível aceder às configurações para visualizar dados pessoais ou alterar a palavra-passe atual.
- Visualizar Disciplinas: O Dashboard exibe cartões com todas as disciplinas criadas. Cada cartão mostra o título, descrição e quem a criou.
- Pesquisa: Utiliza a barra de pesquisa central para filtrar disciplinas instantaneamente por nome.
- Criar Disciplina: Clique no botão "+ Nova Disciplina" para abrir o modal de criação.
Ao selecionar uma disciplina e entrar numa aula específica, terá acesso ao painel de materiais:
- Adicionar Material: Clique em "+ Adicionar material" no topo da página.
- Ficheiro: Selecione um PDF do seu computador para upload.
- Link: Introduza uma URL externa (ex: slides, vídeos).
- Interagir com Materiais:
- Abrir: Abre o PDF ou o link num novo separador.
- Download: Descarrega o ficheiro PDF diretamente para o seu dispositivo através do botão "Download".
- Sistema de Arquivo (Aulas e Materiais): O autor pode arquivar disciplinas, aulas ou materiais específicos. Uma vez arquivados, os elementos aparecem com tom acinzentado para o autor, indicando que o conteúdo está arquivado, até que o autor decida reativá-los, enquanto que para os outros utilizadores desaparece e só volta a aparecer quando o autor decidir desarquivar.
- Alternar entre Abas: Utilize as abas "Materiais" e "Chat" para mudar o conteúdo da página.
- Conversar: No separador de Chat, pode enviar mensagens em tempo real para todos os colegas que estiverem a visualizar a mesma aula, facilitando o esclarecimento de dúvidas sobre os materiais partilhados.