https://github.com/juninmd/diocese-franca-app
https://github.com/juninmd/diocese-franca-app
Last synced: 3 days ago
JSON representation
- Host: GitHub
- URL: https://github.com/juninmd/diocese-franca-app
- Owner: juninmd
- Created: 2026-02-11T16:21:36.000Z (6 months ago)
- Default Branch: master
- Last Pushed: 2026-07-22T02:32:46.000Z (6 days ago)
- Last Synced: 2026-07-23T10:18:11.058Z (4 days ago)
- Language: JavaScript
- Size: 379 KB
- Stars: 0
- Watchers: 0
- Forks: 0
- Open Issues: 5
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# Diocese de Franca - App
Aplicativo completo para a Diocese de Franca com backend API REST e app React Native.
> **Status: 100% Funcional e em Produção** - Tests: 19/19 passing
## Funcionalidades
### Backend API
- REST API com Express.js 5.x
- Compressão gzip e headers de segurança (Helmet)
- Health check endpoint para monitoramento
- Middleware de validação e tratamento de erros
- Respostas padronizadas com sucesso/erro
- **19 testes automatizados** cobrindo todos os endpoints
### Mobile App
- Interface moderna com design profissional
- **Pull-to-refresh** em todas as listas
- **Skeleton loaders** durante carregamento
- **Sistema de favoritos** persistente (AsyncStorage)
- **Toast notifications** para feedback de ações
- **Indicador de rede** offline/online
- Busca em tempo real com filtros
- Compartilhamento via Share API
- Estados de loading e erro tratados
## Novidades Implementadas
### Mobile
- Notificações locais agendadas para missas via `expo-notifications`
- Aprimoramentos de UI/UX (Mensagem "Bem-vindo, Fiel!")
- Correção de duplicação de variáveis na renderização do banner offline
- Skeleton loaders com animação shimmer
- Pull-to-refresh com feedback visual
- Favoritos salvos localmente (persistem)
- Toast notifications animadas (success/error/info)
- Indicador de conexão em tempo real
- Filtro "Todos" vs "Favoritos" em Igrejas e Padres
- Botão de limpar filtros
- Seção de acesso rápido na home
- Badges de estatísticas clicáveis
- Deploy web pronto com configuração do Netlify (`netlify.toml`)
- Testes E2E com Playwright para verificação no ambiente web
### Backend
- Scraper autônomo da Diocese (`backend/scraper.js`) usando `axios` e `cheerio`
- Endpoint de health check `/api/health`
- Compressão gzip automática
- Helmet.js para headers de segurança
- Middleware de validação de ID e dia
- Logs de requisição com timestamp
- Tratamento centralizado de erros 404/500
- Respostas com wrapper `{ success, count, data }`
## Tecnologias
### Backend
- Node.js + Express.js 5.x
- CORS, Compression, Helmet
- Jest (19 testes)
### Mobile
- React Native (Expo SDK 54)
- React Navigation 7
- AsyncStorage (favoritos persistentes)
- @expo/vector-icons (Ionicons)
- Axios
## Estrutura do Projeto
```
diocese-franca-app/
├── backend/
│ ├── data/ # Dados JSON
│ │ ├── churches.json
│ │ ├── priests.json
│ │ └── masses.json
│ ├── routes/ # Rotas da API
│ │ ├── churches.js
│ │ ├── priests.js
│ │ └── masses.js
│ ├── middleware/ # Middleware Express
│ │ └── validation.js
│ ├── tests/ # Testes automatizados
│ │ └── api.test.js
│ ├── index.js # Entry point
│ └── package.json
│
└── mobile/
├── src/
│ ├── components/ # Componentes reutilizáveis
│ │ ├── NetworkStatus.js
│ │ └── Skeleton.js
│ ├── context/ # Contextos React
│ │ ├── DataCacheContext.js
│ │ └── ToastContext.js
│ ├── navigation/ # Navegação
│ │ └── index.js
│ ├── screens/ # Telas do app
│ │ ├── HomeScreen.js
│ │ ├── ChurchesScreen.js
│ │ ├── ChurchDetailScreen.js
│ │ ├── PriestsScreen.js
│ │ ├── PriestDetailScreen.js
│ │ └── MassesScreen.js
│ └── services/ # Serviços
│ ├── api.js
│ └── FavoritesService.js
├── App.js
└── package.json
```
## Instalação e Execução
### Backend
```bash
cd backend
pnpm install
pnpm start
# Servidor: http://localhost:3000
```
### Mobile
```bash
cd mobile
pnpm install
pnpm start
```
### Executar Testes
```bash
cd backend
pnpm test
# Resultado: 19 testes passando
```
## Endpoints da API
| Método | Endpoint | Descrição |
|--------|----------|-----------|
| GET | `/` | Raiz da API |
| GET | `/api/health` | Health check |
| GET | `/api/churches` | Lista todas as igrejas |
| GET | `/api/churches/:id` | Detalhes de uma igreja |
| GET | `/api/priests` | Lista todos os padres |
| GET | `/api/priests/:id` | Detalhes de um padre |
| GET | `/api/masses` | Lista todos os horários |
| GET | `/api/masses/by-church/:id` | Missas por igreja |
| GET | `/api/masses/by-day/:dia` | Missas por dia |
## Funcionalidades do App Detalhadas
### Tela Início
- Dashboard com estatísticas (paróquias, padres, missas)
- Cards clicáveis para navegação rápida
- Seção de acesso rápido (missa domingo, mapa, ligar, email)
- Pull-to-refresh para atualizar dados
- Informações de contato da diocese
### Igrejas
- Lista com busca em tempo real
- Filtro: Todos / Favoritos
- Avatar com ícone da igreja
- Botões de ação: favoritar, compartilhar
- Pull-to-refresh
- Skeleton loader durante carregamento
### Detalhes da Igreja
- Informações completas (endereço, telefone, descrição)
- Pároco responsável com contato
- Lista de horários de missa
- Botão para abrir no mapa
### Padres
- Lista com busca por nome/título
- Filtro: Todos / Favoritos
- Avatar com iniciais do nome
- Badge com título (Pároco, Bispo)
- Pull-to-refresh
### Detalhes do Padre
- Perfil com biografia
- Contato (email, telefone)
- Paróquia com navegação
### Horários de Missa
- Filtros por dia da semana
- Filtros por tipo (Dominical/Semanal)
- Botão limpar filtros
- Lista organizada por dia
- Badge com contador de missas
- Pull-to-refresh
## Dados
| Entidade | Quantidade |
|----------|------------|
| Paróquias | 4 |
| Padres | 5 |
| Missas/semana | 22 |
## Testes
O backend possui **19 testes automatizados** cobrindo:
- Validação de ID inválido (400)
- Busca de igreja/padre inexistente (404)
- Listagem com wrapper de sucesso
- Verificação de campos obrigatórios
- Filtro por dia da semana
- Case insensitive para dias
- Arrays vazios para dias sem missa
## Pré-requisitos
- Node.js 18+
- pnpm (gerenciador de pacotes)
```bash
npm install -g pnpm
```
## Screenshots
O app possui interface moderna com:
- Cores consistentes (#2c3e50 como primária)
- Cards com elevation e sombras suaves
- Ícones Ionicons em todas as ações
- Feedback visual em todas as interações
- Estados de loading com skeleton
- Toasts animados para feedback
### Screenshot (Web Output E2E Test)

## Licença
ISC