dscf-core 0.3.5 → 0.3.7

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: '07479b97a14690388c3ad7d6d8104d07e5d0495115a89732b0098eedbfb7cb53'
4
- data.tar.gz: b3fc923aec6c9d9d1f9b6a8e75f97aecd4b89337b44659bb479c6c9b9ac8e6a8
3
+ metadata.gz: 140fe172991cc8a918430e1dfe062b715d930c0a6914820d16eec4bc4c7a9a9f
4
+ data.tar.gz: b6bd385bde47d38da59639170d16843c6000db6fc59410a086eb885c7b5e11b1
5
5
  SHA512:
6
- metadata.gz: '0369e0fe5f6914f227ebd6e0dc3fe96c299ce1e50978d4a592b15c114f47928974a1b4a27bbff14ae5814449bc08038eabdb02a816daef451f05c45a0ca3feb8'
7
- data.tar.gz: 91aff4a210139997fd2ca7272bee083c8a4aa0d7407a699da923e2677aac7fa1ebfa8a0de3ab1c71f99669eca5d595ac8ceaf1cee0cd0ec3b33423a5195e9949
6
+ metadata.gz: f2f6606363b0d92186f267d703e29cc608f08f9be092500d94435e83b9ca2b44cc129d8898ceab3cea2933323b8c5a534542d1c75ecbab55ccf16ae3a34dd05e
7
+ data.tar.gz: e26442c83f27198db1e1eb2967838ef518e799d1926e76bb286030da06215e68fde220bd3d3f841bf38be2705a4061639be3b7e1b9faaf88ff8f29c56cbd3fc2
@@ -3,13 +3,29 @@ module Dscf
3
3
  module RoleAssignable
4
4
  extend ActiveSupport::Concern
5
5
 
6
- def assign_default_role(user)
7
- role = Role.find_or_create_by!(code: "USER") do |r|
8
- r.name = "User"
6
+ def assign_default_role(user, role_code = "USER")
7
+ role = Role.find_or_create_by!(code: role_code) do |r|
8
+ r.name = role_code.titleize
9
+ r.active = true
9
10
  end
10
11
 
12
+ copy_user_role_permissions(role) unless role_code == "USER"
13
+
11
14
  UserRole.find_or_create_by!(user: user, role: role)
12
15
  end
16
+
17
+ private
18
+
19
+ def copy_user_role_permissions(role)
20
+ return if role.permissions.any?
21
+
22
+ user_role = Role.find_by(code: "USER")
23
+ return unless user_role
24
+
25
+ user_role.permissions.each do |permission|
26
+ RolePermission.find_or_create_by!(role: role, permission: permission)
27
+ end
28
+ end
13
29
  end
14
30
  end
15
31
  end
@@ -47,7 +47,19 @@ module Dscf
47
47
 
48
48
  ActiveRecord::Base.transaction do
49
49
  if user.save
50
- assign_default_role(user)
50
+ role_code = if params[:agent].present?
51
+ "AGENT"
52
+ elsif params[:retailer].present?
53
+ "RETAILER"
54
+ else
55
+ "USER"
56
+ end
57
+ assign_default_role(user, role_code)
58
+
59
+ # Optionally create marketplace records when onboarding via mobile app
60
+ create_agent_from_signup!(user) if params[:agent].present?
61
+ create_retailer_from_signup!(user) if params[:retailer].present?
62
+
51
63
  user_with_includes = User.includes(roles: :permissions, user_profile: {}).find(user.id)
52
64
  render_success(
53
65
  "auth.success.signup",
@@ -124,6 +136,40 @@ module Dscf
124
136
  def refresh_params
125
137
  params.permit(:refresh_token)
126
138
  end
139
+
140
+ # Creates an Agent record when included in signup request (mobile onboarding)
141
+ def create_agent_from_signup!(user)
142
+ return unless defined?(Dscf::Marketplace::Agent)
143
+
144
+ Dscf::Marketplace::Agent.create!(
145
+ name: agent_signup_params[:name],
146
+ phone: agent_signup_params[:phone],
147
+ service_area: agent_signup_params[:service_area],
148
+ fayda_number: agent_signup_params[:fayda_number],
149
+ user: user
150
+ )
151
+ end
152
+
153
+ # Creates a Retailer record when included in signup request (mobile onboarding)
154
+ def create_retailer_from_signup!(user)
155
+ return unless defined?(Dscf::Marketplace::Retailer)
156
+
157
+ Dscf::Marketplace::Retailer.create!(
158
+ name: retailer_signup_params[:name],
159
+ phone: retailer_signup_params[:phone],
160
+ tin_number: retailer_signup_params[:tin_number],
161
+ location: retailer_signup_params[:location],
162
+ user: user
163
+ )
164
+ end
165
+
166
+ def agent_signup_params
167
+ params.fetch(:agent, {}).permit(:name, :phone, :service_area, :fayda_number)
168
+ end
169
+
170
+ def retailer_signup_params
171
+ params.fetch(:retailer, {}).permit(:name, :phone, :tin_number, :location)
172
+ end
127
173
  end
128
174
  end
129
175
  end
@@ -1,7 +1,7 @@
1
1
  module Dscf
2
2
  module Core
3
3
  class UserAuthSerializer < ActiveModel::Serializer
4
- attributes :id, :email, :phone, :verified_at, :permissions
4
+ attributes :id, :email, :phone, :verified_at, :permissions, :review_status
5
5
 
6
6
  has_one :user_profile, serializer: Dscf::Core::UserProfileSerializer
7
7
  has_many :roles, serializer: Dscf::Core::RoleLightSerializer
@@ -9,6 +9,29 @@ module Dscf
9
9
  def permissions
10
10
  object.active_permissions.to_a
11
11
  end
12
+
13
+ def review_status
14
+ return @review_status if defined?(@review_status)
15
+
16
+ @review_status = if defined?(Dscf::Marketplace::Agent) && (agent = Dscf::Marketplace::Agent.find_by(user_id: object.id))
17
+ { type: "agent", entity_id: agent.id, status: agent.verification_status }
18
+ elsif defined?(Dscf::Marketplace::Supplier) && (supplier = supplier_for_user)
19
+ { type: "supplier", entity_id: supplier.id, status: supplier.current_status_for(:default) }
20
+ elsif defined?(Dscf::Marketplace::Retailer) && (retailer = Dscf::Marketplace::Retailer.find_by(user_id: object.id))
21
+ { type: "retailer", entity_id: retailer.id, status: "pending" }
22
+ else
23
+ nil
24
+ end
25
+ end
26
+
27
+ private
28
+
29
+ def supplier_for_user
30
+ business = Dscf::Core::Business.find_by(user_id: object.id)
31
+ return nil unless business && defined?(Dscf::Marketplace::Supplier)
32
+
33
+ Dscf::Marketplace::Supplier.find_by(business_id: business.id)
34
+ end
12
35
  end
13
36
  end
14
37
  end
@@ -1,5 +1,5 @@
1
1
  module Dscf
2
2
  module Core
3
- VERSION = "0.3.5".freeze
3
+ VERSION = "0.3.7".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dscf-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.3.5
4
+ version: 0.3.7
5
5
  platform: ruby
6
6
  authors:
7
7
  - Asrat