Skip to content

Projeto criado para colocar em prática os conhecimentos adquiridos em Back-end, onde crio uma API REST para cadastro/leitura de usuários, ingredientes, produtos, componentes e vendas

Notifications You must be signed in to change notification settings

WanderDinizVeloso/coffee-shop-API

Repository files navigation

coffee-shop-API

Projeto criado para colocar em prática os conhecimentos adquiridos em Back-end, onde crio uma API REST para cadastro/leitura de usuários, ingredientes, produtos, componentes e vendas composta de:

  • ✅ Usuários:

    • Criação;
    • Remoção;
    • Atualização;
  • ✅ Login:

    • Login;
  • ✅ Ingredientes:

    • Criação;
    • Remoção;
    • Atualização;
    • Busca por Id;
    • Busca de todos os ingredients cadastrados.
  • ✅ Produtos:

    • Criação;
    • Remoção;
    • Atualização;
    • Busca por Id;
    • Busca de todos os produtos cadastrados.
    • Upload de imagem do produto,
  • ✅ Componentes:

    • Criação;
    • Remoção;
    • Atualização;
    • Busca por Id;
    • Busca de todos os componentes cadastrados.
  • ✅ Vendas:

    • Criação;
    • Busca de todas as vendas realizadas.
  • ✅ Tokens invalidados no exclusão de um usuário:

    • Criação;

Sumário


Status

Este projeto foi construído para um teste no empresa PRO FRANCHISING, mas pretendo continuar sua atualização, visando aprimoramento de suas funcionalidades além de melhorar sua performance e escalabilidade.


Licença

Este projeto esta sobe a licença MIT.


Habilidades desenvolvidas

  • Entender os conceitos básicos de como o JavaScript funciona;
  • Realizar operações assíncronas utilizando async/await;
  • Realizar chamadas de funções de forma consciente;
  • Detectar e solucionar problemas no código de forma mais objetiva;
  • Entender o que é o HTTP, o que é uma API e o que os dois têm a ver com o Express;
  • Escrever APIs utilizando Node e Express;
  • Entender a estrutura de uma aplicação Express e como organizar seu código;
  • Criar rotas e aplicar middlewares;
  • Entender o funcionamento das camadas Model, Service, Controller;
  • Estruturar uma aplicação em camadas;
  • Delegar responsabilidades específicas para cada camada;
  • Delegar responsabilidades específicas para cada parte do seu app;
  • Melhorar manutenibilidade e reusabilidade do seu código;
  • Entender e aplicar os padrões REST;
  • Escrever assinaturas para APIs intuitivas e facilmente entendíveis;
  • Autenticar rotas do Express, usando o token JWT;
  • Gerar tokens a partir de informações como login e senha;
  • Entender como utilizar o bcrypt para criptografar senhas de usuários;
  • Entender e aplicar os conceitos de markdown na criação de um README estruturado;
  • validar campos com o Joi;
  • Realizar o Deploy da aplicação do heroku;
  • Realizar o deploy do banco mongodb no atlas;
  • Hospedar as imagens dos produtos no Amazon S3.

Habilidades a desenvolver

Visando constante aprimoramento, destaco alguns objetivos que eu alinhei comigo mesmo para desempenhar a cada dia melhorar minhas habilidades como desenvolvedor Back-end:

  • Aprender mais sobre o validador Joi, ou outro semelhante, para melhor eficiência e agilidade no desenvolvimento das validações de meus projetos;
  • Estudar e implementar os tests, visando sempre pela qualidade da aplicação;
  • Estudar e implementar o swagger, ou outra ferramenta de documentação.

Tecnologias utilizadas


Organização e Estruturação do Projeto

O projeto está organizado e estruturado da seguinte maneira:

