O MyCash é uma solução FullStack multiplataforma desenvolvida para oferecer controle financeiro completo e acessível. O ecossistema combina um frontend web moderno, um aplicativo mobile nativo (Android) e um backend robusto para gerenciar contas, transações e visualizações gráficas de fluxo de caixa em qualquer lugar.
- Framework: React com Next.js (App Router)
- Linguagem: TypeScript
- Estilização: Tailwind CSS
- Ícones: Lucide React
- Autenticação: Firebase Authentication (Client SDK)
- Linguagem: Kotlin
- UI Toolkit: Jetpack Compose (ou XML Views)
- Networking: Retrofit / OkHttp
- Injeção de Dependência: Hilt / Kotlin
- Arquitetura: MVVM (Model-View-ViewModel)
- API: Node.js com Express
- Arquitetura: MVC (Model-View-Controller) com Services e Repositories.
- Banco de Dados: Firebase Firestore.
- Segurança: Middleware de Autenticação via Firebase Admin SDK (Validação de Token Bearer).
- Sincronização: Lógica automática de criação/atualização de usuários no Firestore (UserService).
- Node.js v18+
- NPM ou Yarn
- Conta no Firebase (Projeto criado com Firestore e Auth habilitados)
- JDK 11 ou 17
- Android Studio (Koala ou superior recomendado)
- Android SDK Configurado
Crie um arquivo Firebase/firebaseConfig Front_end com as chaves do seu projeto Firebase:
codeEnv
`import { initializeApp } from "firebase/app"; import { getAuth } from "firebase/auth"; import { getFirestore } from "firebase/firestore"; import { getStorage } from "firebase/storage";
NEXT_PUBLIC_FIREBASE_API_KEY=""
NEXT_PUBLIC_FIREBASE_AUTH_DOMAIN=""
NEXT_PUBLIC_FIREBASE_PROJECT_ID=""
NEXT_PUBLIC_FIREBASE_STORAGE_BUCKET=""
NEXT_PUBLIC_FIREBASE_MESSAGING_SENDER_ID=""
NEXT_PUBLIC_FIREBASE_APP_ID=""
const app = initializeApp(firebaseConfig); export const db = getFirestore(app); export const auth = getAuth(app); export const storage = getStorage(app); `
No backend, a autenticação é feita via Firebase Admin SDK. Você precisará das credenciais de conta de serviço (Service Account).
- Baixe o JSON da conta de serviço no console do Firebase.
- Coloque-o na pasta Back-End/src/firebase/ (ou configure via variáveis de ambiente).
- Crie um arquivo .env na raiz do Back-End se necessário para portas ou chaves secretas de sessão.
Frontend (Web):
codeBash
cd Front_end npm install
Backend:
codeBash
cd Back-End npm install
O servidor rodará a API REST que processa as regras de negócio financeiras.
codeBash
`cd Back-End npm start
codeBash
cd Front_end npm run dev
Abra o projeto na pasta mobile através do Android Studio e clique em "Run" ou execute via terminal:
codeBash
cd mobile ./gradlew installDebug
A API segue padrões REST e utiliza tokens JWT (Firebase ID Token) no cabeçalho Authorization: Bearer .
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /api/auth/registrar | Registra novo usuário no Firebase e cria documento inicial no Firestore. |
| POST | /api/auth/login | Valida o token, cria sessão e sincroniza dados do usuário no Firestore (UserService). |
| POST | /api/auth/logout | Encerra a sessão do usuário no servidor. |
Todos os endpoints abaixo exigem autenticação. O uid é extraído automaticamente do token pelo middleware.
| Método | Endpoint | Descrição |
|---|---|---|
| POST | /api/transacoes | Cria uma nova transação (Receita ou Despesa). |
| GET | /api/transacoes | Lista todas as transações do usuário logado. |
| GET | /api/financeiro/resumo | Retorna o dashboard completo processado pelo FinanceService: • Fluxo Semanal (Semanas do mês) • Total por Categorias • Últimas 5 transações • Balanço Mensal (Receitas vs Despesas) |
A estrutura do servidor segue o padrão de separação de responsabilidades:
codeCode
server/ src/ controllers/ # Controladores (AuthController, CashController) - lidam com req/res services/ # Regras de Negócio (FinanceService, UserService, TransactionService) repositories/ # Acesso a Dados (UserRepository) - abstração do Firestore middlewares/ # Interceptadores (authMiddleware) firebase/ # Configuração do Admin SDK (admin.js) routes/ # Definição das rotas da API
- FinanceService: Contém algoritmos para agrupar transações por semana (_calcularFluxoSemanal) e categorias (_calcularCategorias), removendo essa carga de processamento do Frontend/Mobile.
- Sincronização de Usuário: Ao fazer login, o sistema verifica se o usuário existe na coleção users do Firestore. Se não existir (primeiro acesso via Google/Social), ele é criado automaticamente.