O objetivo do presente projeto é desenvolver uma aplicação de cashback onde os usuários receberão um determinado valor conforme o valor fixado por um ingresso.
O que o visitante pode fazer?
- O visitante pode acessar a página principal e visualizar os ingressos ali disponíveis.
O que o usuário pode fazer?
- O usuário poderá acessar os detalhes dos ingressos anunciados;
- O usuário poderá comprar um ingresso indicando a quantidade que deseja adquirir;
- O usuário poderá acessar o dashboard para conferir o valor total de seu pedido;
- O usuário poderá acessar o dashboard para conferir o total e cashback que receberá pela compra.
O que o administrador pode fazer?
- O administrador poderá visualizar informações gerais de compras, quantidade de ingressos vendidos;
Gems utilizadas
Versões
- Ruby (2.6.6)
- Rails (6.1.4)
Foram inseridos via seed três empresas, três tickets e diversos pedidos com unidades diferentes de forma a suprir os dados expostos, para maiores detalhes acesse aqui.
Para efetuar login e acessar com os usuários e dados já cadastrados utilize os seguintes acessos:
Login: admin@admin.com (possui 3 pedidos) Password: "123456"
Login: admin2@admin.com (possui 2 pedidos) Password: "123456"
Login: admin3@admin.com" (não possui pedidos) Password: "123456"
Login: "travel@admin.com" (usuário adicional com acesso ao painel de admin -> http://localhost:3000/admin) Password:"123456"
Company model
belongs_to :user
has_many :tickets
validates :name, :logo, :user_id, presence: true
Ticket model
belongs_to :company
has_many :orders
validates :company_id, :name, :photo, :price, :cashback, presence: true
validates :price, :cashback, numericality: true
Order model
belongs_to :ticket
belongs_to :user
has_many :tickets
validates :user_id, :ticket_id, :quantity, presence: true
validates :quantity, numericality: true
O backend da aplicação foi desenvolvido no formato de uma API de forma a suprir os dados do frontend com os seguintes endpoints:
GET
http://localhost:3000/api/v1/companies
http://localhost:3000/api/v1/tickets
http://localhost:3000/api/v1/orders
GET: http://localhost:3000/api/v1/orders
RESPONSE: [{
"id": 1,
"user_id": 1,
"ticket_id": 1,
"quantity": 2
},
(...)]
CREATE
http://localhost:3000/api/v1/companies
http://localhost:3000/api/v1/tickets
http://localhost:3000/api/v1/orders
http://localhost:3000/api/v1/companies/:id
http://localhost:3000/api/v1/tickets/:id
http://localhost:3000/api/v1/orders/:id
GET: http://localhost:3000/api/v1/tickets/1
RESPONSE:{
"id": 1,
"company_id": 1,
"photo": "https://res.cloudinary.com/dloadb2bx/image/upload/v1626370674/photo-1588852656640-48b816317c25_rofvdl.jpg",
"price": "100.0",
"cashback": "0.02"
}
PATCH
http://localhost:3000/api/v1/companies/:id
http://localhost:3000/api/v1/tickets/:id
http://localhost:3000/api/v1/orders/:id
PATCH: http://localhost:3000/api/v1/companies/1
RESPONSE: {
"id": 1,
"user_id": 1,
"logo": "https://res.cloudinary.com/dloadb2bx/image/upload/v1626368476/images_iqvkeh.png",
"name": "Tourism 4All"
}
DESTROY Com PUNDITe DEVISE é possível bloquear acesso ou exigir login para determinadas ações, contudo por questões práticas após o teste que pode ser visto acima, essas opções deixaram de ser exigidas.
O usuário não poderá prosseguir na plataforma vendo detalhes do ingresso salvo se devidamente logado na plataforma, para isso foi utilizada a gem DEVISE.
Uma vez que o usuário esteja logado e tenha realizado compras no site, ele poderá ver as informações de seu ingresso bem como o total de pedido o Casback de 1% com pagamento pelo cartão e o cashback total fornecido pelas empresas anunciantes dos ingressos.
Foram adicionados 15 testes unitários usando a gem RSPEC.
16 de julho
- Projeto criado em Rails;
- Devise instalado;
- Pundit instalado;
- Modelos Company, Ticket, Order adicionados;
- Setup inicial da API configurados;
- Pundt policy adicionada (liberada para melhor utilização do projeto);
- Controllers e Views(JSON) para a API criados;
17 de julho
- Seed adicionado;
- Ações adicionadas aos controllers;
- Show endpoint adicionado;;
- Simple token adicionado;
- Endpoints adicionados;
- Home page inicial implementada;
- Show page adicionada com informações básicas;
- Exibe as "Orders";
- Correção na rota Dashboard;
- Corrige rotas na navbar;
- Implementa lógica na *View(provisória)* e definitiva no controller para calcular o cashback;
- Adiciona página de login e cadastro;
- Substitui "carousel slide" por imagem estática e texto;
- Adiciona página com dashboard geral de vendas;
- Adicionado Endpoint para destroy (exigência de login deixaram de ser exigidas para melhor teste do projeto)
- Deploy no Heroku
17 de julho
- Correção de bug na rota POST da API;
- Pequenos ajustes no Frontend;
- Adição de campo "admin" na tabela usuário.
Para ver o projeto rodando no HEROKU clique aqui. Caso você já tenha instalado o Ruby on Rails nas versões apontadas no início, após efetuar o download do projeto é necessário rodar os seguintes comandos dentro da pasta do arquivo:
- yarn install;
- bundle install;
Em seguida para iniciar o banco de dados é necessário rodar os seguintes comandos:
- rails db:create (caso o banco de dados não esteja criado);
- rails db:migrante (para implementar as migrações no bando de dados);
Persistindo erros relacionados ao banco de dados rode no terminal o comando rails db:reset
. Ao final rode o comando rails s
para iniciar a aplicação em localhost:3000
.