Created
May 22, 2026 22:52
-
-
Save mbmaciel/64acb95f6f88c106eeed3de9420ab039 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| # Arquitetura e tecnologias utilizadas | |
| Data: 2026-05-22 | |
| ## Visão geral | |
| O Self Care City é uma aplicação full-stack composta por: | |
| - Aplicativo cliente em Expo/React Native, com suporte mobile e web. | |
| - API backend em Node.js/Express. | |
| - Banco de dados PostgreSQL. | |
| - Integrações externas para pagamento, email e armazenamento de imagens. | |
| A aplicação atende fluxos de cadastro, login, assinatura/pagamento, atividades diárias, pontuação, ranking, roleta, cronômetro, perfil e administração de usuários. | |
| ## Arquitetura geral | |
| ```text | |
| Usuário | |
| | | |
| v | |
| App Expo / React Native | |
| | | |
| | HTTP/JSON | |
| v | |
| API Node.js / Express | |
| | | |
| +-- PostgreSQL | |
| +-- Pagar.me | |
| +-- Brevo | |
| +-- AWS S3 | |
| ``` | |
| ## Estrutura do repositório | |
| ```text | |
| selfcarecity/ | |
| client/ App Expo / React Native | |
| screens/ Telas da aplicação | |
| services/ Clientes HTTP para a API | |
| components/ Componentes reutilizáveis | |
| context/ Contextos React | |
| config/ Configuração do app | |
| assets/ Imagens, sons e recursos estáticos | |
| server/ Backend Node.js / Express | |
| controllers/ Controllers por domínio | |
| middleware/ Middlewares de autenticação/autorização | |
| utils/ Banco, email, S3, Pagar.me e helpers | |
| migrations/ Migrations SQL | |
| scripts/ Scripts operacionais | |
| jobs/ Rotinas agendadas | |
| docs/ Documentação técnica | |
| ``` | |
| ## Frontend | |
| O frontend fica em `client/` e usa Expo com React Native. | |
| ### Principais responsabilidades | |
| - Renderizar telas mobile/web. | |
| - Gerenciar navegação entre login, cadastro, pagamento, dashboard e áreas internas. | |
| - Armazenar token de autenticação localmente. | |
| - Consumir a API backend via HTTP. | |
| - Enviar imagens de atividades via multipart/form-data. | |
| - Exibir feedbacks com toast e alerts. | |
| ### Telas principais | |
| - `LoginScreen` | |
| - `RegisterScreen` | |
| - `PaymentScreen` | |
| - `Dashboard` | |
| - `ActivitiesScreen` | |
| - `ScoreScreen` | |
| - `RankingScreen` | |
| - `ReportsScreen` | |
| - `ProfileScreen` | |
| - `UsersScreen` | |
| - `StopwatchScreen` | |
| - `RouletteScreen` | |
| - `PrivacyPolicyScreen` | |
| ### Tecnologias do frontend | |
| - Expo SDK 54. | |
| - React 19.1. | |
| - React Native 0.81. | |
| - React Native Web. | |
| - React Navigation. | |
| - Axios. | |
| - AsyncStorage. | |
| - Expo Secure Store. | |
| - Expo Image Picker. | |
| - Expo File System. | |
| - Expo Sharing. | |
| - Expo Audio. | |
| - React Native Toast Message. | |
| - React Native View Shot. | |
| ## Backend | |
| O backend fica em `server/` e expõe uma API REST em Express. | |
| ### Principais responsabilidades | |
| - Cadastro, login e recuperação de senha. | |
| - Emissão e validação de JWT. | |
| - Controle de acesso por usuário autenticado e administrador. | |
| - CRUD de atividades. | |
| - Controle de pontuação semanal. | |
| - Ranking. | |
| - Roleta. | |
| - Cronômetro. | |
| - CRUD administrativo de usuários. | |
| - Criação e consulta de pagamentos. | |
| - Processamento de webhooks Pagar.me. | |
| - Envio de emails transacionais. | |
| - Upload de imagens para S3. | |
| ### Controllers | |
| - `auth.js`: registro, login, perfil e recuperação de senha. | |
| - `activities.js`: atividades, agenda e pontuação. | |
| - `payment.js`: PIX, cartão, assinatura e webhooks. | |
| - `users.js`: administração de usuários. | |
| - `ranking.js`: ranking geral e detalhes por usuário. | |
| - `roulette.js`: pontos e giro da roleta. | |
| - `stopwatch.js`: registro de tempo do cronômetro. | |
| ### Middlewares | |
| - `auth.js`: valida JWT e bloqueia acesso quando pagamento/assinatura não está ativo. | |
| - `adminAuth.js`: valida JWT e exige perfil `administrador`. | |
| ### Tecnologias do backend | |
| - Node.js. | |
| - Express 4. | |
| - PostgreSQL. | |
| - `pg`. | |
| - `jsonwebtoken`. | |
| - `bcrypt`. | |
| - `dotenv`. | |
| - `cors`. | |
| - `body-parser`. | |
| - `axios`. | |
| - `multer`. | |
| - `multer-s3`. | |
| - AWS SDK S3. | |
| - Nodemailer. | |
| - AWS SES SDK. | |
| - Pagar.me SDK/API. | |
| - Node Cron. | |
| ## Banco de dados | |
| O banco utilizado é PostgreSQL. | |
| ### Tabelas principais | |
| - `users`: usuários, credenciais, perfil, pagamento, assinatura e métricas. | |
| - `activities`: atividades diárias do usuário. | |
| - `score`: pontuação gerada por atividades concluídas. | |
| - `orders`: pedidos e status de pagamento. | |
| - `user_custom_hours`: horários personalizados por usuário. | |
| ### Scripts e migrations | |
| - `server/db.sql`: dump/schema base. | |
| - `server/migrations/*.sql`: migrations incrementais. | |
| - `server/migration*.sql`: migrations avulsas adicionais. | |
| ## Integrações externas | |
| ### Pagar.me | |
| Usado para: | |
| - Criar pedidos PIX. | |
| - Criar assinaturas com cartão de crédito. | |
| - Consultar status de pagamento. | |
| - Receber webhooks de pagamento e assinatura. | |
| Arquivos relacionados: | |
| - `server/controllers/payment.js` | |
| - `server/utils/pagarme.js` | |
| - `server/scripts/create-plans.js` | |
| - `server/test-pagarme-pix.js` | |
| - `server/test-pagarme-plan.js` | |
| ### Brevo | |
| Usado para envio de emails transacionais: | |
| - Boas-vindas. | |
| - Recuperação de senha. | |
| - PIX pendente. | |
| - PIX confirmado. | |
| - Avisos de assinatura. | |
| Arquivos relacionados: | |
| - `server/utils/email.js` | |
| - `server/utils/emailTemplates.js` | |
| - `server/test-email.js` | |
| ### AWS S3 | |
| Usado para armazenar imagens enviadas nas atividades. | |
| Arquivos relacionados: | |
| - `server/utils/s3.js` | |
| - `server/test-upload.js` | |
| ### AWS SES | |
| Há dependência instalada para AWS SES, embora o envio principal observado use Brevo. | |
| ## Autenticação e autorização | |
| ### Autenticação | |
| - Login por email, CPF ou identificador. | |
| - Senha armazenada com hash `bcrypt`. | |
| - Sessão via JWT. | |
| - Expiração padrão do JWT: `7d`, configurável por `JWT_EXPIRES_IN`. | |
| ### Autorização | |
| - Rotas comuns usam middleware `ensureAuth`. | |
| - Rotas administrativas usam middleware `ensureAdmin`. | |
| - O acesso comum depende de: | |
| - token JWT válido; | |
| - usuário existente; | |
| - `payment_status = true`; | |
| - assinatura não expirada; | |
| - exceção para perfil `administrador`. | |
| ## Pagamentos | |
| O backend trabalha com dois modelos: | |
| - PIX: pedido avulso que libera acesso por 30 dias. | |
| - Cartão de crédito: assinatura recorrente mensal. | |
| O status do usuário é controlado principalmente por: | |
| - `users.payment_status` | |
| - `users.subscription_end_date` | |
| - `users.pagarme_subscription_id` | |
| - `orders.status` | |
| ## Upload de arquivos | |
| O upload é feito pelo backend usando: | |
| - `multer` | |
| - `multer-s3` | |
| - AWS S3 | |
| Características observadas: | |
| - Limite de 5 MB por arquivo. | |
| - Aceita arquivos cujo MIME type começa com `image/`. | |
| - Salva imagens no prefixo `activities/`. | |
| ## Rotinas e scripts | |
| Existem scripts para tarefas operacionais: | |
| - Verificação de assinaturas. | |
| - Premiação de pontos da roleta. | |
| - Teste de email. | |
| - Teste de upload. | |
| - Teste de PIX. | |
| - Teste de plano Pagar.me. | |
| - Criação de planos Pagar.me. | |
| Arquivos principais: | |
| - `server/scripts/subscription-check.js` | |
| - `server/scripts/award_roulette_points.js` | |
| - `server/jobs/subscriptionCron.js` | |
| ## Build e deploy | |
| ### Cliente | |
| Scripts principais: | |
| ```bash | |
| npm start | |
| npm run android | |
| npm run ios | |
| npm run web | |
| npm run build:web | |
| ``` | |
| Build mobile via EAS: | |
| - Android App Bundle em produção. | |
| - iOS com profile de produção. | |
| Arquivos relacionados: | |
| - `client/eas.json` | |
| - `client/app.json` | |
| - `client/app.config.js` | |
| ### Backend | |
| Scripts principais: | |
| ```bash | |
| npm start | |
| npm run dev | |
| npm run prod | |
| ``` | |
| O backend lê configurações por variáveis de ambiente usando `dotenv`. | |
| ## Variáveis de ambiente relevantes | |
| ### Backend | |
| - `DATABASE_URL` | |
| - `JWT_SECRET` | |
| - `JWT_EXPIRES_IN` | |
| - `PORT` | |
| - `HTTPS_PORT` | |
| - `SSL_CERT` | |
| - `SSL_KEY` | |
| - `PAGARME_API_KEY` | |
| - `PAGARME_WEBHOOK_URL` | |
| - `PAGARME_WEBHOOK_SECRET` | |
| - `BREVO_API_KEY` | |
| - `AWS_REGION` | |
| - `AWS_ACCESS_KEY_ID` | |
| - `AWS_SECRET_ACCESS_KEY` | |
| - `S3_BUCKET_NAME` | |
| ### Cliente | |
| - `EXPO_PUBLIC_API_URL` | |
| ## Resumo da stack | |
| | Camada | Tecnologias | | |
| | --- | --- | | |
| | App | Expo, React, React Native, React Native Web | | |
| | Navegação | React Navigation | | |
| | HTTP client | Axios | | |
| | Estado/local storage | React state, Context API, AsyncStorage | | |
| | API | Node.js, Express | | |
| | Banco | PostgreSQL, pg | | |
| | Autenticação | JWT, bcrypt | | |
| | Upload | Multer, Multer S3, AWS S3 | | |
| | Email | Brevo API, Nodemailer/AWS SES como dependências | | |
| | Pagamento | Pagar.me | | |
| | Jobs | Node scripts, node-cron | | |
| | Build mobile | EAS/Expo | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment