Skip to content

O coração do Cleaning-App. Este repositório privado abriga todo o código-fonte do frontend (React Native/Expo) e backend (NestJS/PostgreSQL), além de configurações, testes e documentação interna.

License

Notifications You must be signed in to change notification settings

techleadevelopers/limpe-ja-app

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

75 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

LimpeJá-App Logo

Aplicativo LimpeJá ✨🧹

Seu marketplace de confiança para encontrar e agendar os melhores profissionais de limpeza da sua região!

Emblema do React Native Emblema da Expo Emblema NestJS Emblema do PostgreSQL Emblema Prisma Emblema Socket.IO Emblema TypeScript Emblema EAS Licença MIT Status da construção

✨ Destaques e Pilares Tecnológicos

O projeto LimpeJá é construído sobre pilares tecnológicos e de arquitetura que garantem sua robustez, escalabilidade e modernidade, alinhando-se às melhores práticas do mercado.

Google Cloud Firebase Auth OTP Design Patterns SOLID Clean Architecture SaaS Enterprise AI Recommendations

📖 Sobre o Projeto

O LimpeJá é um mercado inovador que visa revolucionar a forma como serviços de limpeza e organização são contratados e gerenciados. Ele conecta clientes que buscam serviços de alta qualidade para profissionais independentes e empresas especializadas, oferecendo uma plataforma intuitiva para descobrir profissionais envolvidos, verificar avaliações, agendar serviços com dados e horários flexíveis, e realizar pagamentos seguros.

Para os profissionais de limpeza, o LimpeJá é uma ferramenta poderosa para expandir sua clientela, gerenciando sua agenda de forma autônoma e recebendo pagamentos de forma garantida e simplificada. Construído com tecnologia de ponta, o aplicativo oferece uma experiência de usuário fluida e moderna, tanto para quem busca um ambiente limpo quanto para quem oferece o serviço de limpeza. O setor de limpeza no Brasil está se consolidando como uma indústria estratégica e essencial, com a valorização da higiene intensificada após a pandemia de COVID-19, o que representa uma oportunidade estrutural para o LimpeJá.

✨ Funcionalidades Principais

Para Clientes

  • 🧼 Busca Inteligente: Encontre profissionais por especialidade, localização e avaliações.
  • 📅 Agendamento Flexível: Escolha dados e horários que se encaixam na sua rotina e gerencie seus agendamentos.
  • 💳 Pagamento Seguro (incluindo PIX): Transações protegidas dentro da plataforma, com suporte a geração de cobranças PIX e processamento de webhooks para atualização de status de pagamento.
  • ⭐ Avaliações Confiáveis: Deixe e veja avaliações para ajudar a comunidade e garantir a qualidade do serviço.
  • 💬 Comunicação Direta (Chat em Tempo Real): Chat em tempo real integrado para combinar detalhes com o profissional, com persistência de conversas e notificações instantâneas.
  • 🏠 Perfis Detalhados: Visualize informações completas sobre os profissionais, incluindo serviços oferecidos e status de verificação.
  • 🔔 Notificações em Tempo Real: Receba alertas instantâneos sobre o status dos agendamentos, mensagens e promoções via notificações push.
  • ⚙️ Gerenciamento de Perfil: Atualize suas informações pessoais e de contato.

Para Profissionais de Limpeza (Prestadores)

  • 🚀 Visibilidade Ampliada: Alcance mais clientes e aumente sua renda através de um perfil profissional detalhado.
  • 🗓️ Gestão de Agenda: Controle total sobre seus horários e disponibilidade, aceitando ou recusando agendamentos.
  • 💰 Pagamentos Garantidos e Saques: Receba de forma segura e pontual pelos seus serviços, com visualizações de ganhos, solicitação de saques e atomicidade garantida nas transações.
  • 📊 Perfil Profissional Detalhado: Mostre suas habilidades, experiência, portfólio de serviços e avaliações recebidas.
  • 🔔 Notificações em Tempo Real: Sobre novos pedidos, mensagens e atualizações de agendamento via notificações push.
  • ✅ Processo de Verificação Robusto: Passe por um processo de verificação de conta (CPF, documento com OCR, selfie com comparação facial e prova de vida, verificação de antecedentes em APIs reais) para aumentar a confiança dos clientes.
  • 🛠️ Gerenciamento de Serviços: Adicione, edite e remova os tipos de serviços que você oferece, definindo preços e durações.
  • 💬 Chat em Tempo Real: Comunique-se diretamente com seus clientes para esclarecer dúvidas e combinar detalhes, com persistência de conversas.

🛠️ Tecnologias Principais

O projeto LimpeJá é construído sobre uma pilha tecnológica robusta e moderna, garantindo eficiência e escalabilidade em todas as camadas.

