QutBioacoustics/baw-server

View on GitHub
app/controllers/admin/audio_recordings_controller.rb

Summary

Maintainability
A
1 hr
Test Coverage
# frozen_string_literal: true

module Admin
  class AudioRecordingsController < BaseController
    # GET /admin/audio_recordings
    def index
      page = paging_params[:page].blank? ? 1 : paging_params[:page].to_i
      order_by = paging_params[:order_by].blank? ? :id : paging_params[:order_by].to_s.to_sym
      order_dir = paging_params[:order_dir].blank? ? :desc : paging_params[:order_dir].to_s.to_sym

      commit = (paging_params[:commit].blank? ? 'filter' : paging_params[:commit]).to_s

      unless [:id, :site, :duration_seconds, :recorded_date, :created_at, :audio_event_count].include?(order_by)
        raise 'Invalid order by.'
      end
      raise 'Invalid order dir.' unless [:asc, :desc].include?(order_dir)

      redirect_to admin_audio_recordings_path if commit.downcase == 'clear'

      @audio_recordings_info = {
        order_by: order_by,
        order_dir: order_dir
      }

      query = AudioRecording.includes(:site).all

      # need custom queries to order by site name and audio event count

      @audio_recordings = query.order(order_by => order_dir).page(page)
    end

    # GET /admin/audio_recordings/:id
    def show
      @audio_recording = AudioRecording.find(params[:id])
    end

    private

    def paging_params
      params.permit(:page, :order_by, :order_dir)
    end
  end
end