Skip to content

Projeto em Ruby on Rails para a realização de leilões de itens armazenados em galpões. Oferece controle completo aos usuários, incluindo cadastro e gestão de produtos, lotes e a possibilidade de realizar lances em tempo real.

Notifications You must be signed in to change notification settings

felipel7/ruby-stock_auction

Repository files navigation

Leilão do Galpão


Tecnologias   |    Funcionalidades Principais   |    Arquitetura do Projeto



Resumo

Este projeto consiste no desenvolvimento de uma aplicação web utilizando Ruby on Rails, com o objetivo de criar um sistema de leilão para comercializar itens abandonados em galpões. A aplicação terá dois perfis de usuário: administradores, responsáveis pelo cadastro e gestão dos leilões, e visitantes, que poderão criar contas, buscar produtos, ver detalhes e fazer ofertas. O projeto conta com uma lista de tarefas a serem implementadas, com algumas funcionalidades adicionais consideradas bônus.



🚀 Tecnologias

HTML5 logo
HTML
CSS3 logo
CSS
Ruby logo
Ruby
Rails logo
Rails
Devise logo
Devise
Rspec logo
Rspec
Capybara logo
Capybara
SQLite logo
SQLite


📋 Funcionalidades Principais

Cadastro de usuários

A aplicação possui dois tipos de usuários: regulares e administradores. Os usuários regulares podem se cadastrar utilizando qualquer endereço de e-mail, enquanto os administradores devem se cadastrar com um e-mail do domínio "leilaodogalpao.com.br". Além do e-mail, todos os usuários devem fornecer um CPF único e válido para realizar o cadastro.



Tela de login: criar conta
Tela de cadastro: criar conta


Dashboard para Admin

O administrador possui um painel com várias opções, permitindo-lhe gerenciar produtos, categorias, usuários e lotes.


Tela do admin:

dashboard

Tela gerenciar produtos: produtos
Tela gerenciar usuários: usuários
Tela gerenciar lotes: lotes
Tela gerenciar categorias: categorias


Status dos Lotes

Os lotes possuem diferentes status que determinam suas permissões e ações disponíveis:

  • Pendente: Este é o status padrão para um lote recém-criado. Enquanto estiver pendente, é possível editá-lo e gerenciá-lo. A opção "Editar" permite alterar as configurações do lote, como a data de início e fim. Na opção "Gerenciar", é possível adicionar ou remover um produto. Também é possível aprovar um lote caso já tenha produtos associados a ele.

  • Aprovado: Quando um administrador diferente do que cadastrou o lote o aprova, ele passa para o status "Aprovado". Nesse estágio, o lote está aberto para receber lances, desde que esteja dentro do período permitido para tal.

  • Encerrado: Um lote é encerrado quando sua data final é anterior à data atual. Após o encerramento, o lote pode ter dois status adicionais:

    • Validado: Caso existam lances registrados no lote, ele será marcado como "Validado". Isso indica que o lote foi concluído com sucesso e os lances foram aceitos.

    • Cancelado: Caso nenhum lance tenha sido registrado no lote, ele será marcado como "Cancelado". Isso indica que o lote foi encerrado sem nenhum lance registrado.



Lances

Na aplicação, os usuários têm a opção de realizar lances em lotes específicos. No entanto, existem algumas restrições e informações relevantes relacionadas aos lances:

  • Um usuário só pode fazer um lance se ele não for inferior ao valor mínimo estabelecido para aquele lote.

  • Um usuário não pode fazer um lance se o último lance registrado for dele mesmo. Isso evita que um usuário aumente o valor do seu próprio lance ou que ele de lances duplicados sem querer.

  • O usuário pode visualizar todas os lances que deu na tela de lances. Essa tela apresenta duas informações principais:

    • Todos os lances que o usuário está ganhando, ou seja, será mostrado todos os lotes que o usuário está vencendo/venceu, independentemente se o lote esteja encerrado ou não.
    • Todos os lances dados pelo usuário, incluindo lances em lotes que ele ganhou e lotes em que foi superado por outros lances.

Imagem da tela de dar lances:

lances


Imagem da tela de histórico de lances: histórico de lances


🛠️ Esquema do Banco de Dados

Tabelas:

erDiagram
    %% --------------------------------------------------------
    %% Generated by "Rails Mermaid ERD"
    %% https://github.com/koedame/rails-mermaid_erd
    %% Restore Hash: #eyJzZWxlY3RNb2RlbHMiOlsiQmlkIiwiQ2F0ZWdvcnkiLCJGYXZvcml0ZSIsIkxvdCIsIlByb2R1Y3QiLCJVc2VyIiwiQmxvY2tlZENwZiJdLCJpc1ByZXZpZXdSZWxhdGlvbnMiOmZhbHNlLCJpc1Nob3dSZWxhdGlvbkNvbW1lbnQiOmZhbHNlLCJpc1Nob3dLZXkiOnRydWUsImlzU2hvd0NvbW1lbnQiOnRydWUsImlzSGlkZUNvbHVtbnMiOmZhbHNlfQ==
    %% --------------------------------------------------------

    %% table name: bids
    Bid {
        integer id PK ""
        integer user_id FK ""
        integer lot_id FK ""
        integer amount  ""
        datetime created_at  ""
        datetime updated_at  ""
    }

    %% table name: blocked_cpfs
    BlockedCpf {
        integer id PK ""
        string cpf  ""
        datetime created_at  ""
        datetime updated_at  ""
    }

    %% table name: categories
    Category {
        integer id PK ""
        string name  ""
        datetime created_at  ""
        datetime updated_at  ""
    }

    %% table name: favorites
    Favorite {
        integer id PK ""
        integer user_id FK ""
        integer lot_id FK ""
        datetime created_at  ""
        datetime updated_at  ""
    }

    %% table name: lots
    Lot {
        integer id PK ""
        string batch_code  ""
        datetime start_date  ""
        datetime end_date  ""
        integer status  ""
        integer min_value  ""
        integer min_allowed_difference  ""
        datetime created_at  ""
        datetime updated_at  ""
        integer register_by_id FK ""
        integer approved_by_id FK ""
    }

    %% table name: products
    Product {
        integer id PK ""
        string name  ""
        text description  ""
        integer weight  ""
        integer width  ""
        integer height  ""
        integer depth  ""
        string sku  ""
        integer category_id FK ""
        datetime created_at  ""
        datetime updated_at  ""
        integer lot_id FK ""
    }

    %% table name: users
    User {
        integer id PK ""
        string email  ""
        string encrypted_password  ""
        string reset_password_token  ""
        datetime reset_password_sent_at  ""
        datetime remember_created_at  ""
        string cpf  ""
        integer role  ""
        datetime created_at  ""
        datetime updated_at  ""
    }

    Bid }o--|| User : ""
    Bid }o--|| Lot : ""
    Category |o--o{ Product : ""
    Favorite }o--|| User : ""
    Favorite }o--|| Lot : ""
    Lot |o--o{ Product : ""
    Lot }o--|| User : ""
    Lot }o--o| User : ""
Loading


☕ Instruções para executar o projeto

  1. Clonar o projeto:
git clone https://github.com/felipel7/ruby-treinadev-stock_auction.git
  1. Instalar as dependências do projeto:
# Na pasta raiz, digite o comando:
bundle install

yarn install
  1. Configurar o banco de dados:
rails db:migrate

rails db:seed
  1. Executar o servidor Rails:
bin/dev

Abra o navegador e digite http://localhost:3000


Usuários:

E-mail usuários:

E-mail Tipo de Usuário Senha
[email protected] Usuário comum 123123
[email protected] Usuário comum 123123
[email protected] Administrador 123123
[email protected] Administrador 123123

Feito com carinho ♡ por Felipe Silva :) Linkedin

⬆ Voltar ao topo


About

Projeto em Ruby on Rails para a realização de leilões de itens armazenados em galpões. Oferece controle completo aos usuários, incluindo cadastro e gestão de produtos, lotes e a possibilidade de realizar lances em tempo real.

Topics

Resources

Stars

Watchers

Forks