Frontend

  • Framework UI: React Native - Para construção de interfaces de usuário nativo para iOS e Android a partir de uma única base de código, com foco em desempenho e experiência do usuário.
  • Navegação: Expo Router - Sistema de roteamento baseado em arquivos para aplicativos Expo e React Native, oferecendo navegação robusta, tipada e com suporte a deep linking.
  • Gerenciamento de Estado Global: React Context API - Para gerenciar estados compartilhados, como o contexto de autenticação (`AuthContext`), de forma eficiente, evitando 'perfuração de prop' e centralizando dados.
  • Tipagem: TypeScript - Essencial para a segurança e consistência dos dados, especialmente na integração com o backend e para escalabilidade do desenvolvimento.
  • Estilização: StyleSheet do React Native, com temas sonoros (claro/escuro) gerenciados via `Colors.ts` e `theme.ts` para consistência visual.
  • Animações: React Native Animated API para transições suaves e `react-native-reanimated` para animações complexas e performáticas, incluindo efeitos visuais com `expo-linear-gradient` e `expo-blur`.
  • Ícones: `@expo/vector-icons` e `react-native-svg` para ícones personalizados e animados.
  • Utilitários Expo: `expo-image-picker`, `expo-clipboard`, `react-native-safe-area-context`, `expo-haptics` (para feedback tátil).
  • Requisições HTTP: Axios - Para chamadas HTTP à API backend, configuradas com interceptores para tratamento de autenticação e erros.
  • Serviços Expo: EAS (Expo Application Services) - Para um fluxo de desenvolvimento gerenciado, builds e atualizações. Inclui:
    • `EAS Build`: Para compilação de APKs/AABs e IPAs na nuvem.
    • `EAS Submit`: Para envio para as lojas (futuramente).
    • `EAS Update`: Para atualizações over-the-air (futuramente).
  • Autenticação por Telefone (Firebase): Implementação de login e registro via número de telefone com OTP (One-Time Password) utilizando o Firebase Authentication, garantindo um fluxo de autenticação seguro e eficiente para dispositivos móveis.
  • Notificações Push (Firebase Cloud Messaging): Integração com o Firebase Cloud Messaging para envio e recebimento de notificações push em tempo real, mantendo os usuários informados sobre agendamentos, mensagens de chat e atualizações importantes.

Backend

  • Framework: NestJS (Node.js) - Escolha estratégica por sua modularidade, forte tipagem (TypeScript), aderência a padrões de arquitetura (DDD, MVC-like) e um ecossistema robusto para construir APIs escaláveis ​​e manuteníveis.
  • Linguagem: TypeScript - Oferece segurança de tipo em todas as camadas, desde os DTOs até a interação com o banco de dados via ORM, melhorando a manutenibilidade e reduzindo erros no tempo de execução.
  • Banco de Dados: PostgreSQL - Um sistema de dados relacionado a banco robusto, bastante e escalável, ideal para dados estruturados e relações complexas.
  • ORM: Prisma - ORM moderno e type-safe que simplifica a interação com o banco de dados, oferece migrações declarativas e garantir a segurança de tipo nas operações de persistência.
  • Autenticação: JWT (JSON Web Tokens) com Passport.js - Para autenticação stateless e segura, permitindo controle de acesso baseado em papéis (RBAC) e protegendo rotas sensíveis.
  • Comunicação em Tempo Real: Socket.IO - Para comunicação bidirecional em tempo real, fundamental para funcionalidades como chat e notificações instantâneas.
  • Validação: Class-validator e Class-transformer - Para validação declarativa de DTOs, garantindo que os dados de entrada da API estejam sempre no formato e com os valores esperados.
  • API de documentação: Swagger (OpenAPI) - Para documentação automática e interativa da API, facilitando o consumo por desenvolvedores de frontend e a utilização da API.
  • Variáveis ​​de Ambiente: `@nestjs/config` com Joi - Para gerenciamento seguro e validação rigorosas das configurações de ambiente, garantindo a integridade da aplicação.
  • Verificação de Provedores (APIs Reais): Implementação robusta do processo de verificação de provedores, incluindo integração com Google Cloud Vision API para OCR (reconhecimento de documentos), comparação facial, e APIs de terceiros para verificação de antecedentes criminais.
  • Gateway de Pagamento PIX (Integração Real): Integração com um gateway de pagamento PIX real (ex: PagSeguro, Stripe, etc.) para processar transações, gerenciar webhooks e garantir a atomicidade das operações financeiras.
  • Notificações Push (FCM): Suporte a notificações push via Firebase Cloud Messaging (FCM) para enviar alertas e atualizações em tempo real aos usuários.
  • Busca Geoespacial Avançada: Implementação de lógica geoespacial (`PostGIS` com `Prisma.$queryRaw`) para busca de provedores por proximidade, utilizando coordenadas de latitude/longitude.
  • Consistência Monetária (Prisma Decimal): Uso do tipo `Decimal` do Prisma para garantir precisão exata em todos os cálculos e armazenamento de valores monetários.
  • Gerenciamento de Ganhos e Saques: Funcionalidades completas para provedores visualizarem seus ganhos, solicitarem saques e garantir a atomicidade das transações financeiras.

🔩 Arquitetura do Sistema

O projeto LimpeJá adota uma arquitetura em camadas claras, divididas principalmente entre o Backend (API) e o Frontend (Aplicativo Móvel), que se comunicam através de APIs RESTful e WebSockets.

Visão Geral e Propósito do Backend

O backend do LimpeJá é uma camada de serviço que gerencia toda a lógica de negócios, persistência de dados e a comunicação com o frontend. Construído com NestJS, o backend é responsável por conectar clientes e provedores, facilitando agendamentos, pagamentos, chat e avaliações. Sua arquitetura modular e escalável garante robustez e alto desempenho.

Arquitetura Geral e Fluxo de Requisição

