class Api::V1::ProductsController < ApplicationController
  # Вывод всех товаров
  def index
    @products = Api::V1::Product.all
    
    # Пагинация
    if (params[:offset] && params[:limit])
      @products = @products.page(1).per(params[:limit]).padding(params[:offset])
    else
      @products = @products.page(1).per(25)
    end
    
    #Рендер JSON
    render json: @products if stale?(etag: @products.all, last_modified: @products.maximum(:updated_at))
  end
  
  # Вывод конкретного товара
  def show
    @product = Api::V1::Product.find(params[:id])
    render json: @product if stale?(@product)
  end
  
  # Внесение в базу нового товара (POST)
  def create
    @product = Api::V1::Product.new(product_params)

    if @product.save
      render json: @product, status: :created
    else
      render json: @product.errors, status: :unprocessable_entity
    end
  end
  
  #Обновление информации о товаре (PATCH, PUT)
  def update
    @product = Api::V1::Product.find params[:id]
    if @product.update(product_params)
      head :no_content
    else
      render json: @product.errors, status: :unprocessable_entity
    end
  end
  
  #Удаление товара
  def destroy
    @product = Api::V1::Product.find params[:id]
    @product.destroy
    head :no_content
  end
  
  private
    #Описание параметров на создание товара
    def product_params
      params.require(:product).permit(:name, :desc, :price)
    end
end
  