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;
- Status
- Licença
- Habilidades desenvolvidas
- Habilidades a desenvolver
- Tecnologias utilizadas
- Organização e Estruturação do Projeto
- Pré-requisitos
- Contribuição
- Agradecimentos
- Autor
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.
Este projeto esta sobe a licença MIT.
- 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.
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.
- Node.js
- Express.js
- nodemon
- bcrypt
- body-parser
- dotenv
- eslint-config-trybe-backend
- http-status-codes
- jsonwebtoken
- mongodb
- heroku
- Mongo Atlas
- Amazon S3
- Joi
- joi-objectid
- Multer
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
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;
-
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:- 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;
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.
-
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
- Vá até a página de
// Fonte utilizada na criação do Pré-requisitos
: Trybe
Bora entrar para esta lista? ;)
AQUI
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:
- Jadezita e Rê, pelo carinho e apoio em softs skills;
- Pedro, Nato, Ricci e Rafa Guimarães, pelo belíssimo apoio e ensinamentos em back-end;
- Daniel e Rafa Medeiros, monitores Summer de Instrução, pelo apoio, principalmente na introdução de novos conteúdos.
Wander Diniz Veloso
Estudante de Desenvolvimento WEB e a cada dia mais apaixonado por tecnologia!
Entre em contato!