O fluxo de uma requisição típica no sistema LimpeJá segue o seguinte caminho:

  1. Cliente (Usuário): Interage com a interface do usuário no Frontend (Aplicativo Móvel).
  2. Frontend (Aplicativo Móvel): Coleta e valida os dados de entrada do usuário, realiza chamadas a serviços internos, formato de requisição (HTTP ou WebSocket) e envio para o Backend, incluindo o token JWT no cabeçalho `Authorization` para requisições protegidas.
  3. Backend (API NestJS):
    • Guardas: Interceptam uma requisição para validação de autenticação (JWT) e autorização (papéis do usuário).
    • Pipes: Validam e transformam os DTOs de entrada.
    • Controlador: Recebe uma requisição validada, extrai parâmetros e delega a lógica de negócios para o Serviço de segurança.
    • Serviço: Contém a lógica de negócios principais, orquestrando operações e interagindo com o `PrismaService`. Pode injetar outros serviços para operações complexas.
    • PrismaService: Atua como uma camada de acesso a dados, executando operações no Banco de Dados.
    • Banco de Dados (PostgreSQL): Persiste e recupera os dados.
    • Resposta: O Service retorna os dados ao Controller, que os formato (geralmente usando DTOs de resposta) e os envio de volta ao Frontend.
    • Filtros: Capturam abordagens HTTP, formatando as respostas de erro de forma consistente.
  4. Frontend (Aplicativo Móvel): Recebe uma resposta do Backend, processa os dados e atualiza a interface do usuário, exibindo informações ou mensagens de erro ao Cliente.

Estrutura de Módulos (NestJS)

O backend é organizado em módulos coesos, seguindo o princípio de responsabilidade única. Cada módulo encapsula funcionalidades específicas, incluindo seus próprios controladores, serviços, DTOs e entidades.

  • `src/auth`: Gerenciamento de autenticação (registro, login, redefinição de senha, **incluindo autenticação por telefone e verificação de OTP via Firebase Admin SDK**).
  • `src/users`: Operações genéricas sobre usuários (perfis, dados básicos).
  • `src/clients`: Lógica específica para o papel do cliente.
  • `src/providers`: Lógica específica para o papel de provedor.
  • `src/availability`: Gestão da disponibilidade de horários dos provedores.
  • `src/services`: Gerenciamento de tipos de serviços globais (por exemplo, "Limpeza Padrão").
  • `src/provider-services`: Gerenciamento dos serviços específicos oferecidos por cada provedor.
  • `src/bookings`: Criação e gestão de agendamentos.
  • `src/payments`: Processamento de pagamentos (**PIX real** e saques) e integração com webhooks de gateways de pagamento.
  • `src/chat`: Funcionalidades de chat (**REST e WebSocket com persistência de conversas**).
  • `src/notifications`: Gerenciamento de notificações para usuários (**suporte a notificações push via FCM**).
  • `src/reviews`: Envio e consulta de avaliações.
  • `src/offers`: Gerenciamento de ofertas e promoções.
  • `src/search`: Motor de busca abrangente (**incluindo busca geoespacial de provedores**).
  • `src/verification`: Processo de verificação de provedores (**CPF, documentos com OCR, selfie com comparação facial e prova de vida, verificação de antecedentes em APIs reais**).
  • `src/prisma`: Módulo global para o `PrismaService`.
  • `src/config`: Módulo global para gerenciamento de configurações.
  • `src/common`: Componentes reutilizáveis ​​(pipes, filtros de exceção, DTOs genéricos, enums).

Modelo de Dados (Prisma Schema)

O prisma/schema.prisma define o modelo de dados relacional e é a fonte da verdade para a estrutura do banco de dados. Ele inclui:

  • Enums: `UserRole` (CLIENTE, PROVEDOR, ADMIN, SISTEMA), `VerificationStatus` (REVISÃO_INICIAL_PENDENTE, APROVADO, REJEITADO, etc.), `BookingStatus` (PENDENTE, CONFIRMADO, CONCLUÍDO, CANCELADO, etc.), `TransactionType` (PAGAMENTO, SAQUE, COMISSÃO).
  • Modelos Principais (Tabelas):
    • `User`: Entidade base para todos os usuários, com `email`, `passwordHash`, `role` e `avatarUrl`.
    • `Cliente`: ​​Detalhes específicos para clientes (`fullName`, `phone`).
    • `Provider`: Detalhes específicos para provedores (`fullName`, `cpf`, `dateOfBirth`, `verificationStatus`, `pixKey`). **Inclui campos para armazenamento de URLs de documentos e resultados de verificação.**
    • `Endereço`: Informações de endereço, usadas por clientes, provedores e agendamentos. **Suporta dados geoespaciais (`location`) para busca por proximidade.**
    • `Serviço`: Tipos de serviços que podem ser oferecidos (`nome`, `preço`, `icon`).
    • `ProviderService`: Um serviço específico oferecido por uma operadora, com `price` e `durationMinutes`.
    • `Booking`: Representa um agendamento de serviço, incluindo `totalPrice` e um `addressId` específico para o agendamento. **Status de agendamento expandidos para maior granularidade.**
    • `Chat` e `Message`: Para comunicação em tempo real entre usuários. **Com persistência de mensagens.**
    • `Notificação`: Armazena notificações para usuários.
    • `Review`: Avaliações de serviços, vinculadas a um `Booking`.
    • `Oferta`: Gerencia ofertas e promoções.
    • `Transaction`: Registra todas as transações financeiras, utilizando `Prisma.Decimal` para garantir a rentabilidade monetária. **Inclui `bookingId` para rastreamento de transações de agendamento.**
    • `Disponibilidade`: Define a disponibilidade de horários dos provedores.
  • Precisão Monetária: O uso do tipo `Decimal` do Prisma (`@db.Decimal(10, 2)`) para campos como `price`, `totalPrice` e `amount` garante precisão exata em cálculos financeiros, evitando erros de arredondamento.

