O GoBarber é uma plataforma WEB e MOBILE para agendamentos de serviços de barbearia.
A API do GoBarber serve a plataforma WEB e Mobile disponível para Android e iOS. 📱
Todas as rotas foram testadas utilizando o o do Insomnia. Para importar as rotas testadas para o Insomnia clique no botão:
🔒 Recuperação de senha
- Permite que um usuário consiga recuperar a senha informando o e-mail cadastrado;
- A API envia para o usuário um e-mail con instruções de recuperação de senha;
- A API envia um link com token por e-mail para resetar a senha e por segurança o token enviado expira em 2h;
- Cadastro e autenticação de usuários com geração de JwToken;
- Autenticação de usuários com JwToken;
👥 Atualização de perfil de usuário
- Permite usuário cadastrar-se e atualizar seu perfil (incluindo imagem de avatar);
- Validação de e-mails no cadastro, não é possível cadastrar dois usuários com mesmo e-mail;
- Para atualizar a senha, o usuário deve informar a senha antiga e a nova senha;
💻 Painel do Prestador de serviços (Barbeiro)
- Lista os agendamentos do prestador de serviços de um dia específico;
- O prestador recebe uma notificação sempre que houver um novo agendamento;
- O prestador pode visualizar as notificações não lidas;
- A notificação possui estado de lida ou não-lida para que o prestador de serviços consiga gerenciar suas notificações;
- Os agendamentos do prestador no dia também são armazenados em cache para acelerar o carregamento;
- As notificações do prestador de serviço são armazenadas no MongoDB;
- As notificações do prestador de serviço são enviadas em tempo real utilizando Socket.io;
📅 Agendamento de serviços
- O usuário pode listar todos os prestadores de serviços cadastrado;
- O usuário pode listar os dias de um mês com pelo meos um horário disponível de um prestador de serviço;
- O usuário pode listar os horários disponíveis em um dia específico de um prestador;
- O usuário deve poder realizar um novo agendamento com um prestador;
- Por padrão, cada agendamento possui duração de 1h;
- Os agendamentos estão disponíveis das 8h00 às 18h00 (Primeiro às 8h, último às 17h);
- Os usuário não pode agendar um serviços em uma data ou horário que já passou;
- O usuário não pode agendar serviços consigo mesmo;
- A listagem de prestadores é armazenada em cache para acelerar o carregamento;
Para banco de dados, foi utilizado o Postgres para armazenar os dados que envolvem relacionamentos da regra de negócio da aplicação, MongoDB para armazenar as notificações e Redis para lidar com filas de processamentos em segundo plano.
- Utilização dos Princípios do SOLID;
- Aplicação da metodologia TDD (Test-driven development);
- Utilização do Jest para automatização de testes no ambiente de desenvolvimento;
- Utilização do tsyringe para automatizar a injeção de dependência.
- Utilizado o mailtrap para testar o envio de e-mails em ambiente de testes;
- Para envio de e-mail em produção será utilizado o Amazon SES;
- O envio de e-mail acontece em segundo plano utilizando filas de processamento (background job);
- Upload de imagens com Multer;
- Utilização do MongoDD para armazenar notificações;
- Utilização do Socket.io para envio de notificações em tempo real;
- Utilizado do Ethereal que é um SMTP Fake para testar o envio de e-mails em ambiente de testes;
- Utilizado do Handlebars para template de e-mail em HTML5;
- Utilização do Celebrate para validação de dados;
- Utilização da biblioteca dotEnv para organizar as variaveis de ambiente da API;
- Utilização da biblioteca class-transformer para definir os campos que deverão ser excluídos (como senhas) ou configurados (como link do avatar) nas entidades;
- Utilização do driver ioredis para utilizar o Redis como cache de dados;
- Utilização do node-rate-limiter-flexible para blindar a API contra ataques brute force;
- Utilização da Amazon S3 para upload de imagens;
- Utilização da biblioteca Mime para pegar o MIME extensão do arquivo (Ex: 'application/json', 'image/jpeg');
Rodrigo Gonçalves Santana - 2020