Sha256: 91e795c4b47e3bd281c2ad4b4260913fe34f06f44c3be0f1faaf81db7552d45a

Contents?: true

Size: 1.94 KB

Versions: 207

Compression:

Stored size: 1.94 KB

Contents

# frozen_string_literal: true

module Motor
  class DashboardsController < ApiBaseController
    wrap_parameters :data, except: %i[include fields]

    load_and_authorize_resource :dashboard, only: %i[index show update destroy]

    before_action :build_dashboard, only: :create
    authorize_resource :dashboard, only: :create

    def index
      render json: { data: Motor::ApiQuery::BuildJson.call(@dashboards.active, params, current_ability) }
    end

    def show
      render json: { data: Motor::ApiQuery::BuildJson.call(@dashboard, params, current_ability) }
    end

    def create
      if Motor::Dashboards::Persistance.title_already_exists?(@dashboard)
        render json: { errors: [{ source: 'title', detail: 'Title already exists' }] }, status: :unprocessable_entity
      else
        ApplicationRecord.transaction { @dashboard.save! }
        Motor::Configs::WriteToFile.call

        render json: { data: Motor::ApiQuery::BuildJson.call(@dashboard, params, current_ability) }
      end
    rescue ActiveRecord::RecordNotUnique
      retry
    end

    def update
      Motor::Dashboards::Persistance.update_from_params!(@dashboard, dashboard_params)
      Motor::Configs::WriteToFile.call

      render json: { data: Motor::ApiQuery::BuildJson.call(@dashboard, params, current_ability) }
    rescue Motor::Dashboards::Persistance::TitleAlreadyExists
      render json: { errors: [{ source: 'title', detail: 'Title already exists' }] }, status: :unprocessable_entity
    end

    def destroy
      @dashboard.update!(deleted_at: Time.current)

      Motor::Configs::WriteToFile.call

      head :ok
    end

    private

    def build_dashboard
      @dashboard = Motor::Dashboards::Persistance.build_from_params(dashboard_params)

      @dashboard.define_singleton_method(:tags) do
        taggable_tags.map(&:tag)
      end
    end

    def dashboard_params
      params.require(:data).permit(:title, :description, preferences: {}, tags: [])
    end
  end
end

Version data entries

207 entries across 207 versions & 7 rubygems

Version Path
motor-admin-0.4.36 app/controllers/motor/dashboards_controller.rb
motor-admin-0.4.35 app/controllers/motor/dashboards_controller.rb
motor-admin-0.4.34 app/controllers/motor/dashboards_controller.rb
motor-admin-0.4.33 app/controllers/motor/dashboards_controller.rb
motor-admin-0.4.32 app/controllers/motor/dashboards_controller.rb
motor-admin-0.4.31 app/controllers/motor/dashboards_controller.rb
motor-admin-0.4.30 app/controllers/motor/dashboards_controller.rb
motor-admin-0.4.29 app/controllers/motor/dashboards_controller.rb
motor-admin-0.4.28 app/controllers/motor/dashboards_controller.rb
motor-admin-cstham8-0.4.35 app/controllers/motor/dashboards_controller.rb
motor-admin-cstham8-0.4.34 app/controllers/motor/dashboards_controller.rb
motor-admin-cstham8-0.4.33 app/controllers/motor/dashboards_controller.rb
motor-admin-cstham8-0.4.32 app/controllers/motor/dashboards_controller.rb
motor-admin-cstham8-0.4.31 app/controllers/motor/dashboards_controller.rb
motor-admin-cstham8-0.4.30 app/controllers/motor/dashboards_controller.rb
motor-admin-cstham8-0.4.29 app/controllers/motor/dashboards_controller.rb
motor-admin-cstham8-0.4.28 app/controllers/motor/dashboards_controller.rb
motor-admin-cstham8-0.4.27 app/controllers/motor/dashboards_controller.rb
motor-admin-0.4.27 app/controllers/motor/dashboards_controller.rb
motor-admin-unosquare-0.4.28 app/controllers/motor/dashboards_controller.rb