Princípios de Design e Padrões de Projeto

O projeto LimpeJá segue princípios de design e padrões de projeto que promovem qualidade, manutenibilidade e escalabilidade em todo o stack.

  • Arquitetura em Camadas: Tanto o frontend quanto o backend seguem uma arquitetura em camadas claras (Controladores/Telas, Serviços/Lógica de Negócios, Acesso a Dados), promovendo a separação de preocupações.
  • Data Transfer Objects (DTOs): Utilização rigorosa de DTOs para validação de entrada (com `class-validator` e `class-transformer`) e tipagem de saída em todas as interações API, garantindo a integridade e segurança dos dados.
  • Autenticação e Autorização: Implementação robusta de JWT e RBAC (Role-Based Access Control) para proteger rotas e recursos, com `Guards` e `Strategies` no NestJS.
  • Tratamento Centralizado de Erros: O `HttpExceptionFilter` do backend padroniza as respostas de erro, permitindo que o frontend interprete e exiba mensagens significativas ao usuário via `Alert.alert` ou `ToastMessage`.
  • Modularidade: Módulos de dados no backend (NestJS) e componentes reutilizáveis ​​no frontend (React Native) garantem organização, testabilidade e reutilização de código.
  • Segurança de Tipos (Type-Safety): O uso extensivo de TypeScript em ambas as camadas, complementado pelo Prisma ORM no backend, garante a consistência e integridade dos dados em tempo de construção e execução.
  • Injeção de Dependência: Sem backend (NestJS), facilita a testabilidade e modularidade dos serviços, seguindo os princípios SOLID.
  • Componentização (Frontend): Divisão da UI em componentes pequenos e reutilizáveis ​​(`components/ui/`), promovendo reutilização e manutenibilidade.
  • Gerenciamento de Estado: Combinação de Hooks do React (`useState`, `useEffect`, `useRef`) para estado local e Context API (`AuthContext`, `AppContext`, `ProviderRegistrationContext`) para estado global no frontend.
  • Navegação Declarativa: Uso do Expo Router para uma gestão de rotas intuitiva e baseada em arquivos, com layouts aninhados.
  • Animações e Responsividade: Aplicação de animações fluidas (`react-native-reanimated`, React Native Animated API) e design responsivo para aprimorar a experiência do usuário em diferentes dispositivos, com `useNativeDriver: true` para otimização.
  • Gerenciamento de Dados e Fluxo de Informações: O frontend segue o padrão Unidirecional do React, com dados fluindo de contextos globais e estado local, e interações com o backend via camada de serviços tipada (`services/`).
  • Separação de Entidades e DTOs (Backend): Entidades (`*.entity.ts`) para o modelo de domínio e DTOs (`*.dto.ts`) para validação/formatação de API, melhorando segurança e validação.
  • Consistência na Manipulação de Dados: Uso cuidadoso de objetos Date e UTC para evitar problemas de fuso horário, especialmente em agendamentos e disponibilidade.
  • Hooks de Desligamento do Prisma: Garantem o fechamento gracioso da conexão com o banco de dados em caso de encerramento da aplicação.

🔗 Conexão Frontend-Backend

A interligação entre o Frontend (React Native/Expo) e o Backend (NestJS) do projeto LimpeJá é um pilar fundamental da arquitetura, garantindo uma comunicação eficiente e segura.

  • Padrão de Comunicação: Predominantemente APIs RESTful (HTTP) para operações transacionais e de consulta, e WebSockets para funcionalidades de comunicação em tempo real (chat, notificações).
  • Autenticação JWT: O `AuthContext` no frontend gerencia o ciclo de vida do token JWT, obtido via `POST /auth/login`. Este token é armazenado de forma segura no AsyncStorage e anexado automaticamente como `Authorization: Bearer ` em todas as requisições protegidas ao backend.
  • Consistência de Dados (DTOs e Interfaces TypeScript): Um alinhamento específico é reservado entre as interfaces TypeScript do frontend (localizadas em `LimpeJaApp/src/types/backend/`) e os DTOs definidos no backend. Isso garante a validação e consistência da estrutura de dados em ambas as camadas, minimizando erros de tipagem e facilitando a colaboração.
  • Tratamento de Erros: O `HttpExceptionFilter` do backend padroniza as respostas de erro, permitindo que o frontend interprete e exiba mensagens significativas ao usuário. As chamadas de API no frontend incluem blocos `try-catch` para lidar com erros de rede e respostas de erro da API.
  • Serviços Centralizados: Chamadas de API são encapsuladas em serviços centralizados (`authService.ts`, `clientService.ts`, `providerService.ts`) que utilizam o Axios, promovendo reutilização de código e padronização.

Mapeamento de Rotas da API

Para uma lista completa de endpoints e DTOs, consulte uma documentação detalhada do backend, que pode ser acessada via Swagger UI em `http://localhost:3000/api` (após iniciar o backend). Abaixo alguns exemplos de interações:

<cabeça>

📁 Estrutura do Projeto

O projeto LimpeJá é um monorepo, contendo pastas para o frontend (LimpeJaApp/) e para o backend (backend-LimpeJá/).

Frontend Folder Structure

