diff options
| -rw-r--r-- | app/models/organisation.rb | 30 | ||||
| -rw-r--r-- | app/models/user.rb | 40 | ||||
| -rw-r--r-- | lib/tasks/organisations.rake | 31 | ||||
| -rw-r--r-- | lib/tasks/users.rake | 40 |
4 files changed, 71 insertions, 70 deletions
diff --git a/app/models/organisation.rb b/app/models/organisation.rb index 9d6e92825..fc5e2699e 100644 --- a/app/models/organisation.rb +++ b/app/models/organisation.rb @@ -21,4 +21,34 @@ class Organisation < ActiveRecord::Base def add_rule_parameter_set RuleParameterSet.default_for_all_modes( self).save end + + def self.portail_api_request + conf = Rails.application.config.try(:stif_portail_api) + raise 'Rails.application.config.stif_portail_api settings is not defined' unless conf + + conn = Faraday.new(:url => conf[:url]) do |c| + c.headers['Authorization'] = "Token token=\"#{conf[:key]}\"" + c.adapter Faraday.default_adapter + end + + resp = conn.get '/api/v1/organizations' + if resp.status == 200 + JSON.parse resp.body + else + raise "Error on api request status : #{resp.status} => #{resp.body}" + end + end + + def self.portail_sync + self.portail_api_request.each do |el| + Organisation.find_or_create_by(code: el['code']).tap do |org| + org.name = el['name'] + if org.changed? + org.synced_at = Time.now + org.save + puts "✓ Organisation #{org.name} has been updated" unless Rails.env.test? + end + end + end + end end diff --git a/app/models/user.rb b/app/models/user.rb index 3262001f3..fa4c77d96 100644 --- a/app/models/user.rb +++ b/app/models/user.rb @@ -39,6 +39,45 @@ class User < ActiveRecord::Base end end + def self.portail_api_request + conf = Rails.application.config.try(:stif_portail_api) + raise 'Rails.application.config.stif_portail_api settings is not defined' unless conf + + conn = Faraday.new(:url => conf[:url]) do |c| + c.headers['Authorization'] = "Token token=\"#{conf[:key]}\"" + c.adapter Faraday.default_adapter + end + + resp = conn.get '/api/v1/users' + if resp.status == 200 + JSON.parse resp.body + else + raise "Error on api request status : #{resp.status} => #{resp.body}" + end + end + + def self.portail_sync + self.portail_api_request.each do |el| + User.find_or_create_by(username: el['username']).tap do |user| + user.name = "#{el['firstname']} #{el['lastname']}" + user.email = el['email'] + user.locked_at = el['locked_at'] + + # Set organisation + user.organisation = Organisation.find_or_create_by(code: el['organization_code']).tap do |org| + org.name = el['organization_name'] + org.synced_at = Time.now + end + + if user.changed? + user.synced_at = Time.now + user.save + puts "✓ user #{user.username} has been updated" unless Rails.env.test? + end + end + end + end + private # remove organisation and referentials if last user of it @@ -47,5 +86,4 @@ class User < ActiveRecord::Base organisation.destroy end end - end diff --git a/lib/tasks/organisations.rake b/lib/tasks/organisations.rake index 94a9215b7..1b21d7119 100644 --- a/lib/tasks/organisations.rake +++ b/lib/tasks/organisations.rake @@ -1,35 +1,6 @@ namespace :organisations do - def api_retrieve_organisation - conf = Rails.application.config.try(:stif_portail_api) - raise 'Rails.application.config.stif_portail_api settings is not defined' unless conf - - conn = Faraday.new(:url => conf[:url]) do |c| - c.headers['Authorization'] = "Token token=\"#{conf[:key]}\"" - c.adapter Faraday.default_adapter - end - - resp = conn.get '/api/v1/organizations' - if resp.status == 200 - JSON.parse resp.body - else - raise "Error on api request status : #{resp.status} => #{resp.body}" - end - end - - def sync_organisations data - data.each do |el| - Organisation.find_or_create_by(code: el['code']).tap do |org| - org.name = el['name'] - org.synced_at = Time.now - org.save if org.changed? - puts "✓ Organisation #{org.name} has been updated" unless Rails.env.test? - end - end - end - desc "Sync organisations from stif portail" task sync: :environment do - data = api_retrieve_organisation - sync_organisations(data) if data + Organisation.portail_sync end end diff --git a/lib/tasks/users.rake b/lib/tasks/users.rake index 76250f0f0..c045639c1 100644 --- a/lib/tasks/users.rake +++ b/lib/tasks/users.rake @@ -1,44 +1,6 @@ namespace :users do - def api_retrieve_user - conf = Rails.application.config.try(:stif_portail_api) - raise 'Rails.application.config.stif_portail_api settings is not defined' unless conf - - conn = Faraday.new(:url => conf[:url]) do |c| - c.headers['Authorization'] = "Token token=\"#{conf[:key]}\"" - c.adapter Faraday.default_adapter - end - - resp = conn.get '/api/v1/users' - if resp.status == 200 - JSON.parse resp.body - else - raise "Error on api request status : #{resp.status} => #{resp.body}" - end - end - - def sync_users data - data.each do |el| - User.find_or_create_by(username: el['username']).tap do |user| - user.name = "#{el['firstname']} #{el['lastname']}" - user.email = el['email'] - user.locked_at = el['locked_at'] - user.synced_at = Time.now - - # Set organisation - user.organisation = Organisation.find_or_create_by(code: el['organization_code']).tap do |org| - org.name = el['organization_name'] - org.synced_at = Time.now - end - - user.save if user.changed? - puts "✓ user #{user.username} has been updated" unless Rails.env.test? - end - end - end - desc "Sync users from stif portail" task sync: :environment do - data = api_retrieve_user - sync_users(data) if data + User.portail_sync end end |
