aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--app/models/organisation.rb30
-rw-r--r--app/models/user.rb40
-rw-r--r--lib/tasks/organisations.rake31
-rw-r--r--lib/tasks/users.rake40
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