module JSONAPI::ControllerHelpers::ResourceSetup

def set_jsonapi_namespace

def set_jsonapi_namespace
  @jsonapi_namespace = params[:jsonapi_namespace].presence
end

def set_resource

def set_resource
  @resource = @resource_class.records.find(params[:id])
rescue ActiveRecord::RecordNotFound
  render_not_found_error(
    title: "Record Not Found",
    detail: "Could not find #{@resource_name} with id '#{params[:id]}'",
  )
end

def set_resource_class

def set_resource_class
  namespace = params[:jsonapi_namespace].presence
  @resource_class = JSONAPI::ResourceLoader.find(params[:resource_type], namespace:)
  @model_class = @resource_class.model_class
rescue JSONAPI::ResourceLoader::MissingResourceClass => e
  render_resource_not_found_error(e.message)
rescue NameError => e
  render_model_not_found_error(e)
end

def set_resource_name

def set_resource_name
  @resource_name = params[:resource_type].to_s.singularize
end