Esse é um projeto simples em Rails no qual podemos cadastrar lojas, produtos e pedidos. Para mais detalhes do que cada tabela possui, você pode acessar o schema no arquivo: db/schema.rb
. Nesse projeto, utilizamos o PostgreSQL como banco de dados.
Além do rails, estamos utilizando mais duas gems:
- rspec-rails: biblioteca usada para fazer testes
- tailwindcss-rails: biblioteca para CSS
O projeto usa docker para facilitar o desenvolvimento e configuração. Dependendo de como você instalou, vai ser necessário usar o sudo
.
Primeiramente, para configurar o projeto, você vai seguir os seguintes passos:
- Execute o docker compose:
docker-compose up
- Criar os bancos de dados de teste e desenvolvimento. Em outra aba do terminal, execute:
docker exec desafio-ink-web ./bin/setup
- Agora, para deixar o CSS ativo, execute:
docker exec -it desafio-ink-web bin/rails tailwindcss:watch
OBS: esse terminal deve continuar aberto para que suas mudanças no CSS sejam percebidas pela aplicação.
Após executar, você pode acessar as rotas:
http://localhost:3000/
http://localhost:3000/stores
http://localhost:3000/products
http://localhost:3000/orders
Para rodar os testes automatizado, basta executar:
docker exec -t desafio-ink-web bundle exec rspec
O objetivo é que você resolva os seguintes desafios.
-
Criar uma página que consiga listar todos os produtos de uma loja e diga quantas vendas cada produto possui.
-
Criar uma página que consiga listar todos os pedidos de uma loja.
-
Decrementar o estoque a cada venda que um produto tiver e não deixar o estoque ficar negativo, não permitindo uma venda nesse caso.
-
Criar um ranking das top-10 lojas que tiveram o maior faturamento.
- O faturamento de uma loja é o somatório do valores de todos os pedidos de uma loja.
- O valor de um pedido é dado pela soma do valor do frete(shipping) + o valor do produto (price)
-
Todas as novas implementações precisam ter testes automatizados
-
(opcional) Fazer as melhorias que achar necessário no projeto.
-
Escrever um documento explicando sua ideia.
-
Explicar como seria a implementação de um carrinho de compra nesse projeto (não precisa implementar essa parte, queremos saber apenas a ideia).
- As modificações no frontend devem seguir o Tailwind CSS. Para facilitar, você pode usar muita coisa pronta do Flowbite, ele já está configurado no projeto. (Lembrar de deixar de fazer o passo 3 do "Configurando o Projeto")
- Você pode mudar o que quiser na aplicação e no banco de dados.
- Você pode instalar novas gems se achar necessário.
- Se a solução resolve os problemas
- Organização do código e legibilidade
- Conhecimento em banco de dados e SQL
- Conhecimento em testes automatizados
- Preocupação com segurança (para simplificar, não precisa adicionar autenticação nesse projeto)
- Preocupação com performance e escalabilidade