# frozen_string_literal: true module Api # ReviewsController class ReviewsController < AuthenticatedController skip_before_action :validate_jwt, only: :index def index @product = Product.find_by(public_id: params[:product_id]) 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 @review = Review.new(permitted_params.merge({ product_id: params[: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 permitted_params params.permit(:review, :rating) end def serialized_collection @serialized_collection ||= ProductReviewSerializer.new(@reviews) end def serialized_object @serialized_object ||= ProductReviewSerializer.new(@review) end end end