Initial commit
This commit is contained in:
99
app/api/v2/management/engines.rb
Normal file
99
app/api/v2/management/engines.rb
Normal file
@@ -0,0 +1,99 @@
|
||||
# frozen_string_literal: true
|
||||
|
||||
module API
|
||||
module V2
|
||||
module Management
|
||||
class Engines < Grape::API
|
||||
namespace :engines do
|
||||
desc 'Get all engine, result is paginated.' do
|
||||
@settings[:scope] = :read_engines
|
||||
success API::V2::Management::Entities::Engine
|
||||
end
|
||||
params do
|
||||
optional :limit,
|
||||
type: { value: Integer, message: 'management.pagination.non_integer_limit' },
|
||||
values: { value: 1..1000, message: 'management.pagination.invalid_limit' },
|
||||
default: 100,
|
||||
desc: 'Limit the number of returned paginations. Defaults to 100.'
|
||||
optional :page,
|
||||
type: { value: Integer, message: 'management.pagination.non_integer_page' },
|
||||
allow_blank: false,
|
||||
default: 1,
|
||||
desc: 'Specify the page of paginated results.'
|
||||
optional :ordering,
|
||||
values: { value: %w(asc desc), message: 'management.pagination.invalid_ordering' },
|
||||
default: 'asc',
|
||||
desc: 'If set, returned values will be sorted in specific order, defaults to \'asc\'.'
|
||||
optional :order_by,
|
||||
default: 'id',
|
||||
desc: 'Name of the field, which result will be ordered by.'
|
||||
end
|
||||
post '/get' do
|
||||
result = ::Engine.order(params[:order_by] => params[:ordering])
|
||||
present paginate(result), with: API::V2::Management::Entities::Engine
|
||||
end
|
||||
|
||||
desc 'Creates new engine' do
|
||||
@settings[:scope] = :write_engines
|
||||
success API::V2::Management::Entities::Engine
|
||||
end
|
||||
params do
|
||||
requires :name,
|
||||
desc: -> { API::V2::Management::Entities::Engine.documentation[:name][:desc] },
|
||||
values: { value: ->(v) { !v.in?(::Engine.pluck(:name)) }, message: 'management.engine.duplicate_name' }
|
||||
requires :driver,
|
||||
desc: -> { API::V2::Management::Entities::Engine.documentation[:driver][:desc] }
|
||||
optional :uid,
|
||||
desc: -> { API::V2::Management::Entities::Engine.documentation[:uid][:desc] }
|
||||
optional :key,
|
||||
desc: -> { 'Credentials for remote engine' }
|
||||
optional :secret,
|
||||
desc: -> { 'Credentials for remote engine' }
|
||||
optional :data,
|
||||
desc: -> { 'Metadata for engine' }
|
||||
end
|
||||
post do
|
||||
engine = ::Engine.new(declared(params))
|
||||
if engine.save
|
||||
present engine, with: API::V2::Management::Entities::Engine
|
||||
status 201
|
||||
else
|
||||
body errors: engine.errors.full_messages
|
||||
status 422
|
||||
end
|
||||
end
|
||||
|
||||
desc 'Update engine' do
|
||||
@settings[:scope] = :write_engines
|
||||
success API::V2::Management::Entities::Engine
|
||||
end
|
||||
params do
|
||||
requires :id,
|
||||
desc: -> { API::V2::Management::Entities::Engine.documentation[:id][:desc] }
|
||||
optional :name,
|
||||
desc: -> { API::V2::Management::Entities::Engine.documentation[:name][:desc] }
|
||||
optional :driver,
|
||||
desc: -> { API::V2::Management::Entities::Engine.documentation[:driver][:desc] }
|
||||
optional :key,
|
||||
desc: -> { 'Credentials for remote engine' }
|
||||
optional :secret,
|
||||
desc: -> { 'Credentials for remote engine' }
|
||||
optional :state,
|
||||
values: { value: ::Engine::STATES.values, message: 'management.engine.invalid_state' },
|
||||
default: 1,
|
||||
desc: -> { API::V2::Management::Entities::Engine.documentation[:state][:desc] }
|
||||
end
|
||||
post '/update' do
|
||||
engine = ::Engine.find(params[:id])
|
||||
if engine.update(declared(params, include_missing: false))
|
||||
present engine, with: API::V2::Management::Entities::Engine
|
||||
else
|
||||
body errors: engine.errors.full_messages
|
||||
status 422
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
||||
Reference in New Issue
Block a user