├── .env
├── README.md
├── temp
│    └── images
└── src
      ├── api
      │   ├── app.js
      │   └── server.js
      ├── controllers
      │   ├── documents
      │   │   ├── components
      │   │   │   ├── create.js
      │   │   │   ├── index.js
      │   │   │   ├── remove.js
      │   │   │   ├── searchAll.js
      │   │   │   ├── searchById.js
      │   │   │   └── update.js
      │   │   ├── ingredients
      │   │   │   ├── create.js
      │   │   │   ├── index.js
      │   │   │   ├── remove.js
      │   │   │   ├── searchAll.js
      │   │   │   ├── searchById.js
      │   │   │   └── update.js
      │   │   ├── login
      │   │   │   ├── index.js
      │   │   │   └── login.js
      │   │   ├── products
      │   │   │   ├── create.js
      │   │   │   ├── index.js
      │   │   │   ├── remove.js
      │   │   │   ├── searchAll.js
      │   │   │   ├── searchById.js
      │   │   │   ├── update.js
      │   │   │   └── upload.js
      │   │   ├── sales
      │   │   │   ├── create.js
      │   │   │   ├── index.js
      │   │   │   └── searchAll.js
      │   │   └── users
      │   │       ├── create.js
      │   │       ├── index.js
      │   │       ├── remove.js
      │   │       └── update.js
      │   ├── middlewares
      │   │   ├── auth
      │   │   │   ├── admAuthorization.js
      │   │   │   ├── authentication.js
      │   │   │   └── userAuthorization.js
      │   │   ├── error
      │   │   │   └── index.js
      │   │   ├── index.js
      │   │   ├── upload
      │   │   │   └── index.js
      │   │   ├── validations
      │   │   │   ├── validateComponents.js
      │   │   │   ├── validateId.js
      │   │   │   ├── validateIngredients.js
      │   │   │   ├── validateLogin.js
      │   │   │   ├── validateProducts.js
      │   │   │   ├── validateSales.js
      │   │   │   └── validateUsers.js
      │   │   └── wrapper
      │   │       └── index.js
      │   ├── routers
      │   │   ├── components.js
      │   │   ├── ingredients.js
      │   │   ├── login.js
      │   │   ├── products.js
      │   │   ├── root.js
      │   │   ├── sales.js
      │   │   └── users.js
      │   └── statusAndMessage
      │       └── index.js
      ├── models
      │   ├── connection.js
      │   ├── documents
      │   │   ├── create.js
      │   │   ├── remove.js
      │   │   ├── searchAll.js
      │   │   ├── searchByField.js
      │   │   ├── searchById.js
      │   │   └── update.js
      │   └── index.js
      ├── services
      │   ├── auth
      │   │   ├── getToken.js
      │   │   ├── index.js
      │   │   └── verifyToken.js
      │   ├── documents
      │   │   ├── components
      │   │   │   ├── create.js
      │   │   │   ├── index.js
      │   │   │   ├── remove.js
      │   │   │   ├── searchAll.js
      │   │   │   ├── searchById.js
      │   │   │   └── update.js
      │   │   ├── ingredients
      │   │   │   ├── create.js
      │   │   │   ├── index.js
      │   │   │   ├── remove.js
      │   │   │   ├── searchAll.js
      │   │   │   ├── searchById.js
      │   │   │   └── update.js
      │   │   ├── login
      │   │   │   ├── index.js
      │   │   │   └── login.js
      │   │   ├── products
      │   │   │   ├── create.js
      │   │   │   ├── index.js
      │   │   │   ├── remove.js
      │   │   │   ├── searchAll.js
      │   │   │   ├── searchById.js
      │   │   │   ├── update.js
      │   │   │   └── upload.js
      │   │   ├── sales
      │   │   │   ├── create.js
      │   │   │   ├── index.js
      │   │   │   └── searchAll.js
      │   │   └── users
      │   │       ├── create.js
      │   │       ├── index.js
      │   │       ├── remove.js
      │   │       └── update.js
      │   └── functions
      │       ├── changePermissions.js
      │       ├── checkMasterPermissions.js
      │       ├── checkNewEmailOnDatabase.js
      │       ├── checkNewNameOnDatabase.js
      │       ├── filterNull.js
      │       ├── generateIngredientNameList.js
      │       ├── generateProductCost.js
      │       ├── generateUrl.js
      │       ├── index.js
      │       ├── renameImageName.js
      │       ├── setDecimalPlaces.js
      │       ├── stockUpdate.js
      │       └── stringInNumber.js
      └── utils
         ├── lists.js
         ├── magicNumbers.js
         ├── strings.js
         └── validationsSchema.js

