diff --git a/app/models/user_geometry.rb b/app/models/user_geometry.rb index 8f5e398aa..74633bc8d 100644 --- a/app/models/user_geometry.rb +++ b/app/models/user_geometry.rb @@ -5,7 +5,7 @@ class UserGeometry @json_latlngs = json_latlngs end - def value + def geometry to_geo_json(@json_latlngs) end diff --git a/app/serializers/cadastre_serializer.rb b/app/serializers/cadastre_serializer.rb deleted file mode 100644 index 193a292a5..000000000 --- a/app/serializers/cadastre_serializer.rb +++ /dev/null @@ -1,17 +0,0 @@ -class CadastreSerializer < ActiveModel::Serializer - attributes :value, :type_de_champ - - def value - object.geometry - end - - def type_de_champ - { - id: -1, - libelle: 'cadastre', - type_champ: 'cadastre', - order_place: -1, - descripton: '' - } - end -end diff --git a/app/serializers/champ_serializer.rb b/app/serializers/champ_serializer.rb index 454d3b944..c57c185f9 100644 --- a/app/serializers/champ_serializer.rb +++ b/app/serializers/champ_serializer.rb @@ -6,10 +6,62 @@ class ChampSerializer < ActiveModel::Serializer has_one :type_de_champ def value - if object.piece_justificative_file.attached? - url_for(object.piece_justificative_file) + case object + when GeoArea, UserGeometry, Cadastre, QuartierPrioritaire + object.geometry else - object.value + if object.piece_justificative_file.attached? + url_for(object.piece_justificative_file) + else + object.value + end + end + end + + def type_de_champ + case object + when GeoArea, UserGeometry, Cadastre, QuartierPrioritaire + legacy_type_de_champ + else + object.type_de_champ + end + end + + private + + def legacy_type_de_champ + { + id: -1, + libelle: legacy_carto_libelle, + type_champ: legacy_carto_type_champ, + order_place: -1, + descripton: '' + } + end + + def legacy_carto_libelle + case object + when UserGeometry, Cadastre, QuartierPrioritaire + object.class.name.underscore.tr('_', ' ') + else + if object.source == GeoArea.sources.fetch(:selection_utilisateur) + 'user geometry' + else + object.source.to_s.tr('_', ' ') + end + end + end + + def legacy_carto_type_champ + case object + when UserGeometry, Cadastre, QuartierPrioritaire + object.class.name.underscore + else + if object.source == GeoArea.sources.fetch(:selection_utilisateur) + 'user_geometry' + else + object.source.to_s + end end end end diff --git a/app/serializers/dossier_serializer.rb b/app/serializers/dossier_serializer.rb index 75f40effb..851cf7f62 100644 --- a/app/serializers/dossier_serializer.rb +++ b/app/serializers/dossier_serializer.rb @@ -23,7 +23,7 @@ class DossierSerializer < ActiveModel::Serializer has_many :pieces_justificatives has_many :types_de_piece_justificative - has_many :champs + has_many :champs, serializer: ChampSerializer def champs champs = object.champs.to_a @@ -35,6 +35,16 @@ class DossierSerializer < ActiveModel::Serializer if object.user_geometry.present? champs << object.user_geometry end + elsif object.expose_legacy_carto_api? + champ_carte = champs.find do |champ| + champ.type_de_champ.type_champ == TypeDeChamp.type_champs.fetch(:carte) + end + + if champ_carte.present? + carto_champs = champ_carte.geo_areas.to_a + carto_champs << champ_carte.user_geo_area + champs += carto_champs.compact + end end champs diff --git a/app/serializers/quartier_prioritaire_serializer.rb b/app/serializers/quartier_prioritaire_serializer.rb deleted file mode 100644 index 0c5c73259..000000000 --- a/app/serializers/quartier_prioritaire_serializer.rb +++ /dev/null @@ -1,17 +0,0 @@ -class QuartierPrioritaireSerializer < ActiveModel::Serializer - attributes :value, :type_de_champ - - def value - object.geometry - end - - def type_de_champ - { - id: -1, - libelle: 'quartier prioritaire', - type_champ: 'quartier_prioritaire', - order_place: -1, - descripton: '' - } - end -end diff --git a/app/serializers/user_geometry_serializer.rb b/app/serializers/user_geometry_serializer.rb deleted file mode 100644 index 964bda894..000000000 --- a/app/serializers/user_geometry_serializer.rb +++ /dev/null @@ -1,3 +0,0 @@ -class UserGeometrySerializer < ActiveModel::Serializer - attributes :value, :type_de_champ -end diff --git a/spec/controllers/api/v1/dossiers_controller_spec.rb b/spec/controllers/api/v1/dossiers_controller_spec.rb index 2cd99a95f..d5566f0f2 100644 --- a/spec/controllers/api/v1/dossiers_controller_spec.rb +++ b/spec/controllers/api/v1/dossiers_controller_spec.rb @@ -290,8 +290,8 @@ describe API::V1::DossiersController do super().find { |champ| champ[:type_de_champ][:type_champ] == 'user_geometry' } end - it { expect(subject[:type_de_champ]).to match({ id: -1, libelle: 'user_geometry', type_champ: 'user_geometry', order_place: -1, descripton: '' }) } - it { expect(subject[:value]).to match(UserGeometry.new(dossier.json_latlngs).value) } + it { expect(subject[:type_de_champ]).to match({ id: -1, libelle: 'user geometry', type_champ: 'user_geometry', order_place: -1, descripton: '' }) } + it { expect(subject[:value]).to match(UserGeometry.new(dossier.json_latlngs).geometry) } end end diff --git a/spec/models/dossier_spec.rb b/spec/models/dossier_spec.rb index 0562d528f..e923aca40 100644 --- a/spec/models/dossier_spec.rb +++ b/spec/models/dossier_spec.rb @@ -841,7 +841,7 @@ describe Dossier do } end - subject{ dossier.user_geometry.value } + subject{ dossier.user_geometry.geometry } it { is_expected.to eq(expected) } end