O ConnectHub Backend é o núcleo servidor da plataforma ConnectHub, um ambiente colaborativo para integração de projetos acadêmicos, gamificação, comunicação e aprendizado. Construído com Quarkus, o framework Supersônico e Subatômico para Java, o sistema adota práticas modernas de arquitetura, incluindo Arquitetura Hexagonal (Ports & Adapters) e DDD (Domain-Driven Design), oferecendo uma API REST robusta, extensível e altamente desacoplada.
- Visão Geral do Projeto
- Arquitetura e Padrões
- Principais Funcionalidades
- Tecnologias e Dependências
- Como Executar
- Testes
- Segurança e Autenticação
- Referências e Guias
- Contato
Este backend serve como base para recursos como publicação e comentários de projetos, fóruns acadêmicos (tópicos e respostas), gamificação (XP, níveis, conquistas), notificações e gerenciamento de usuários. É altamente modularizado, facilitando a manutenção e a evolução.
O projeto adota a Arquitetura Hexagonal (Ports & Adapters) combinada com Domain-Driven Design (DDD), promovendo isolamento do núcleo de negócio, facilidade de testes e flexibilidade para integração com diferentes tecnologias.
- Núcleo (Domínio):
- Pacote:
src/main/java/br/com/hub/connect/domain/ - Contém entidades, enums e exceções de negócio, totalmente desacoplados de frameworks e detalhes técnicos.
- Pacote:
- Portas (Ports):
- Pacote:
src/main/java/br/com/hub/connect/application/ - Serviços de aplicação, interfaces para casos de uso e DTOs (contratos de dados).
- Pacote:
- Adaptadores (Adapters):
- De entrada:
src/main/java/br/com/hub/connect/interfaces/rest/— Controladores REST que recebem requisições HTTP e acionam os serviços de aplicação. - De saída:
src/main/java/br/com/hub/connect/infrastructure/— Implementações técnicas para persistência, integrações externas, mapeamento de exceções, etc.
- De entrada:
Vantagens:
- Isolamento da lógica de negócio de detalhes de infraestrutura
- Facilidade para testes unitários e de integração
- Possibilita trocar tecnologias externas sem impactar o domínio
src/main/java/br/com/hub/connect/
├── domain/ # Núcleo do domínio e regras de negócio (DDD)
├── application/ # Portas de entrada, serviços e casos de uso
├── interfaces/ # Adaptadores de entrada (ex: REST)
└── infrastructure/ # Adaptadores de saída (ex: persistência, mapeamento de exceções)
domain.project: Modelos de Projeto e Comentários.domain.academic: Entidades de Tópico e Resposta para fóruns.domain.gamification: Tipos e lógica de XP (Experiência).application.user: Serviços para manipulação de usuários.application.communication: Serviços de notificação.infrastructure.exception: Manipulação de erros.interfaces.rest: Controladores REST para API pública.
- Entidades como
ProjecteProjectCommentpermitem cadastro, visualização e comentários em projetos. - Enum
ProjectTechnologiespadroniza tecnologias relacionadas a projetos, incluindo Java, Python, Docker, frameworks JS etc.
- Entidades
TopiceAnswersuportam fóruns com tópicos, respostas, likes, dislikes e marcação de solução. - Sistema de XP para participação (criar tópicos, responder, melhor resposta).
- Sistema de XP (
XpType) e níveis. - Eventos planejados para evolução de nível do usuário.
- Serviço de notificações para eventos do sistema (criação, deleção, contagem).
Utiliza extensivamente as features do Quarkus, incluindo:
- Quarkus REST (guia): Endpoints reativos.
- Hibernate ORM com Panache (guia): ORM simplificado.
- Hibernate Validator (guia): Validação de dados.
- SmallRye OpenAPI (guia): Documentação automática com Swagger UI.
- Jackson: Serialização JSON.
- JDBC Driver - PostgreSQL (guia): Driver JDBC para PostgreSQL.
Outras dependências comuns do ecossistema Quarkus podem ser incluídas conforme necessidade.
- Gerar chaves localmente(Linux):
mkdir -p src/main/resources/META-INF/resources
openssl genrsa -out src/main/resources/privateKey.pem 2048
openssl rsa -in src/main/resources/privateKey.pem -pubout -out src/main/resources/META-INF/resources/publicKey.pemCrie as váriaveis de ambiente em seu computador, essas váriaveis são utilizadas para subir o container do docker.
- As váriaveis e seus nomes estão localizadas no arquivo
docker-compose.yml
Execute o seguinte comando para iniciar o projeto:
- Isso vai subir o container que tem o banco de dados
docker compose up -d postgresEm seguida:
- Caso vocẽ tenha o maven instalado globalmente:
mvn quarkus:dev- caso contrário rode:
./mvnw quarkus:devAcesse a Dev UI em http://localhost:8080/q/dev/.
- As chaves são ignoradas pelo git (verificar .gitignore)
Empacotamento padrão:
./mvnw package
java -jar target/quarkus-app/quarkus-run.jarÜber-jar:
./mvnw package -Dquarkus.package.jar.type=uber-jar
java -jar target/*-runner.jarBuild Nativo:
./mvnw package -Dnative
# Ou com container:
./mvnw package -Dnative -Dquarkus.native.container-build=true
./target/connect-hub-1.0.0-SNAPSHOT-runnerInclui testes automatizados de endpoints REST com Quarkus Test e RestAssured.
Posteriormente será integrado criptografia de senhas com BCrypt bem como um sistema de validação e de permissões por cargos.
Para dúvidas, sugestões ou contribuir, abra uma issue ou pull request neste repositório.