Skip to content

A tool that allows users to make a mass update to the database of product prices in their stores, from a .CSV file sent by the front-end.

Notifications You must be signed in to change notification settings

marcelo-mls/price-update-tool

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

38 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Ferramenta de Atualizar Preços

Descrição:

Em qualquer empresa de e-commerce, é essencial que os usuários possam atualizar os preços de suas lojas para se manterem competitivos e alinhados com os custos de operação. No entanto, quando se trata de lojas com milhares de produtos, é necessário uma ferramenta que permita a atualização massiva dos preços, com recursos adicionais para evitar erros prejudiciais ao negócio.

O objetivo deste desafio é desenvolver essa ferramenta, a qual, seguindo certas regras de negócio, realizará a atualização em massa dos preços dos produtos no banco de dados com base em um arquivo .CSV enviado pelo front-end.

Cenário:

  • O time de Compras fornecerá um arquivo .CSV contendo o código do produto e o novo preço;
  • O time Financeiro exige que o sistema impeça que o preço de venda dos produtos seja inferior ao custo;
  • O time de Marketing solicita que o sistema impeça reajustes maiores ou menores do que 10% do preço atual do produto;
  • Em alguns casos, produtos são vendidos em pacotes que consistem em um ou mais itens em quantidades diferentes. Quando o preço de um pacote é ajustado, é necessário que o mesmo arquivo .CSV contenha os ajustes dos preços dos itens, de forma que a soma dos preços dos itens resulte no preço total do pacote.

Requisitos do Sistema:

  • O sistema deve permitir o carregamento do arquivo de precificação;
  • Botão de Validar para verificar os dados do arquivo;
  • Verificar se todos os campos necessários estão presentes e são valores numéricos válidos;
  • Verificar se os códigos de produtos informados existem;
  • Verificar se o arquivo segue as regras estabelecidas no cenário;
  • O botão de Atualizar só estará habilitado se todos os produtos do arquivo forem validados sem nenhuma violação de regras;
  • Ao clicar em Atualizar , os novos preços devem ser salvos no banco de dados e preparar a tela para o envio de um novo arquivo.

Após a validação, deve-se exibir na tela algumas informações dos produtos enviados. São elas:

Código Nome Preço Atual Novo Preço Validação

No caso de violação de uma ou mais regras de validação, é necessário exibir qual regra foi quebrada ao lado de cada produto.


Desenvolvido com:

O front-end foi desenvolvido com React.js.

No back-end foi utilizado com Node.js com Express, MySQL, e Docker.


Demonstração:

  • Tela inicial

Tela inicial

  • Feedback sobre estrutura do arquivo CSV

Feedback negativo sobre estrutura do arquivo CSV Feedback positivo sobre estrutura do arquivo CSV

  • Feedback sobre a qualidade dos dados do CSV

Feedback sobre a qualidade dos dados do CSV


Como Instalar:

Estas instruções fornecerão a você uma cópia completa do projeto instalado e funcionando em sua máquina local para fins de desenvolvimento.

⚠️ Você deve ter uma instância ativa do MySQL (versão 8) em execução em sua máquina.

Se você usa Docker em sua máquina, aqui está um comando para criar rapidamente um contêiner de MySQL já configurado com de acordo com as variáveis de ambiente de desenvolvimento deste projeto

docker run --name mysql-dev-base -e MYSQL_ROOT_PASSWORD=password -e MYSQL_DATABASE=price_update_tool -p 3306:3306 -d mysql:8

Se você for usar outras variáveis de ambiente, na flag MYSQL_ROOT_PASSWORD informe a senha definida do arquivo .env. Neste EXEMPLO foi utilizada a senha ilustrativa password apenas para fins de desenvolvimento e testes.

  1. Clone o repositório:
git clone git@github.com:marcelo-mls/price-update-tool.git
  1. Entre na pasta do repositório que você acabou de clonar:
cd price-update-tool
  1. Acesse as pastas de frontend e backend, instale as dependências e inicie o projeto:
cd frontend
npm install
npm run dev
cd ..
cd backend
npm install
npm run dev
  1. (opcional) Para rapidamente popular as tabelas com alguns dados, execute o comando abaixo dentro do diretório do backend:
npm run db:seed
  1. Acesse o link abaixo em seu navegador para testar a interface da ferramenta 127.0.0.1:5173/

O servidor irá rodar na porta 3001 e o banco de dados na porta 3306. mas isso pode ser facilmente alterado nas Váriáveis de Ambiente.


Variáveis de Ambiente:

Ao fazer o clone do repositório você vai receber um .env.example, com as informações abaixo. Basta renomear o arquivo para .env.

API_PORT=3001
MYSQL_HOST=localhost
MYSQL_PORT=3306
MYSQL_USER=root
MYSQL_PASSWORD=password
MYSQL_DATABASE=price_update_tool
MYSQL_MULTIPLE_STATEMENTS=true

É importante manter as flags MYSQL_DATABASE e MYSQL_MULTIPLE_STATEMENTS com esses valores se deseja popular o banco através do comando: npm run db:seed


Rotas da API:

Você pode testar a API com softwares como Insomnia, Postman ou Thunder Client

  • POST: '/products'

Este endpoint recebe no corpo da requisição um JSON representando as dados contidos no arquivo .CSV. Com esses dados ela busca por todos os produtos e responde a requisição com as devidas validações para cada produto ou pacote listado no arquivo.

  • PATCH: '/products'

Esta rota é responsável por atualizar no banco de dados apenas o preço dos produtos, de acordo com as informações contidas no corpo da requisição.



Desenvolvido por Marcelo Marques, © 2023.

Teste técnico referente à vaga de Desenvolvedor Full Stack Júnior na Shopper.

Releases

No releases published

Packages

No packages published