Trata-se da API de uma simulação de uma loja virtual, onde é possível cadastrar novos usuários, realizar login, adicionar e remover produtoas aos favoritos e visualizar produtos.
A API em questão utilizou a API da Shopify como provedora da listagem de produtos e seus devidos detalhes.
- Licença
- Tecnologias utilizadas
- Instruções para rodar o projeto
- Rotas e autenticação
- Banco de dados
- Testes
- Futuras melhorias
Este projeto está sob licença do MIT
- Node.js: Plataforma de desenvolvimento para construção do ambiente de servidor.
- Express: Framework web para Node.js utilizado na construção da API.
- TypeScript: Linguagem de programação que adiciona tipagem estática ao JavaScript, proporcionando maior robustez ao código.
- TypeORM: ORM (Object-Relational Mapping) para TypeScript e JavaScript que simplifica o acesso e manipulação de banco de dados relacionais.
- PostgreSQL: Sistema de gerenciamento de banco de dados relacional utilizado para armazenar os dados da aplicação.
- Axios: Cliente HTTP baseado em Promises para fazer requisições HTTP tanto do navegador quanto do Node.js.
- Bcrypt: Biblioteca para hashing de senhas utilizada para armazenar senhas de forma segura.
- Jsonwebtoken: Implementação de JSON Web Tokens (JWT) para autenticação de usuários.
- Dotenv: Módulo que carrega variáveis de ambiente a partir de um arquivo .env para o processo do Node.js.
- Cors: Middleware para Express que habilita o controle de acesso HTTP (CORS).
- Http: Status Codes: Pacote que fornece uma lista de constantes para códigos de status HTTP.
- Jest: Framework de teste em JavaScript com foco na simplicidade.
- Supertest: Biblioteca utilizada para testar APIs HTTP.
- Uuidv4: Pacote para geração de UUIDs (identificadores únicos universais) versão 4.
- Docker: Uma ferramenta para definir e executar aplicações multi-contêineres. É a chave para desbloquear uma experiência de desenvolvimento e implantação simplificada e eficiente.
- Swagger: Ferramente utilizada para criar documentações exemplificando a utilização das rotas, de uma forma prática.
Git
Node v20.11.1
Docker
- Clone o repositório com o comando git clone:
git clone git@github.com:danielbped/online-store-api.git
- Entre no diretório que acabou de ser criado:
cd online-store-api
- Para o projeto funcionar na sua máquia, será necessário instalar suas dependências, para isso, utilize npm install:
npm install
Outro passo importante é instanciarmos o banco de dados. Para isso, foi criado um arquivo docker-compose para gerar uma banco de dados local, o banco de dados utilizado é com a linguagem de consulta PostgreSQL. Então, para instanciar o banco de dados, basta rodar o comando abaixo no terminal:
docker-compose up -d
Na raiz do projeto, será necessário criar um arquivo .env, com as seguintes informações:
POSTGRES_USER=
POSTGRES_PASSWORD=
POSTGRES_DB=
HOST_DB=
PORT=
SECRET_KEY_JWT=
STORE_API_KEY=
STORE_API_PASSWORD=
STORE_NAME=
Um arquivo com estas definições já está presente no projeto, o .env.example, para que funcione corretamente, basta renomear para apenas .env, e alterar os dados STORE_API_KEY, STORE_API_PASSWORD e STORE_NAME de acordo com a loja vinculada ao Shopify. Em relação às outras variáveis, podem ser usadas as credenciais presentes no arquivo, são responsáveis pela criação do banco de dados.
Para rodar o projeto na sua máquina, basta utilizar o comando a seguir:
npm start
Caso tudo esteja de acordo, você verá as seguintes mensagens no terminal:
Server running on port 3000
Database connected successfully
Para visualizar as rotas disponíveis, também como seus respectivos conteúdos de body e parametros, basta navegar para a rota http://localhost:3000/docs, onde está disponibilizada uma documentação exclusiva das rotas, desenvolvida utilizando Swagger. Vale a pena ressaltar que algumas rotas precisarão do token recebido ao realizar o login, então basta utilizar Bearer token-recebido no parametro Authorization dos headers da api para poder utilizar as rotas livremente.
O banco de dados foi desenvolvido utilizando PostgreSQL com o auxílio da ORM TypeORM nos migrations e nas queries. A arquitetura do banco possui duas tabelas (User e Favorite), e suas colunas podem ser observadas a seguir:
User
id string
email string
firstName string
lastName string
password string
createdAt Date
updatedAt Date
Favorite
id string
title string
itemId string
price string
images string[]
createdAt Date
updatedAt Date
userId string
Para a geração de ids únicos e aleatórios, foi utilizada a biblioteca Uuidv4 para que seja possível obter um dado mais robusto e de difícil repetição.
A aplicação possui alguns testes, porém alguns pararam de funcionar após alterações durante o desenvolvimento. A finalização dos testes fica para futuras melhorias no código.
- Rotas para atualizar, apagar e buscar todos os usários;
- Gerenciamento de função dos usuários, diferenciar permissões de admin, clientes, etc;
- Finalização dos testes, tanto os que pararam de funcionar, quanto o restante das rotas e funções;
- Adicionar mais algumas validações de login, cadastros, também como melhorias ao lidar com os erros, adicionando novos casos de erro;
- Alterar a origem do provider de produtos, facilitando a utilização da aplicação para outros fins de demonstração, sem necessitar de credenciais específicas;
- Encontrar alguma forma de simplificar a documentação ao utilizar o swagger;
- Unificar toda a aplicação no mesmo docker-compose para facilitar a utilização da aplicação em qualquer tipo de ambiente.