demarches-normaliennes/app/controllers/champs/carte_controller.rb

86 lines
2.1 KiB
Ruby
Raw Normal View History

2018-10-17 12:02:34 +02:00
class Champs::CarteController < ApplicationController
before_action :authenticate_logged_user!
def index
@champ = policy_scope(Champ).find(params[:champ_id])
@focus = params[:focus].present?
end
def create
champ = policy_scope(Champ).find(params[:champ_id])
geo_area = if params_source == GeoArea.sources.fetch(:cadastre)
2021-05-25 16:10:01 +02:00
champ.geo_areas.find_by("properties->>'id' = :id", id: create_params_feature[:properties][:id])
end
if geo_area.nil?
geo_area = champ.geo_areas.build(source: params_source, properties: {})
2021-06-02 12:43:24 +02:00
if save_feature(geo_area, create_params_feature)
render json: { feature: geo_area.to_feature }, status: :created
else
render json: { errors: geo_area.errors.full_messages }, status: :unprocessable_entity
end
else
render json: { feature: geo_area.to_feature }, status: :ok
end
end
def update
champ = policy_scope(Champ).find(params[:champ_id])
geo_area = champ.geo_areas.find(params[:id])
2021-06-02 12:43:24 +02:00
if save_feature(geo_area, update_params_feature)
head :no_content
else
render json: { errors: geo_area.errors.full_messages }, status: :unprocessable_entity
end
end
def destroy
champ = policy_scope(Champ).find(params[:champ_id])
champ.geo_areas.find(params[:id]).destroy!
head :no_content
end
private
def params_source
params[:source]
end
2021-05-25 16:10:01 +02:00
def create_params_feature
params.require(:feature).permit(properties: [
:filename,
:description,
:arpente,
:commune,
:contenance,
:created,
:id,
:numero,
:prefixe,
:section,
:updated
]).tap do |feature|
feature[:geometry] = params[:feature][:geometry]
end
end
2021-05-25 16:10:01 +02:00
def update_params_feature
params.require(:feature).permit(properties: [:description]).tap do |feature|
feature[:geometry] = params[:feature][:geometry]
end
end
2021-06-02 12:43:24 +02:00
def save_feature(geo_area, feature)
2020-06-04 11:32:59 +02:00
if feature[:geometry]
geo_area.geometry = feature[:geometry]
end
if feature[:properties]
geo_area.properties.merge!(feature[:properties])
2020-06-04 11:32:59 +02:00
end
2021-06-02 12:43:24 +02:00
geo_area.save
end
2018-10-17 12:02:34 +02:00
end