Skip to content

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.

License

Notifications You must be signed in to change notification settings

danielbped/online-store-api

Repository files navigation

Online Store

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.

Shopify

A API em questão utilizou a API da Shopify como provedora da listagem de produtos e seus devidos detalhes.

Sumário

Licença

Este projeto está sob licença do MIT

Tecnologias Utilizadas

  • 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.

Instruções para rodar o projeto

Será necessário ter instalado na sua máquina:

  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

.env

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.

Iniciando o projeto

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

Rotas e autenticação

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.

Banco de dados

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.

Testes

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.

Futuras Melhorias

Algumas melhorias que pretendo realizar futuramente são:

  • 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.

About

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.

Topics

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published