class CountsTablesController < ApplicationController def definition locale = resolve_locale! definition = CountsResourceDefinition.new(params[:resource]) render json: { fields: definition.metadata, output_fields: definition.output_fields, filter_fields: definition.filter_metadata, axes: { latest: definition.axes(false), history: definition.axes(true) }, name_columns: definition.name_columns, column_aliases: definition.column_aliases, condition_aliases: definition.condition_aliases, grains: CountsAxes::GRAINS, defaults: CountsDefaults.metadata(params[:resource], locale: locale.code) } rescue ArgumentError head :bad_request end def index resolve_locale! render json: CountsTableQuery.new(request.query_parameters).call rescue CountsTableQuery::TooManyColumns render json: { error: 'too_many_columns', max_columns: CountsTableQuery::MAX_COLUMNS }, status: :unprocessable_entity rescue ActiveRecord::StatementTimeout => error Rails.logger.warn("counts_query_timeout: #{ error.class }") render json: { error: 'counts_query_timeout' }, status: :service_unavailable rescue ArgumentError, TypeError, KeyError, JSON::ParserError head :bad_request end def candidates resolve_locale! render json: CountsCandidates.new(request.query_parameters.merge( 'resource' => request.path_parameters[:resource])).call rescue ArgumentError, TypeError, KeyError head :bad_request end end