mirror of
https://github.com/internetee/registry.git
synced 2025-06-06 20:55:44 +02:00
52 lines
1.6 KiB
Ruby
52 lines
1.6 KiB
Ruby
require 'serializers/registrant_api/company'
|
|
|
|
module Api
|
|
module V1
|
|
module Registrant
|
|
class CompaniesController < ::Api::V1::Registrant::BaseController
|
|
MAX_LIMIT = 200
|
|
MIN_OFFSET = 0
|
|
|
|
def index
|
|
result = error_result('limit') if limit > MAX_LIMIT || limit < 1
|
|
result = error_result('offset') if offset < MIN_OFFSET
|
|
result ||= companies_result(limit, offset)
|
|
|
|
render result
|
|
end
|
|
|
|
def current_user_companies
|
|
[:ok, current_registrant_user.companies]
|
|
rescue CompanyRegister::NotAvailableError
|
|
[:service_unavailable, []]
|
|
end
|
|
|
|
def limit
|
|
(params[:limit] || MAX_LIMIT).to_i
|
|
end
|
|
|
|
def offset
|
|
(params[:offset] || MIN_OFFSET).to_i
|
|
end
|
|
|
|
def error_result(attr_name)
|
|
{ json: { errors: [{ attr_name.to_sym => ['parameter is out of range'] }] },
|
|
status: :bad_request }
|
|
end
|
|
|
|
def companies_result(limit, offset)
|
|
status, all_companies = current_user_companies
|
|
@companies = all_companies.drop(offset).first(limit)
|
|
|
|
serialized_companies = @companies.map do |item|
|
|
country_code = current_registrant_user.country.alpha3
|
|
serializer = ::Serializers::RegistrantApi::Company.new(company: item,
|
|
country_code: country_code)
|
|
serializer.to_json
|
|
end
|
|
{ json: { companies: serialized_companies }, status: status }
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|