Skip to content

mmyersbyte/appdesatende

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

51 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Desatende

DESATENDE


JAVASCRIPT NODE EXPRESS.JS MONGODB MONGOOSE SWAGGER

JWT BCRYPT JOI

React Native AXIOS

API para registro e resposta de reclamações


Objetivo do Projeto

Desatende é um app que desenvolvi sozinho para um projeto da faculdade, com backend focado em boas práticas e segurança. O nome “Desatende” une as palavras “desatenção” e “atende”, deixando claro o propósito: registrar falhas no atendimento em setores como restaurantes, faculdades, companhias aéreas e outros. Usuários podem cadastrar reclamações, detalhando o ocorrido e a localização, e as reclamações são organizadas por categoria, facilitando a busca por setor. Empresas e instituições podem responder publicamente, promovendo transparência e resolução. O objetivo é criar uma comunidade onde experiências reais ajudam a pressionar por melhorias no atendimento e elevar o padrão de serviço. O aplicativo não foi publicado em ambiente de produção como o Play Console e Render, sendo destinado exclusivamente a fins educacionais e sem fins lucrativos.

DesatendeIndex Desatende


DOCS

Com o backend rodando, acesse http://localhost:5000/api-docs no navegador para testar a API pela interface gráfica Swagger UI.

docs

Autenticação e Segurança

A autenticação utiliza JWT para gerar e validar tokens de sessão de forma segura. Os tokens são assinados com uma chave secreta definida em variáveis de ambiente (dotenv), nunca expostos no código-fonte. As senhas dos usuários são validadas, possuem requisitos mínimos e são armazenadas já criptografadas usando bcrypt. O backend implementa validação de dados com Joi e limita tentativas abusivas de acesso através do express-rate-limit, protegendo a API contra ataques de força bruta e DDoS. Como o frontend é React Native, não há necessidade de configuração de CORS. O sistema possui fluxo completo de cadastro e autenticação, permitindo que novos usuários se registrem normalmente.

Telas e funcionalidades

O aplicativo possui fluxo de autenticação com telas de login e cadastro, tanto para usuários quanto empresas. Após login, a Home lista empresas disponíveis, permitindo abrir um modal para envio de reclamações utilizando o método POST na API. Usuários autenticados podem acessar o Perfil para visualizar suas reclamações, deletar abertas e avaliar respostas recebidas após interação da empresa. A tela de perfil também conta com botão de logout seguro.

No dashboard da empresa, é possível visualizar todas as reclamações recebidas. Cada reclamação pode ser respondida diretamente pelo dashboard, utilizando o método PATCH para editar o status e a resposta do registro. Todo o fluxo é baseado em autenticação via JWT e integração direta com as rotas protegidas do backend.

Desatende

Stacks e principais tecnologias

O projeto utiliza React Native para a interface mobile, integração de APIs via Axios, backend construído em Node.js com Express e ESModules. O banco de dados é MongoDB, utilizando Mongoose como ODM.

A autenticação é baseada em JWT e as senhas são protegidas com bcrypt. O projeto adota Joi para validação de dados, express-rate-limit para limitar requisições e diversas outras bibliotecas para garantir boas práticas e segurança.

app.js

Testes Automatizados

Os testes unitários foram implementados com o Poku leve, rápido e brasileiro! 🇧🇷 Além disso, utilizei Thunder Client e HTTPie para testes manuais dos endpoints.

Como rodar o backend localmente

  1. Clone este repositório:
    git clone https://github.com/mmyersbyte/appdesatende
  2. Acesse a pasta do backend:
    cd backend
  3. Configure as variáveis de ambiente:
    Crie um arquivo .env com base no arquivo .env.example fornecido.
    Dica: Preencha o JWT_SECRET com um valor seguro para testar autenticação JWT.
  4. Instale as dependências:
    npm install
  5. Inicie o servidor:
    npm run dev
    ou
    node server.js

Como rodar o frontend localmente

  1. Pré-requisitos: Tenha o Node.js e o Expo CLI instalados em seu computador.
  2. Acesse a pasta do frontend:
    cd app
  3. Instale as dependências:
    npm install
  4. Configure a URL da API:
    Altere a BASE_URL para o endereço do seu backend local no arquivo app.json ou no arquivo de configuração correspondente.
  5. Execute o projeto:
    npx expo start
  6. Testando no seu celular físico:
    Instale o aplicativo Expo Go na Play Store/App Store, escaneie o QR Code do terminal e pronto!
  7. Testando no emulador:
    Instale o Android Studio, configure um emulador Android e rode o comando acima. O Expo vai detectar o emulador automaticamente.

Estrutura do Projeto

.
├── backend
│   ├── .env
│   ├── package.json
│   ├── server.js
│   ├── swagger
│   │   ├── swagger.json
│   │   └── swagger.js
│   ├── tests
│   │   ├── auth.test.js
│   │   ├── validators.test.js
│   └── src
│       ├── app.js
│       ├── config
│       │   └── db.js
│       ├── controllers
│       │   ├── authEmpresa.Controller.js
│       │   ├── authUser.Controller.js
│       │   ├── empresa.Controller.js
│       │   ├── reclamacao.Controller.js
│       │   └── user.Controller.js
│       ├── middlewares
│       │   ├── auth.js
│       │   ├── errorHandler.js
│       │   ├── notFoundHandler.js
│       │   ├── rateLimiter.js
│       │   ├── upload.js
│       │   └── validate.js
│       ├── models
│       │   ├── Empresa.js
│       │   ├── Reclamacao.js
│       │   └── User.js
│       ├── routes
│       │   ├── empresa.js
│       │   ├── reclamacao.js
│       │   └── user.js
│       └── validators
│           ├── authValidators.js
│           └── reclamacaoValidators.js
├── app
│   ├── api
│   │   ├── auth.js
│   │   ├── axios.js
│   │   ├── empresas.js
│   │   └── reclamacao.js
│   ├── components
│   │   ├── AuthModal.jsx
│   │   ├── CustomButton.jsx
│   │   ├── EmpresaItem.jsx
│   │   ├── Formulario.jsx
│   │   ├── HeaderTitulo.jsx
│   │   ├── LogoutButton.jsx
│   │   ├── ModalAvaliarReclamacao.jsx
│   │   ├── ModalCriarReclamacao.jsx
│   │   ├── ModalRespostaReclamacao.jsx
│   │   ├── ReclamacaoItem.jsx
│   │   └── Rodape.jsx
│   ├── estilos
│   │   ├── estilosHome.js
│   │   ├── estilosLogin.js
│   │   ├── estilosPerfil.js
│   │   └── estilosPerfilEmpresa.js
│   ├── hooks
│   │   ├── useAuth.js
│   │   ├── useEmpresas.js
│   │   ├── useFeedback.js
│   │   ├── useImagePicker.js
│   │   ├── useMinhasReclamacoes.js
│   │   ├── useReclamacoesRecebidas.js
│   │   └── useRefresh.js
│   ├── dashboard.jsx
│   ├── home.jsx
│   ├── index.jsx
│   └── perfil.jsx
├── app.js
├── app.json
├── package.json

About

Um aplicativo para registrar reclamações e interações entre clientes e empresas.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published