API REST para conectar missionários cristãos com intercessores e apoiadores financeiros.
"Até aqui nos ajudou o Senhor" — 1 Samuel 7:12
O Ebenezer Missions é um portal full stack desenvolvido para resolver um problema real: missionários que partem para campos difíceis frequentemente enfrentam isolamento espiritual, falta de suporte financeiro e distância da comunidade.
Este repositório é o backend da plataforma — uma API REST construída com Java 17 e Spring Boot 3, com autenticação JWT stateless, refresh token server-side, controle de acesso por roles e notificações por e-mail.
Fase Atual: Módulo de auth completo (registro, login, refresh, logout) e módulo de pedidos de oração com sistema de orações e encorajamentos implementados.
- ✅ Registro de usuários com validação e criptografia BCrypt
- ✅ Login com geração de JWT Access Token (1 hora)
- ✅ Refresh Token persistido no banco para renovação segura
- ✅ Logout com invalidação server-side do refresh token
- ✅ Controle de acesso por Roles (MISSIONARY, INTERCESSOR, SUPPORTER, ADMIN)
- ✅ Filtro JWT em todas as requisições protegidas
- ✅ CRUD completo de pedidos de oração (missionário)
- ✅ Listagem pública para intercessores
- ✅ Contador de orações por pedido
- ✅ Encorajamentos (mensagens de apoio)
- ✅ Controle de status (ACTIVE, ANSWERED, CLOSED)
- ✅ Listagem de missionários cadastrados
- ✅ Perfil público individual do missionário
- ✅ Listagem de psicólogos parceiros
- ✅ Busca por ID
- ✅ Envio de e-mail via Spring Mail (SMTP Gmail)
ebenezer-back/
└── src/main/java/com/ebenezer/
├── config/
│ ├── SecurityConfig.java 🔒 Configuração Spring Security
│ └── JwtProperties.java ⚙️ @ConfigurationProperties JWT
│
├── modules/
│ ├── auth/ 🔐 Autenticação
│ │ ├── model/RefreshToken.java
│ │ ├── repository/
│ │ ├── AuthController.java
│ │ ├── AuthService.java
│ │ ├── JwtUtil.java
│ │ └── JwtAuthenticationFilter.java
│ │
│ ├── user/ 👤 Perfis de usuário
│ │ ├── model/UserEntity.java
│ │ ├── repository/
│ │ ├── service/UserService.java
│ │ └── MissionaryController.java
│ │
│ ├── prayer/ 🙏 Pedidos de oração
│ │ ├── model/ (PrayerRequest, Prayer, Encouragement)
│ │ ├── repository/
│ │ ├── service/
│ │ └── PrayerRequestController.java
│ │
│ └── psychology/ 🧠 Psicólogos cristãos
│ ├── PsychologistController.java
│ └── PsychologyService.java
│
└── shared/
├── enums/ (Role, PrayerRequestStatus)
├── exception/ (GlobalExceptionHandler + tipos)
└── email/EmailService.java
HTTP Request
↓
JwtAuthenticationFilter (valida token, define SecurityContext)
↓
Controller (valida entrada — Bean Validation)
↓
Service (lógica de negócio)
↓
Repository (Spring Data JPA)
↓
MySQL Database
↓
Response JSON 200 / 400 / 401 / 403 / 404 / 422
| Método | Endpoint | Descrição | Auth |
|---|---|---|---|
| POST | /auth/register |
Registrar novo usuário | ❌ |
| POST | /auth/login |
Login (retorna access + refresh token) | ❌ |
| POST | /auth/refresh |
Renovar access token | ❌ |
| POST | /auth/logout |
Invalidar refresh token | ✅ |
| Método | Endpoint | Descrição | Auth |
|---|---|---|---|
| POST | /prayer-requests |
Criar pedido | ✅ |
| GET | /prayer-requests |
Listar todos (feed público) | ✅ |
| GET | /prayer-requests/my |
Meus pedidos | ✅ |
| GET | /prayer-requests/{id} |
Buscar por ID | ✅ |
| PUT | /prayer-requests/{id} |
Atualizar pedido | ✅ |
| PATCH | /prayer-requests/{id}/status |
Atualizar status | ✅ |
| DELETE | /prayer-requests/{id} |
Remover pedido | ✅ |
| POST | /prayer-requests/{id}/pray |
Registrar oração | ✅ |
| DELETE | /prayer-requests/{id}/pray |
Remover oração | ✅ |
| POST | /prayer-requests/{id}/encouragements |
Enviar encorajamento | ✅ |
| GET | /prayer-requests/{id}/encouragements |
Listar encorajamentos | ✅ |
| Método | Endpoint | Descrição | Auth |
|---|---|---|---|
| GET | /missionaries |
Listar missionários | ❌ |
| GET | /missionaries/{id} |
Perfil público | ❌ |
| Método | Endpoint | Descrição | Auth |
|---|---|---|---|
| GET | /psychologists |
Listar psicólogos | ❌ |
| GET | /psychologists/{id} |
Buscar por ID | ❌ |
| Tecnologia | Versão | Função |
|---|---|---|
| Java | 17 | Linguagem principal |
| Spring Boot | 3.2.5 | Framework Web/REST |
| Spring Security | 6.x | Autenticação e autorização |
| Spring Data JPA | 3.2 | ORM com Hibernate |
| JWT (JJWT) | 0.11.5 | Tokens stateless |
| MySQL | 8.0+ | Banco de dados relacional |
| Spring Mail | 3.2 | Envio de e-mails SMTP |
| Lombok | 1.18 | Redução de boilerplate |
| Bean Validation | 3.x | Validação de entrada |
| Maven | 3.9+ | Build e dependências |
- ✅ Setup do projeto (Spring Initializr)
- ✅ Configuração do banco MySQL
- ✅ Entidade
UserEntitycom roles - ✅ Spring Security + JWT filter
- ✅
AuthController(register, login, refresh, logout) - ✅ Refresh token server-side
- ✅ Tratamento global de exceções
- ✅ CRUD de pedidos de oração
- ✅ Sistema de orações (pray/unpray)
- ✅ Encorajamentos
- ✅ Perfil público de missionários
- ✅ Módulo de psicólogos cristãos
- ⏳ Integração Stripe
- ⏳ Campanhas de doação
- ⏳ Metas financeiras
- ⏳ Transparência de repasse
- ⏳ Deploy no Railway
- ⏳ Configuração de variáveis de ambiente
- ⏳ Testes em produção
- Java 17+
- MySQL 8.0 rodando em
localhost:3306 - Maven 3.9+
- Clone o repositório:
git clone https://github.com/claudiondev/ebenezer-missions.git
cd ebenezer-missions- Crie o banco de dados:
CREATE DATABASE ebenezer_db;- Configure as variáveis de ambiente:
export DB_USERNAME=root
export DB_PASSWORD=sua_senha
export JWT_SECRET=seu_secret_minimo_32_caracteres- Rode a aplicação:
./mvnw spring-boot:runAPI disponível em http://localhost:8080
O frontend do Ebenezer Missions é desenvolvido em React 18 + Vite + Tailwind CSS com globo 3D interativo e identidade visual própria.
📦 Repositório: ebenezer-missions-front
Claudio Nascimento
- 🔗 GitHub: @claudiondev
- 💼 LinkedIn: Claudio Nascimento
- 📧 Email: claudioncruz152@gmail.com
LICENÇA PROPRIETÁRIA - VISUALIZAÇÃO APENAS
Este código é um projeto de portfólio protegido por direitos autorais.
- 👀 Visualizar e estudar o código
- 💼 Usar como referência em entrevistas
- 📚 Aprender com as implementações
- 🚫 Copiar ou usar comercialmente sem autorização
- 🚫 Distribuir sem permissão do autor
Copyright © 2026 Claudio Nascimento. Todos os direitos reservados.