LimpeJáApp/
├── app/ # Contém apenas as rotas e layouts do Expo Router
│ ├── (auth)/ # Authentication Flow
│ │ ├── provider-registration/
│ │ │ ├── verification/
│ │ │ │ ├── background-check-status.tsx
│ │ │ │ ├── document-upload.tsx
│ │ │ │ ├── facial-recognition.tsx
│ │ │ │ ├── index.tsx
│ │ │ │ ├── layout.tsx
│ │ │ │ ├── personal-details.tsx
│ │ │ │ ├── service-details.tsx
│ │ │ │ └── verify-account.tsx
│ │ │ ├── index.tsx
│ │ │ ├── layout.tsx
│ │ │ ├── personal-details.tsx
│ │ │ └── service-details.tsx
│ │ ├── client-registration.tsx
│ │ ├── forgot-password.tsx
│ │ ├── layout.tsx
│ │ ├── login.tsx
│ │ ├── README.md
│ │ ├── register-options.tsx
│ │ └── connection-test.tsx
│ ├── (client)/ # Client Functionalities
│ │ ├── bookings/ # Client Appointments
│ │ │ ├── [bookingId].tsx
│ │ │ ├── index.tsx
│ │ │ ├── schedule-service.tsx
│ │ │ └── success.tsx
│ │ ├── explore/ # Explore Services/Professionals
│ │ │ ├── [providerId].tsx
│ │ │ ├── index.tsx
│ │ │ ├── search-results.tsx
│ │ │ ├── search-results.tsx
│ │ │ ├── services-by-category.tsx
│ │ │ ├── all-categories.tsx
│ │ │ └── all-nearby-providers.tsx
│ │ ├── messages/ # Client Messages
│ │ │ ├── [chatId].tsx
│ │ │ └── index.tsx
│ │ ├── offers/ # Client Offers
│ │ │ └── [offerId].tsx
│ │ └── profile/ # Client Profile
│ │ │ ├── edit.tsx
│ │ │ ├── index.tsx
│ │ │ ├── layout.tsx
│ │ │ └── layout.tsx
│ ├── (common)/ # Common Functionalities (client and provider)
│ │ ├── reviews/
│ │ │ └── [targetId].tsx
│ │ ├── help.tsx
│ │ ├── layout.tsx
│ │ ├── notifications.tsx
│ │ ├── privacy.tsx
│ │ ├── README.md
│ │ ├── settings.tsx
│ │ └── terms.tsx
│ ├── (provider)/ # Provider Functionalities
│ │ ├── messages/ # Provider Messages
│ │ │ ├── [chatId].tsx
│ │ │ └── index.tsx
│ │ ├── profile/ # Provider Profile
│ │ │ ├── edit-services.tsx
│ │ │ └── index.tsx
│ │ ├── scheduling/ # Provider Schedule/Availability
│ │ │ └── index.tsx
│ │ ├── services/ # Provider Services/Requests
│ │ │ ├── [serviceId].tsx
│ │ │ └── index.tsx
│ │ ├── dashboard.tsx
│ │ ├── earnings.tsx
│ │ ├── layout.tsx
│ │ └── README.md
│ ├── _layout.tsx
│ ├── +not-found.tsx
│ ├── doc.md
│ ├── index.tsx
│ ├── README.md
│ └── welcome.tsx
├── assets/ # Static resources (fonts, images, lottie)
│ ├── fonts/
│ ├── images/
│ └── lottie/
├── components/ # Componentes React UI globais e reutilizáveis (InputWithIcon, AnimatedErrorMessage, etc.)
│ ├── layout/
│ └── ui/
├── config/ # Configurações do aplicativo (AppConfig, Firebase, etc.)
│ ├── AppConfig.ts
│ ├── firebase.ts
│ └── firebaseClient.ts
├── constants/ # Constantes globais (Cores, Rotas, Strings, Temas)
│ ├── Colors.ts
│ ├── routes.ts
│ ├── strings.ts
│ └── theme.ts
├── contexts/ # Contextos React para gerenciamento de estado global
│ ├── AppContext.tsx
│ ├── AuthContext.tsx
│ └── ProviderRegistrationContext.tsx
├── documentation/ # Documentação interna
├── hooks/ # Hooks React personalizados
│ ├── useAuth.ts
│ ├── useColorScheme.ts
│ ├── useColorScheme.web.ts
│ ├── useFormValidation.ts
│ └── useThemeColor.ts
├── node_modules/
├── scripts/ # Scripts auxiliares para o projeto
│ └── reset-project.js
├── services/ # Camada de serviços para comunicação com o backend (Axios, etc.)
│ ├── api.ts
│ ├── authService.ts
│ ├── bookingService.ts
│ ├── chatService.ts
│ ├── clientService.ts
│ ├── faqService.ts
│ ├── firebaseConfig.ts
│ ├── notificationService.ts
│ ├── offerService.ts
│ ├── paymentService.ts
│ ├── providerService.ts
│ ├── reviewService.ts
│ ├── searchService.ts
│ ├── uploadService.ts
│ └── verificationService.ts
├── types/ # Definições de tipos TypeScript (interfaces, enums) para frontend e backend
│ ├── auth.ts
│ ├── booking.ts
│ ├── bookings.ts
│ ├── chat.ts
│ ├── clients.ts
│ ├── faqs.ts
│ ├── index.ts
│ ├── navigation.ts
│ ├── notifications.ts
│ ├── offers.ts
│ ├── payments.ts
│ ├── provider.ts
│ ├── providers.ts
│ ├── reviews.ts
│ ├── service.ts
│ ├── services.ts
│ ├── types.ts
│ ├── user.ts
│ ├── users.ts
│ └── verification.ts
├── utils/ # Funções utilitárias e helpers
│ ├── helpers.ts
│ ├── permissions.ts
│ └── storage.ts
├── .env # Variáveis de ambiente
├── .gitignore # Arquivos e pastas a serem ignorados pelo Git
├── app.json
├── babel.config.js
├── eas.json
├── eslint.config.js
├── expo-env.d.ts # Definições de tipo para variáveis de ambiente Expo
├── LICENSE
├── metro.config.js
├── package-lock.json
├── package.json
├── README.md
├── src.rar # Arquivo compactado (deve ser ignorado pelo Git)
├── tsconfig.build.json
└── tsconfig.json

