Giter VIP home page Giter VIP logo

gobarber-api-gostack11's Introduction



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

gobarber-api-gostack11's People

Contributors

tgmarinho avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.