Git Product home page Git Product logo

price-update-tool's Introduction

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 [email protected]: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.

price-update-tool's People

Contributors

marcelo-mls avatar

Watchers

 avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.