NoteHub é um projeto open-source que fornece uma API REST escrita em Java + Spring Boot para um "Bloco de Notas Social". A ideia é oferecer uma base escalável e extensível para criar, compartilhar e processar notas, com autenticação JWT, persistência em PostgreSQL e processamento assíncrono via RabbitMQ. O projeto foi estruturado para ser simples de entender e fácil de contribuir — perfeito para colaboradores que queiram se desenvolver em um contexto real.
Build
- Git
- Docker
- Digite os seguintes comandos no terminal dentro da pasta desejada:
git clone https://github.com/notehubbr/notehub-api.git
cd springboot-notehub
- Copie o arquivo de exemplo de variáveis de ambiente e ajuste conforme necessário:
(Linux e macOS) cp .env.example .env
(Windows) copy .env.example .env
- Suba a aplicação com Docker Compose:
docker compose up -d
-
Acesse a API em
http://localhost:8080
(por padrão). A documentação interativa normalmente fica emhttp://localhost:8080/docs
. -
Para parar e remover containers:
docker compose down --rmi all --volumes
Dev
- Git
- Docker
- Java 21
-
Siga as intruções do build até a parte 2(faça a parte 2).
-
Em docker-compose.yml comente os blocos:
# postgres:
# image: postgres:14
# container_name: postgres
# environment:
# POSTGRES_DB: ${PGDATABASE}
# POSTGRES_USER: ${PGUSERNAME}
# POSTGRES_PASSWORD: ${PGPASSWORD}
# ports:
# - '5432:5432'
# volumes:
# - postgres_data:/var/lib/postgresql/data
# app:
# container_name: app
# build:
# context: .
# dockerfile: Dockerfile
# ports:
# - '8080:8080'
# env_file:
# - .env.example
# depends_on:
# - postgres
# - rabbitmq
# - mailhog
# volumes:
# postgres_data:
Em ambiente de desenvolvimento será utilizado o banco de dados em memória e a aplicação será executada pela IDE.
- Suba a aplicação com Docker Compose:
docker compose up -d
- Em
src/main/resources/application-dev.properties
preencha os valores das variáveis de ambiente:
O arquivo .env só atende ao ambiente de produção.
api.server.host=${SERVER:http://localhost:8080}
api.client.host=${http://localhost:3000}
api.server.security.token.secret=${SECRET:seu-segredo}
oauth.github.client.id=${GHCI:seu-github-client-id}
oauth.github.client.secret=${GHCS:seu-github-client-secret}
spring.rabbitmq.addresses=${RABBITMQ_ADDRESSES:amqp://user:root@localhost:5672}
broker.queue.activation.name=default.activation
broker.queue.secret.name=default.secret
broker.queue.password.name=default.password
broker.queue.email.name=default.email
spring.mail.host=${SPRING_MAIL_HOST:localhost}
spring.mail.port=${SPRING_MAIL_PORT:1025}
spring.mail.friendly.name=${SPRING_MAIL_FRIENDLY_NAME:seu-nome-amigável}
spring.mail.username=${SPRING_MAIL_USERNAME:email-genérico}
spring.mail.password=${SPRING_MAIL_PASSWORD:}
- Em
src/main/java/br/com/notehub/domain/notification/Notification.java
comente a seguinte parte:
O banco de dados em memória não oferece suporte ao tipo de coluna JSON/JSONB.
// @Column(columnDefinition = "JSONB")
// @JdbcTypeCode(SqlTypes.JSON)
@Convert(converter = NotificationFieldInfoConverter.class)
private Map<String, Object> info;
- Inicie a aplicação.
./mvnw spring-boot:run
-
Acesse a API em
http://localhost:8080
(por padrão). A documentação interativa normalmente fica emhttp://localhost:8080/docs
. -
Para acessar a caixa de e-mails acesse
http://localhost:8025
. -
Para parar e remover containers acione
CTRL+C
no terminal e em seguide digite:
docker compose down --rmi all --volumes
A API é documentada em Swagger e acessível em /docs
Use o sistema de Issues do GitHub, crie uma issue com passos para reproduzir, comportamento esperado e logs/erros.
Deixe um comentário com a nova ideia/sugestão na postagem dedicada.
- Fork -> clone -> crie uma branch com um nome descritivo:
git checkout -b feat/nova-funcionalidade
- Faça commits em inglês, pequenos e claros seguindo o padrão:
(escopo)(referência):(mensagem)
. Ex.:
git commit -m "feat(auth): add login via Discord"
- Sincronize com o upstream (se estiver forked) e abra um Pull Request descrevendo:
- O que foi alterado;
- Porquê a alteração é necessária;
- Como testar manualmente;
- Preencha checklist no PR:
- Código segue o padrão do projeto
- Testes adicionados/atualizados
- Documentação atualizada (se necessário)
- Boas práticas para PRs
- Um propósito por PR (não agrupe várias funcionalidades sem relação).
- Inclua screenshots ou curl/postman snippets quando possível.
- Referencie a issue correspondente (ex.: Fixes #12).
-
Email Template por konsav