Backend Folder Structure

backend-LimpeJá/
├── dist/ # Saída compilada
├── node_modules/
├── prisma/ # Esquema Prisma e migrações
│ ├── migrations/
│ └── schema.prisma
├── src/ # Código fonte do NestJS
│ ├── auth/ # Módulo de Autenticação
│ │ ├── decorators/
│ │ ├── dto/
│ │ ├── guards/
│ │ ├── strategies/
│ │ ├── auth.controller.ts
│ │ ├── auth.module.ts
│ │ └── auth.service.ts
│ ├── availability/ # Módulo de Disponibilidade
│ │ ├── dto/
│ │ ├── entities/
│ │ ├── availability.controller.ts
│ │ ├── availability.module.ts
│ │ └── availability.service.ts
│ ├── bookings/ # Módulo de Agendamentos
│ │ ├── dto/
│ │ ├── entities/
│ │ ├── bookings.controller.ts
│ │ ├── bookings.module.ts
│ │ └── bookings.service.ts
│ ├── chat/ # Módulo de Chat
│ │ ├── dto/
│ │ ├── entities/
│ │ ├── gateway/
│ │ ├── chat.controller.ts
│ │ ├── chat.module.ts
│ │ └── chat.service.ts
│ ├── clients/ # Módulo de Clientes
│ │ ├── dto/
│ │ ├── entities/
│ │ ├── clients.controller.ts
│ │ ├── clients.module.ts
│ │ └── clients.service.ts
│ ├── common/ # Componentes comuns (filtros, pipes, etc.)
│ │ ├── constants/
│ │ ├── decorators/
│ │ ├── dto/
│ │ ├── entities/
│ │ ├── filters/
│ │ ├── interceptors/
│ │ └── pipes/
│ ├── config/ # Configurações de ambiente
│ │ ├── config.module.ts
│ │ ├── config.ts
│ │ └── validation-schema.ts
│ ├── notifications/ # Módulo de Notificações
│ │ ├── dto/
│ │ ├── entities/
│ │ ├── notifications.controller.ts
│ │ ├── notifications.module.ts
│ │ └── notifications.service.ts
│ ├── offers/ # Módulo de Ofertas
│ │ ├── dto/
│ │ ├── entities/
│ │ ├── offers.controller.ts
│ │ ├── offers.module.ts
│ │ └── offers.service.ts
│ ├── payments/ # Módulo de Pagamentos
│ │ ├── dto/
│ │ ├── entities/
│ │ ├── payments.controller.ts
│ │ ├── payments.module.ts
│ │ └── payments.service.ts
│ ├── prisma/ # Módulo Prisma para o NestJS
│ │ ├── prisma.module.ts
│ │ └── prisma.service.ts
│ ├── provider-services/ # Módulo de Serviços do Provedor
│ │ ├── dto/
│ │ ├── entities/
│ │ ├── provider-services.controller.ts
│ │ ├── provider-services.module.ts
│ │ └── provider-services.service.ts
│ ├── providers/ # Módulo de Provedores
│ │ ├── dto/
│ │ ├── entities/
│ │ ├── providers.controller.ts
│ │ ├── providers.module.ts
│ │ └── providers.service.ts
│ ├── reviews/ # Módulo de Avaliações
│ │ ├── dto/
│ │ ├── entities/
│ │ ├── reviews.controller.ts
│ │ ├── reviews.module.ts
│ │ └── reviews.service.ts
│ ├── search/ # Módulo de Busca
│ │ ├── dto/
│ │ ├── search.controller.ts
│ │ ├── search.module.ts
│ │ └── search.service.ts
│ ├── services/ # Módulo de Tipos de Serviço (globais)
│ │ ├── dto/
│ │ ├── update-service.dto.ts
│ │ ├── entities/
│ │ ├── services.controller.ts
│ │ ├── services.module.ts
│ │ └── services.service.ts
│ └── verification/ # Módulo de Verificação
│ ├── dto/
│ │ ├── send-cpf.dto.ts
│ │ ├── upload-document.dto.ts
│ │ └── upload-selfie.dto.ts
│ ├── entities/
│ ├── criminal-background-check.service.ts
│ ├── document-processing-service.ts
│ ├── verification.controller.ts
│ ├── verification.module.ts
│ └── verification.service.ts
├── shared/ # Código compartilhado (enums, interfaces, types)
│ ├── enums/
│ ├── interfaces/
│ └── types/
├── users/ # Módulo de Usuários
│ ├── dto/
│ ├── entities/
│ ├── users.controller.ts
│ ├── users.module.ts
│ └── users.service.ts
├── app.controller.spec.ts # Testes para o controlador principal
├── app.controller.ts
├── app.module.ts
├── app.service.ts
├── main.ts # Ponto de entrada da aplicação
└── test/ # Testes e configurações de teste
├── .env
├── .env.example
├── .gitignore
├── .prettierrc
├── eslint.config.mjs
├── nest-cli.json
├── package-lock.json
├── package.json
├── README.md
├── src.rar # Arquivo compactado (deve ser ignorado pelo Git)
├── tsconfig.build.json
└── tsconfig.json

