diff --git a/app/models/student/mappers/base.rb b/app/models/student/mappers/base.rb index 8ef6e22fc..c0c340ea9 100644 --- a/app/models/student/mappers/base.rb +++ b/app/models/student/mappers/base.rb @@ -1,5 +1,8 @@ # frozen_string_literal: true +# Service object that leverages pre-defined API mappers to fetch students from classes +# It uses the ClasseMapper, StudentMapper and SchoolingMapper to extract information from +# the aggregate call for all 3 different models class Student module Mappers class Base diff --git a/app/models/student/mappers/sygne.rb b/app/models/student/mappers/sygne.rb index 2ded11001..2f581b5c2 100644 --- a/app/models/student/mappers/sygne.rb +++ b/app/models/student/mappers/sygne.rb @@ -3,8 +3,12 @@ class Student module Mappers class Sygne < Base - def map_schooling!(classe, student, _entry) - schooling = Schooling.find_or_initialize_by(classe: classe, student: student) + def map_schooling!(classe, student, entry) + attributes = map_schooling_attributes(entry) + schooling = Schooling + .find_or_initialize_by(classe: classe, student: student) + .tap { |sc| sc.assign_attributes(attributes) } + .tap(&:save!) student.close_current_schooling! if schooling != student.current_schooling @@ -13,6 +17,12 @@ def map_schooling!(classe, student, _entry) schooling.save! end + + def map_schooling_attributes(entry) + schooling_mapper.new.call(entry).values_at(:status, :start_date) + rescue StandardError => e + raise SchoolingParsingError.new, "Schooling parsing failure for #{uai}: #{e.message}" + end end end end