Skip to content

Latest commit

 

History

History
153 lines (133 loc) · 10.3 KB

File metadata and controls

153 lines (133 loc) · 10.3 KB

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