# frozen_string_literal: true module Api # ReviewsController class ReviewsController < AuthenticatedController skip_before_action :validate_jwt, only: :index def index @product = find_product render status: :not_found and return if @product.nil? @reviews = @product.product_reviews.joins(:user_account).select('product_reviews.*', 'user_accounts.first_name as author_name') render json: serialized_collection.serializable_hash, status: :ok end def create @product = find_product render status: :not_found and return if @product.nil? @review = ProductReview.new(permitted_params.merge({ product_id: @product.id, user_account_id: current_user_account.id })) if @review.save render json: serialized_object.serializable_hash, status: :ok else render json: { error_messages: @review.errors.full_messages }, status: :unprocessable_entity end end private def find_product Product.find_by(public_id: params[:product_id]) end def permitted_params params.permit(:review, :rating) end def serialized_collection @serialized_collection ||= ProductReviewSerializer.new(@reviews) end def serialized_object @serialized_object ||= ProductReviewSerializer.new( ProductReview.joins(:user_account).select('product_reviews.*', 'user_accounts.first_name as author_name') .find(@review.id) ) end end end