/gobarber-api-gostack11

API GoBarber / NodeJS / Express / Typescript / SOLID

Primary LanguageTypeScript



GoBarber - Web Aplication


licenceMIT


šŸ’¬ Sobre

API GoBarber, aplicaĆ§Ć£o que conecta prestadores de serviƧo (Barbeiros e Cabeleireiros) aos clientes em suas regiƵes. AplicaĆ§Ć£o montada durante o bootcamp GoStack aplicando todo o conhecimento adquirido durante a jornada. Neste projeto foi utilizada as melhores prĆ”ticas na construĆ§Ć£o do projeto, com o uso das tecnologias TypeScript, Express, TypeORM em cima do Ambiente e execuĆ§Ć£o de javascript, o NodeJS.

Faz parte do projeto GoBarber

šŸš€ Tecnologias

āš ļø Durante o desenvolvimento irei atualizando a lista de tecnologia

šŸ”– Layout

Uma API Rest, que retorna o conteĆŗdo em JSON que vai ser consumida tanto por um Front-end em ReactJS quanto por uma aplicaĆ§Ć£o Mobile Hibrido com React Native.

Base da AplicaĆ§Ć£o.

Requisitos funcionais:
  [] 100% de cobertura de testes nos services da aplicaĆ§Ć£o.
  [] Tratamento de exceƧƵes global

Requisitos NĆ£o Funcionais:
  - Framework da API - Express
  - Linguagem de ProgramaĆ§Ć£o - TypeScript
  - Banco de dados utilizado na aplicaĆ§Ć£o - Postgres
  - ORM - TypeORM
  - Lib de testes - Jest
  - Utilizar Mailtrap para testar envios de email em ambiente de desenvolvimento
  - Utilizar Amazon SES para envios de email em ambiente de ProduĆ§Ć£o.
  - Utilizar Eslint, Prettier e EditorConfig para padronizar o cĆ³digo em ambiente de desenvolvimento, com a style guide do AirBnb

CriaĆ§Ć£o de usuĆ”rio

Requisitos Funcionais:
  [x] CriaĆ§Ć£o de conta com (Nome, Email, Senha);
  [] Envio de email confirmando criaĆ§Ć£o de conta;

Requisitos NĆ£o Funcionais:
  - Envio de email utilizando lib Nodemailer;

Regras de NegĆ³cio:
  [] NĆ£o pode ser criado duas contas com o mesmo email;
  [] O usuƔrio deve confirmar a senha ao criar uma conta.
  [] A senha deve ser Hasheada antes de ser gravada no banco de dados;

AutenticaĆ§Ć£o

Requisitos Funcionais:
  [] O usuƔrio deve poder se Autenticar utilizando email e senha;

Requisitos NĆ£o Funcionais:
  - A autenticaĆ§Ć£o deve ser feita com Json Web Token (JWT);

Regras de NegĆ³cio:
  [x] No payload do token deve ser armazenado o ID do usuƔrio;

RecuperaĆ§Ć£o de Senha

Requisitos Funcionais:
  [x] O usuƔrio deve poder recuperar sua senha informando o seu email;
  [x] O usuĆ”rio de receber um email com instruƧƵes de recuperaĆ§Ć£o de senha;
  [x] O usuƔrio deve poder resetar sua senha ;

Requisitos NĆ£o Funcionais:
  - Envio de email utilizando lib Nodemailer;
  - O envio de email deve acontecer em segundo plano (background job);


Regras de NegĆ³cio:
  [x] O link enviado por email para resetar a senha, deve expirar em 2h;
  [x] O usuƔrio precisa confirmar a nova senha ao resetar sua senha.

AtualizaĆ§Ć£o de Perfil

Requisitos Funcionais:
  [] O usuƔrio deve poder atualizar seu perfil (nome, email, senha, Avatar);

Regras de NegĆ³cio:
  [x] O usuĆ”rio nĆ£o pode alterar seu email para um email ja em uso na aplicaĆ§Ć£o
  [x] Para atulizar sua senha, o usuƔrio deve informar a senha antiga;
  [x] Para atulizar sua senha, o usuƔrio precisa confirmar a senha;

Painel de usuƔrio (Prestador de serviƧo)

Requisitos Funcionais:
  [] O prestador deve poder listar os seus agendamentos de um dia especifico;
  [] O prestador deve poder receber uma notificaĆ§Ć£o sempre que houver um novo agendamento;
  [] O prestador deve poder visualizar as notificaƧƵes nĆ£o lidas;


Requisitos NĆ£o Funcionais:
  - Os agendamentos devem ser armazenados em cache.
  - As notificaƧƵes do prestador devem ser armazenadas no MongoDB;
  - As notificaƧƵes do prestador devem ser enviadas em tempo-real utilizando Socket.io;

Regras de NegĆ³cio:
  [] A notificaĆ§Ć£o deve ter um status de lida ou nĆ£o-lida para que o prestador possa controlar;

Agendamento de serviƧo

Requisitos Funcionais:
  [] O usuƔrio deve poder listar todos os prestadores de serviƧo cadastrados;
  [] O usuĆ”rio deve poder visualizar os dias de um mĆŖs com pelo menos um horĆ”rio disponĆ­vel de um prestador;
  [] O usuƔrio deve poder visualizar os horƔrios disponƭveis de um dia especifico de um prestador;
  [] O usuƔrio deve poder realizar um novo agendamento com um prestador;
  [] O usuƔrio deve poder listar os agendamentos jƔ marcados;
  [] O usuƔrio deve poder cancelar um agendamento marcado.

Requisitos NĆ£o Funcionais:
  - A listagem de prestadores devem ser armazenadas em cache.

Regras de NegĆ³cio:
  [] Cada agendamento deve durar 1h exatamente;
  [] Os agendamentos devem estar disponĆ­veis entre 8h Ć s 18h sendo o Ćŗltimo agendamento iniciado as 17h;
  [] O usuĆ”rio nĆ£o pode agendar em um horĆ”rio jĆ” ocupado;
  [] O usuĆ”rio nĆ£o pode agendar em um horĆ”rio que jĆ” passou;
  [] O usuĆ”rio nĆ£o pode agendar consigo mesmo;

šŸ“– Thiago Marinho

Desafio realizado por Thiago Marinho de Oliveira.

tips/scripts

criar migrations:

  • Tem um script no package para auxiliar nisso, uma vez que estamos usando ts.

Terminal: yarn typeorm migration:create -n CreateAppointments

  • Execugtar migration: yarn typeorm migration:run
  • Rollback desfazer : yarn typeorm migration:revert

Ver quais migrations jĆ” foram executadas:

yarn typeorm migration:show