Merge pull request #5122 from tchak/batch-feature-api
Add carto import api
This commit is contained in:
commit
1cc9cd0330
3 changed files with 45 additions and 4 deletions
|
@ -58,7 +58,7 @@ class Champs::CarteController < ApplicationController
|
||||||
def create
|
def create
|
||||||
champ = policy_scope(Champ).find(params[:champ_id])
|
champ = policy_scope(Champ).find(params[:champ_id])
|
||||||
geo_area = champ.geo_areas.selections_utilisateur.new
|
geo_area = champ.geo_areas.selections_utilisateur.new
|
||||||
save_geometry!(geo_area)
|
save_geometry!(geo_area, params_feature)
|
||||||
|
|
||||||
render json: { feature: geo_area.to_feature }, status: :created
|
render json: { feature: geo_area.to_feature }, status: :created
|
||||||
end
|
end
|
||||||
|
@ -66,7 +66,7 @@ class Champs::CarteController < ApplicationController
|
||||||
def update
|
def update
|
||||||
champ = policy_scope(Champ).find(params[:champ_id])
|
champ = policy_scope(Champ).find(params[:champ_id])
|
||||||
geo_area = champ.geo_areas.selections_utilisateur.find(params[:id])
|
geo_area = champ.geo_areas.selections_utilisateur.find(params[:id])
|
||||||
save_geometry!(geo_area)
|
save_geometry!(geo_area, params_feature)
|
||||||
|
|
||||||
head :no_content
|
head :no_content
|
||||||
end
|
end
|
||||||
|
@ -78,6 +78,16 @@ class Champs::CarteController < ApplicationController
|
||||||
head :no_content
|
head :no_content
|
||||||
end
|
end
|
||||||
|
|
||||||
|
def import
|
||||||
|
champ = policy_scope(Champ).find(params[:champ_id])
|
||||||
|
params_features.each do |feature|
|
||||||
|
geo_area = champ.geo_areas.selections_utilisateur.new
|
||||||
|
save_geometry!(geo_area, feature)
|
||||||
|
end
|
||||||
|
|
||||||
|
render json: champ.to_feature_collection, status: :created
|
||||||
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
|
|
||||||
def populate_cadastres(feature_collection)
|
def populate_cadastres(feature_collection)
|
||||||
|
@ -100,8 +110,16 @@ class Champs::CarteController < ApplicationController
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def save_geometry!(geo_area)
|
def params_feature
|
||||||
geo_area.geometry = params[:feature][:geometry]
|
params[:feature]
|
||||||
|
end
|
||||||
|
|
||||||
|
def params_features
|
||||||
|
params[:feature_collection][:features]
|
||||||
|
end
|
||||||
|
|
||||||
|
def save_geometry!(geo_area, feature)
|
||||||
|
geo_area.geometry = feature[:geometry]
|
||||||
geo_area.save!
|
geo_area.save!
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -123,6 +123,7 @@ Rails.application.routes.draw do
|
||||||
|
|
||||||
get ':champ_id/carte/features', to: 'carte#index', as: :carte_features
|
get ':champ_id/carte/features', to: 'carte#index', as: :carte_features
|
||||||
post ':champ_id/carte/features', to: 'carte#create'
|
post ':champ_id/carte/features', to: 'carte#create'
|
||||||
|
post ':champ_id/carte/features/import', to: 'carte#import'
|
||||||
patch ':champ_id/carte/features/:id', to: 'carte#update'
|
patch ':champ_id/carte/features/:id', to: 'carte#update'
|
||||||
delete ':champ_id/carte/features/:id', to: 'carte#destroy'
|
delete ':champ_id/carte/features/:id', to: 'carte#destroy'
|
||||||
|
|
||||||
|
|
|
@ -73,6 +73,28 @@ describe Champs::CarteController, type: :controller do
|
||||||
it { expect(response.status).to eq 204 }
|
it { expect(response.status).to eq 204 }
|
||||||
end
|
end
|
||||||
|
|
||||||
|
describe 'POST #import' do
|
||||||
|
render_views
|
||||||
|
|
||||||
|
let(:params) do
|
||||||
|
{
|
||||||
|
champ_id: champ.id,
|
||||||
|
feature_collection: {
|
||||||
|
features: [feature]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
|
before do
|
||||||
|
post :import, params: params
|
||||||
|
end
|
||||||
|
|
||||||
|
it {
|
||||||
|
expect(response.status).to eq 201
|
||||||
|
expect(response.body).to include("bbox")
|
||||||
|
}
|
||||||
|
end
|
||||||
|
|
||||||
describe 'GET #index' do
|
describe 'GET #index' do
|
||||||
render_views
|
render_views
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue