Esse projeto fez parte de um teste no processo seletivo da Shopper.com.br!
Sua especificação está em PDF na raíz do diretório.
Foi desenvolvido em React.js e Node.js, para executá-lo você deve ter o Node.js instalado na sua máquina (junto do npm). Após isso, você deve instalar o npm nas pastas client e server e também as seguintes dependências:
-
body-parser
-
compression
-
cors
-
csv-parser
-
dotenv
-
express
-
multer
-
mysql2
-
sequelize
Você deve rodar o client e server ("npm start").
Além disso, é necessário um dotenv na raiz da pasta server, em que é definido as seguintes variáveis de ambiente para a conexão com o Banco de Dados local:
DATABASE_SCHEMA=
DATABASE_USERNAME=
DATABASE_PASSWORD=
DATABASE_HOST=
A fim de realizar testes, enriqueça seu Banco de Dados MySQL com a seguinte query:
CREATE TABLE products
(
code bigint PRIMARY KEY, # CODIGO DO PRODUTO
name varchar(100) NOT NULL, # NOME DO PRODUTO
cost_price decimal(9,2) NOT NULL, # CUSTO DO PRODUTO
sales_price decimal(9,2) NOT NULL # PREÇO DE VENDA DO PRODUTO
);
INSERT INTO products VALUES (16,'AZEITE PORTUGUÊS EXTRA VIRGEM GALLO 500ML',18.44,20.49);
INSERT INTO products VALUES (18,'BEBIDA ENERGÉTICA VIBE 2L',8.09,8.99);
INSERT INTO products VALUES (19,'ENERGÉTICO RED BULL ENERGY DRINK 250ML',6.56,7.29);
INSERT INTO products VALUES (20,'ENERGÉTICO RED BULL ENERGY DRINK 355ML',9.71,10.79);
INSERT INTO products VALUES (21,'BEBIDA ENERGÉTICA RED BULL RED EDITION 250ML',10.71,11.71);
INSERT INTO products VALUES (22,'ENERGÉTICO RED BULL ENERGY DRINK SEM AÇÚCAR 250ML',6.74,7.49);
INSERT INTO products VALUES (23,'ÁGUA MINERAL BONAFONT SEM GÁS 1,5L',2.15,2.39);
INSERT INTO products VALUES (24,'FILME DE PVC WYDA 28CMX15M',3.59,3.99);
INSERT INTO products VALUES (26,'ROLO DE PAPEL ALUMÍNIO WYDA 30CMX7,5M',5.21,5.79);
INSERT INTO products VALUES (1000,'BEBIDA ENERGÉTICA VIBE 2L - 6 UNIDADES',48.54,53.94);
INSERT INTO products VALUES (1010,'KIT ROLO DE ALUMINIO + FILME PVC WYDA',8.80,9.78);
INSERT INTO products VALUES (1020,'SUPER PACK RED BULL VARIADOS - 6 UNIDADES',51.81,57.00);
CREATE TABLE packs
(
id bigint AUTO_INCREMENT PRIMARY KEY, # id primario da tabela
pack_id bigint NOT NULL, # id do produto pack
product_id bigint NOT NULL, # id do produto componente
qty bigint NOT NULL, # quantidade do produto componente no pack
CONSTRAINT FOREIGN KEY (pack_id) REFERENCES products(code),
CONSTRAINT FOREIGN KEY (product_id) REFERENCES products(code)
);
INSERT INTO packs (pack_id,product_id, qty) VALUES (1000,18,6);
INSERT INTO packs (pack_id,product_id, qty) VALUES (1010,24,1);
INSERT INTO packs (pack_id,product_id, qty) VALUES (1010,26,1);
INSERT INTO packs (pack_id,product_id, qty) VALUES (1020,19,3);
INSERT INTO packs (pack_id,product_id, qty) VALUES (1020,21,3);
A aplicação WEB tem a seguinte aparência:
Você pode enviar o CSV pelo input e pedir para validar os dados, caso os dados estejam no formato correto e atendam todas as regras de cenário o botão de atualizar aparecerá junto com uma tabela. Caso contrário, aparecerá quais regras foram infringidas por quais linhas do CSV.