37 行
1.5 KiB
Ruby
37 行
1.5 KiB
Ruby
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,
|
|
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
|