Pré-requisitos

Ferramentas necessárias

Para rodar o projeto, você vai precisar instalar as seguintes ferramentas:

  • Git;
  • Node.js;
  • Um editor para trabalhar com o código como VSCode ou outro de sua preferência;
  • Um cliente de API REST como Postman, Insomnia ou outro de sua preferência;

Rodando no servidor local

  • Clone do Projeto e instale as dependências

    # Clone este repositório
     # via HTTPS
    $ git clone https://github.com/WanderDinizVeloso/coffee-shop-API.git
      # via SSH
    $ git clone git@github.com:WanderDinizVeloso/coffee-shop-API.git
    
    # Acesse a pasta do projeto no terminal/cmd
    $ cd coffee-shop-API
    
    # Instale as dependências
    $ npm install
  • Crie um arquivo chamado .env na raiz do projeto com as seguintes configurações:

    .env

    • PORT: Porta que rodará localmente o projeto (ex. 3000);
    • DB_NAME: nome desejado para seu banco local
    • URL: URL do banco MongoDB (ex. mongodb://localhost:27017)
    • SECRET: Segredo utilizado na autenticação.
    • EXPIRES_IN: tempo de duração dos tokens gerados. (ex. 1d)
    • ALGORITHM: algoritmo de criptografia do token. (ex. HS256)
    • BCRYPT_SALT_ROUNDS: utilizado para proteção do password. (ex. 8)
    • MASTER_EMAIL: email que terá poderes para troca do 'role' do usuário
    • MASTER_PASSWORD: password que terá poderes para troca do 'role' do usuário

⚠️ ATENÇÃO ⚠️

  • Para mais detalhes sobre SECRET, EXPIRES_IN e ALGORITHM vide: jsonwebtoken
  • Inicie o sistema:

    # Inicie o sistema
    $ npm start
    ou
    $ npm run dev # para ambiente de desenvolvimento
  • Faça as requisições pelo Postman, Insomnia ou outro de sua preferência;

Rodando no heroku (para a API), no Atlas (para o banco) e no Amazon s3 (para upload das imagens)

Não quer rodar localmente? Você pode acessar o projeto hospedado no heroku!:)

O deploy da API foi hospedada no heroku e o banco mongoDB hospedado no Atlas.

Quer contribuir com o projeto?

  • Crie uma branch e faça sua contribuição:

    # Crie uma branch a partir da branch main
    $ git checkout -b nome-da-nova-branch
    
    # Adicione as mudanças desejadas com os devidos commits
    $ git add . # adiciona as mudanças ao stage do Git
    $ git commit -m 'informação do conteúdo do commit' # salvando as alterações de cada pequena alteração em um commit
    $ git push -u origin nome-da-nova-branch # adiciona a nova branch no repositório remoto do Projeto
  • Crie um novo Pull Request (PR):

    • Vá até a página de Pull Requests do repositório no GitHub
    • Clique no botão verde "New pull request"
    • Clique na caixa de seleção "Compare" e escolha a sua branch com atenção
    • Clique no botão verde "Create pull request"
    • Adicione uma descrição para o Pull Request
    • Clique no botão verde "Create pull request"
    • Me marque para revisar. :) Wander

// Fonte utilizada na criação do Pré-requisitos: Trybe


Contribuição

Bora entrar para esta lista? ;) AQUI


Agradecimentos

Agradeço:

  • À minha família por me apoiar nos estudos em minha transição de carreira;
  • À Trybe por me dar a oportunidade de aprender uma nova carreira, com seu Curso de Desenvolvimento WEB Full-Stack, na modalidade MSC.
  • Toda a equipe Trybe, em especial:

Autor

minha foto


Wander Diniz Veloso
Estudante de Desenvolvimento WEB e a cada dia mais apaixonado por tecnologia!

Entre em contato!


About

Projeto criado para colocar em prática os conhecimentos adquiridos em Back-end, onde crio uma API REST para cadastro/leitura de usuários, ingredientes, produtos, componentes e vendas

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published