Trabalho Prático — Programação e Desenvolvimento de Software II (PDS2)
Departamento de Ciência da Computação — UFMG
Professor: Hector Azpurua
| Nome |
|---|
| Pedro Martins Justi |
| Rodrigo de Freitas Lanza |
| Luiz Henrique Torres Cabral |
| André Rafael Batista |
| Matheus Araujo Pinto Carvalho |
A universidade é um lugar habitado por pessoas com diferentes vivências, culturas, interesses e conhecimentos — e é também um dos ambientes mais ricos para formar amizades que duram a vida inteira. Há muito valor na troca de informação entre estudantes de diferentes regiões, universidades, cursos e turmas: dúvidas sobre disciplinas, indicações de materiais de estudo, avisos sobre eventos institucionais, oportunidades de estágio e iniciação científica, e discussões acadêmicas que enriquecem a formação de todos os envolvidos.
No entanto, essa comunicação costuma acontecer de forma dispersa — em grupos de aplicativos de mensagens sem organização, murais físicos desatualizados ou e-mails institucionais ignorados —, sem um espaço dedicado, estruturado e exclusivo para a comunidade acadêmica. Além disso, as amizades formadas na universidade tendem a se restringir ao próprio círculo imediato: colegas de turma, de curso, de laboratório. E se pudesse ser diferente?
O UNI★VERSO surge como resposta a esse problema. Pensado como o metaverso dos universitários — daí o nome —, é uma rede social projetada do zero para estudantes de qualquer universidade, onde o acesso é restrito a usuários portadores de e-mail institucional válido. Isso garante um ambiente seguro, composto exclusivamente por pessoas vivendo uma fase da vida semelhante e pertencentes à comunidade acadêmica. Na plataforma, alunos podem criar perfis com informações pessoais e acadêmicas, publicar postagens em diferentes formatos (texto, imagem e vídeo), interagir com o conteúdo de outros usuários por meio de Estrelas (curtidas) e comentários, seguir colegas de qualquer instituição, e participar de Galáxias — comunidades organizadas por curso, disciplina ou qualquer interesse em comum.
O projeto segue o padrão de camadas Controller → Service → Repository, onde cada camada conhece apenas a imediatamente abaixo dela:
- Controller — recebe os dados de entrada, delega ao Service e retorna uma resposta padronizada (
Response). - Service — aplica as regras de negócio (validações, hashing de senha, lógica de relacionamento).
- Repository — executa as operações de persistência no banco de dados via
SQLiteConnection.
| Classe | Responsabilidade |
|---|---|
User |
Representa um usuário registrado na rede |
UserProfile |
Armazena informações acadêmicas do usuário |
CredentialHelper |
Validação de e-mail institucional e hash de senha |
Post |
Representa uma postagem ou comentário encadeado |
Media |
Classe abstrata base para Image e Video |
Comunity |
Representa uma comunidade de usuários |
IRepository<T> |
Interface genérica de repositório (CRUD) |
SQLiteConnection |
Gerencia a conexão com o banco de dados SQLite |
- Linguagem: C++17
- Banco de dados: SQLite3
- Documentação: Doxygen
- Controle de versão: Git / GitHub
.
├── design/
│ ├── CRC Cards/
│ ├── html/
│ └── UserStories.md
├── include/
│ ├── controllers/
│ │ ├── CommunityController.hpp
│ │ ├── PostController.hpp
│ │ └── UserController.hpp
│ ├── entities/
│ │ ├── Community.hpp
│ │ ├── Date.hpp
│ │ ├── Image.hpp
│ │ ├── Media.hpp
│ │ ├── Post.hpp
│ │ ├── User.hpp
│ │ ├── UserProfile.hpp
│ │ └── Video.hpp
│ ├── helpers/
│ │ ├── CredentialHelper.hpp
│ │ ├── ResponseJSON.hpp
│ │ └── SQLiteConnection.hpp
│ ├── repositories/
│ │ ├── CommunityRepository.hpp
│ │ ├── IRepository.hpp
│ │ ├── PostRepository.hpp
│ │ └── UserRepository.hpp
│ └── services/
│ ├── CommunityService.hpp
│ ├── PostService.hpp
│ └── UserService.hpp
├── src/
│ ├── controllers/
│ ├── entities/
│ ├── helpers/
│ ├── repositories/
│ └── services/
├── tests/
├── .gitignore
├── Doxyfile
└── README.md
Para gerar a documentação com Doxygen:
doxygen DoxyfileA documentação será gerada na pasta docs/html/. Abra docs/html/index.html no navegador para visualizá-la.