Tecnologias | Funcionalidades Principais | Arquitetura do Projeto
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.
HTML |
CSS |
Ruby |
Rails |
Devise |
Rspec |
Capybara |
SQLite |
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.
O administrador possui um painel com várias opções, permitindo-lhe gerenciar produtos, categorias, usuários e lotes.
Tela do admin:
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.
-
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:
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 : ""
- Clonar o projeto:
git clone https://github.com/felipel7/ruby-treinadev-stock_auction.git
- Instalar as dependências do projeto:
# Na pasta raiz, digite o comando:
bundle install
yarn install
- Configurar o banco de dados:
rails db:migrate
rails db:seed
- Executar o servidor Rails:
bin/dev
Abra o navegador e digite http://localhost:3000
Usuários:
E-mail usuários:
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