🚀 Getting Started

To set up and run the project locally, follow the steps below:

Prerequisites

Ensure you have the following tools installed:

Instalação

  1. Clone o repositório:
    git clone https://github.com/techleadevelopers/limpe-ja-app.git
    
    cd limpe-ja-app
  2. Instale as dependências do Frontend:
    cd LimpeJaApp
    
    npm install # ou yarn install
    
    cd ..
  3. Instalar as dependências do Backend:
    cd backend-LimpeJá
    
    npm install # ou yarn install
    
    cd ..
  4. Configurar o banco de dados (PostgreSQL com Docker):
    • Crie um arquivo `.env` na raiz da pasta `backend-LimpeJá` com as variáveis ​​de ambiente do banco de dados e do JWT. Exemplo:
      DATABASE_URL="postgresql://user:password@localhost:5432/LimpeJá_db"
      
      JWT_SECRET="sua_chave_secreta_jwt_aqui"
      
      JWT_EXPIRATION_TIME="1h"
      
      PORTA=3000
    • Suba o contêiner Docker do PostgreSQL (assumindo que você tem um `docker-compose.yml` configurado para o postgres na raiz do projeto ou em `backend-LimpeJá/`):
      docker-compose up -d postgres # Ou o comando específico para seu docker-compose
    • Execute as migrações do Prisma para criar o esquema do banco de dados e gerar o Prisma Client:
      cd backend-LimpeJá
      
      npx prisma migrar dev --name init
      
      npx prisma gerar
      
      cd ..

Rodando Localmente

  1. Início do Backend:
    cd backend-LimpeJá
    
    npm run start:dev # ou yarn start:dev

    O backend estará disponível em `http://localhost:3000` (ou na porta configurada em `.env`). A documentação do Swagger estará em `http://localhost:3000/api`.

  2. Início do Frontend:

    Abra um novo terminal.

    cd LimpeJaApp
    
    início da exposição npx

    Isso abrirá o Metro Bundler. Você pode ler o código QR com o aplicativo Expo Go no seu celular, ou usar um emulador/simulador Android Emulador de estúdio / Simulador iOS.

📱 Gerando um APK para Teste (Android)

Para gerar um APK de teste para Android, você pode usar o EAS Build, um serviço da Expo para compilação de apps na nuvem.

  1. Certifique-se de estar logado no Expo CLI: `expo login`
  2. Na pasta `LimpeJaApp`, execute:
    construção eas --plataforma android --desenvolvimento de perfil

    Este comando iniciará um processo de build na nuvem da Expo, utilizando o perfil `development` configurado no `eas.json` para gerar um APK de teste. Ao final, você receberá um link para baixar o APK diretamente.

🤝 Contribuindo

Contribuições são o que tornam a comunidade de código aberto um lugar incrível para aprender, inspirar e criar. Qualquer contribuição que você fizer será muito apreciada.

Se você tem uma sugestão para melhorar este projeto, por favor, faça um fork do repositório e crie um pull request. Você também pode simplesmente abrir uma edição com a tag "melhoria".

Não se esqueça de dar uma estrela ao projeto! Obrigado novamente!

  1. Faça um Fork do Projeto
  2. Crie seu Feature Branch (`git checkout -b feature/AmazingFeature`)
  3. Commit suas mudanças (`git commit -m 'Add some AmazingFeature'`)
  4. Enviar para um Branch (`git push origin feature/AmazingFeature`)
  5. Abra um Pull Request

📜 Licença

Distribuído sob Licença MIT. Veja LICENSE.txt para mais informações.

📞 Contato

Paulo Silas de Campos Filho/ @techleadevelopers - techleadevelopers@gmail.com

Link do Projeto: https://github.com/techleadevelopers/limpe-ja-app

💰 LimpeJá Ganhos: Nossa Estratégia de Monetização

O LimpeJá foi concebido para ser uma plataforma que beneficia tanto os clientes em busca de serviços de limpeza de qualidade quanto os profissionais que desejam ampliar sua base de clientes e gerenciar seus serviços de forma eficiente. Nossa estratégia de monetização é transparente e se baseia no sucesso mútuo, inspirada em modelos de marketplace consolidados como o Airbnb, mas aplicada ao universo dos serviços de limpeza.

Como o LimpeJá Gera Receita:

A principal fonte de receita do LimpeJá virá de uma comissão percentual cobrada sobre o valor de cada serviço de limpeza que é agendado e efetivamente pago através da plataforma.

  1. Para o Profissional (Prestador de Serviço):
    • Ao se cadastrar, o profissional define seus preços para os diferentes tipos de serviço que oferece (ex: por hora, por tipo de limpeza, etc.).
    • Quando um cliente contrata e paga por um serviço através do LimpeJá, o valor total é processado pela plataforma.
    • O LimpeJá repassa o valor ao profissional, deduzindo uma taxa de serviço (comissão) previamente acordada e transparente. Esta taxa será nossa principal fonte de receita.
    • Benefícios para o Profissional: Acesso a uma ampla base de clientes, ferramentas de gerenciamento de agenda, marketing de plataforma, segurança no recebimento e processamento de pagamentos, suporte.
  2. Para o Cliente:
    • O cliente vê o preço total do serviço (que já inclui a porção do profissional e, implicitamente, a margem que permite a comissão do LimpeJá).
    • Em alguns modelos de marketplace, uma pequena taxa de conveniência/serviço pode ser adicionada ao cliente, mas o modelo principal geralmente foca na comissão sobre o valor pago ao prestador. Para o LimpeJá, podemos iniciar focando na comissão sobre o credor para manter a atratividade para o cliente.
    • Benefícios para o Cliente: Conveniência para encontrar e agenda profissional diversificada, variedade de escolha, sistema de avaliações para confiança, processo de pagamento simplificado e seguro, e a garantia de uma plataforma intermediando o serviço.

