# frozen_string_literal: true class Admin::PermalinksController < Admin::AdminController before_action :fetch_permalink, only: %i[show update destroy] def index url = params[:filter] permalinks = Permalink.filter_by(url) render_serialized(permalinks, PermalinkSerializer) end def new end def edit end def show render_serialized(@permalink, PermalinkSerializer) end def create permalink = Permalink.create!(permalink_params) render_serialized(permalink, PermalinkSerializer) rescue ActiveRecord::RecordInvalid => e render_json_error(e.record.errors.full_messages) end def update @permalink.update!(permalink_params) render_serialized(@permalink, PermalinkSerializer) rescue ActiveRecord::RecordInvalid => e render_json_error(e.record.errors.full_messages) end def destroy @permalink.destroy render json: success_json end private def fetch_permalink @permalink = Permalink.find(params[:id]) end def permalink_params permitted_params = params.require(:permalink).permit(:url, :permalink_type, :permalink_type_value) { url: permitted_params[:url], topic_id: extract_param(permitted_params, "topic"), post_id: extract_param(permitted_params, "post"), category_id: extract_param(permitted_params, "category"), tag_id: extract_param(permitted_params, "tag").then do |tag_name| (Tag.where(name: tag_name).pluck(:id).first || -1) if tag_name end, user_id: extract_param(permitted_params, "user"), external_url: extract_param(permitted_params, "external_url"), } end def extract_param(permitted_params, type) permitted_params[:permalink_type] == type ? permitted_params[:permalink_type_value] : nil end end