bookstore/app/controllers/books_controller.rb

48 lines
1.1 KiB
Ruby
Raw Normal View History

2021-03-22 03:16:29 +01:00
# frozen_string_literal: true
# Books controller
2021-03-19 17:31:38 +02:00
class BooksController < ApplicationController
2021-03-22 03:16:29 +01:00
before_action :set_book, only: %i[show edit update add_to_cart]
before_action :ensure_admin, only: %i[edit update]
2021-03-21 20:30:25 +01:00
2021-03-19 17:31:38 +02:00
def index
2021-03-22 03:16:29 +01:00
books = if current_user&.admin?
Book.all
else
Book.published
end
2021-03-21 20:30:25 +01:00
@books = books.map { |book| BooksPresenter.new(book) }
end
2021-03-22 03:16:29 +01:00
def edit; end
2021-03-21 20:30:25 +01:00
def update
2021-03-22 03:16:29 +01:00
redirect_to '/books' if @book.update(book_params)
2021-03-21 20:30:25 +01:00
end
2021-03-22 02:25:17 +01:00
def add_to_cart
@book = Book.find(params[:id])
2021-03-22 02:49:05 +01:00
return unless @book.quantity.positive?
2021-03-22 02:25:17 +01:00
current_user.books << @book
@book.decrement!(:quantity)
redirect_to '/books', notice: 'Book added to your cart'
end
def shopping_cart
@books = current_user.books.map { |book| BooksPresenter.new(book) }
end
2021-03-21 20:30:25 +01:00
private
def set_book
@book = BooksPresenter.new(Book.find(params[:id]))
end
def book_params
result = params.require(:book).permit(:title, :price, :published)
result['price'] = result['price'].to_d * 100
result
2021-03-19 17:31:38 +02:00
end
end