Transparência e Valor:

É crucial que a taxa de comissão seja clara para os profissionais e que o valor oferecido pela plataforma (marketing, base de clientes, ferramentas, segurança) justifique essa taxa. O sucesso do LimpeJá dependerá da criação de um ecossistema de que tanto clientes quanto profissionais vejam vantagens claras em usar a plataforma, resultando em um volume saudável de agendamentos e, consequentemente, receita para o aplicativo.

Este modelo permite que o LimpeJá cresça conforme o volume de transações na plataforma aumente, alinhando nossos ganhos com o sucesso dos profissionais parceiros.

✅ Status e Próximas Etapas

O projeto LimpeJá atingiu a fase de completa implementação das funcionalidades principais e integrações com APIs reais, estando 100% testado e pronto para a fase de deploy e manutenção. O roteiro a seguir foca em aprimoramentos contínuos, otimização e expansão estratégica.

  1. Otimização de Performance e Refinamento Contínuo:
    • Backend: Otimizar `include` statements do Prisma para evitar N+1 e carregamento excessivo de dados. Refinar transições de status de agendamento para maior fluidez e consistência. Continuar refinamento da documentação Swagger (`@ApiProperty`).
    • Frontend: Aprimorar a experiência do usuário e otimização de performance geral. Revisar avisos de depreciação de estilos e uso de `useNativeDriver` em animações para garantir a compatibilidade e o desempenho otimizado em todas as plataformas e builds.
  2. Expansão de Funcionalidades e Escala:
    • Backend:
      • Implementar o cálculo de `walletBalance` para clientes e provedores.
      • Refinar a lógica de permissões no `ChatController` e `ChatService` para maior granularidade.
      • Otimizar a recuperação de histórico de mensagens para grandes volumes.
      • Assegurar a atomicidade completa para todas as transações financeiras (ex: saques).
    • Frontend:
      • Implementar UI para gestão de `walletBalance` e fluxos de saque/depósito.
      • Desenvolver UI para filtros geoespaciais avançados na busca de provedores.
      • Aprimorar o sistema de mensagens com persistência completa e indicadores de status em tempo real (ex: "digitando...", "visto por último").
  3. Manutenção e Suporte:
    • Documentação: Manter a documentação técnica e de usuário atualizada e abrangente.
    • Testes: Implementar e expandir testes de integração e ponta a ponta para garantir a robustez contínua da aplicação.
    • Internacionalização (i18n): Adicionar suporte a múltiplos idiomas para uma expansão global futura.
    • Monitoramento: Configurar e refinar ferramentas de monitoramento de performance e erros em produção (APM, crash reporting).

📚 Recursos e Suporte

Para informações fornecidas e suporte sobre as tecnologias e o ecossistema do projeto LimpeJá, consulte os seguintes recursos oficiais:

Fluxo/Tela do Frontend Endpoint do Backend (Método HTTP, Caminho) DTOs (Requisição/Resposta)
Fluxo de Autenticação
Registro de Clientes `POST /auth/register/client` `RegisterClientDto` / `AuthResponseDto`
Login `POST /auth/login` `LoginDto` / `AuthResponseDto`
**Solicitar OTP** `**POST /auth/send-otp**` `**RequestOtpDto**` / `**MessageResponseDto**`
**Verificar OTP** `**POST /auth/verify-otp**` `**VerifyOtpDto**` / `**AuthResponseDto**`
Gerenciamento de Usuário/Perfil
Obter Perfil do Usuário `GET /users/me` `UserProfileDto`
Atualizar Perfil do Cliente `PATCH /clients/me` `UpdateClientProfileDto` / `ClientEntity`
Fluxo do Cliente
Buscar Provedores/Serviços `GET /search` `SearchQueryDto` / `SearchResultDto`
Criar Agenda `POST /bookings` `CreateBookingDto` / `BookingDetailsDto`
Criar Cobrança PIX `POST /payments/pix-charge` `CreatePixChargeDto` / `PixChargeResponseDto`
Fluxo do Provedor
Obter Agendamentos do Provedor `GET /bookings/me` `BookingDetailsDto[]`
Gerenciar Disponibilidade `PATCH /providers/:providerId/availability` `UpdateAvailabilityDto[]` / `AvailabilityDto[]`
Fluxo Comum
Obter Mensagens de Chat `GET /chat/:chatId/messages` `GetMessagesDto` / `Message[]`
Enviar mensagem de chat `POST /chat/:chatId/messages` `EnviarMensagemDpara` / `Mensagem`
Enviar Avaliação `POST /avaliações` `EnviarAvaliaçãoDpara` / `EntidadeAvaliação`

About

O coração do Cleaning-App. Este repositório privado abriga todo o código-fonte do frontend (React Native/Expo) e backend (NestJS/PostgreSQL), além de configurações, testes e documentação interna.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages