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
- Web Aplication: AplicaĆ§Ć£o Web contruida em ReactJs
- Mobile Aplication: AplicaĆ§Ć£o Mobile construida em React Native.
- TypeScript: Linguagem.
- NodeJs: Ambiente de ExecuĆ§Ć£o.
- Express: API Framework
- JsonWebToken: AutenticaĆ§Ć£o JWT
- Multer: Upload de Arquivos
- Postgres: Banco de Dados
- TypeORM: ORM
- Eslint: PadronizaĆ§Ć£o de cĆ³digo
- Jest: Testes
- tsyringe: Lib de injeĆ§Ć£o de dependencias. -uuidv4: uuid.
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.
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
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;
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;
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.
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;
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;
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;
Desafio realizado por Thiago Marinho de Oliveira.
- 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