ecom_core 1.0.25 → 1.1.4

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: 01d8e7ef944890c36d0e47159a59cde1a20e9241cc314f6b89f82a8e1e80ffea
4
- data.tar.gz: a153b77b8ee893e88828e0a62626de8dd2017be7ea11c19402b9c62c1dd8b9d9
3
+ metadata.gz: 4beafc2b03a3dacd53644fba8be9649a06d439ea25d2677111b26c97e3bc30c8
4
+ data.tar.gz: d94e9c73d9e6ccb06edeb4c8c11c243f53cd32db6104dc7811fbd22812c683de
5
5
  SHA512:
6
- metadata.gz: 910aa55967736cdb9e243ac7a4a23041e3f6261867e43c280945b7d1775fbccc2f39f86fabc867e09552c2659e67a101a40e7eabdfddf7c8c47d99dfa71d6e77
7
- data.tar.gz: 8a62b77e189e60b7f022ca49ec9223bcc7e1dc809bcaa2331d55ed4acbdc8a9f21e0ab8b8250a8f86931fc9ae7d1db4b26aea9b9b5e3e0220011e9a457a40cda
6
+ metadata.gz: 1fe02e793523d4dfc02b33378838ba56539a3e9b87f04d4464c3b11c4cf3a5447c37d187d8e848820706472ed589973fe987ba714bd402db47afe4483268c77d
7
+ data.tar.gz: 6239fd035f737e79e4d0fe304d0c360fbf670a57de6f31200aa9b615812350c704b7bd06752f4d9af3e30283e019cbdeea86c12ff20089ba9ac1735b70e2db70
@@ -8,13 +8,13 @@ module Ecom
8
8
  end
9
9
 
10
10
  def index
11
- render json: ResourceTypeSerializer.new(@clazz.all)
11
+ render json: ResourceTypeSerializer.new(@clazz.all).serializable_hash
12
12
  end
13
13
 
14
14
  def create
15
15
  resource_type = @clazz.new(resource_type_params)
16
16
  if resource_type.save
17
- render json: ResourceTypeSerializer.new(resource_type), status: :created
17
+ render json: ResourceTypeSerializer.new(resource_type).serializable_hash, status: :created
18
18
  else
19
19
  render json: { success: false, errors: resource_type.errors }, status: :unprocessable_entity
20
20
  end
@@ -23,7 +23,7 @@ module Ecom
23
23
  def update
24
24
  resource_type = @clazz.find(params[:id])
25
25
  if resource_type.update(resource_type_params)
26
- render json: ResourceTypeSerializer.new(resource_type)
26
+ render json: ResourceTypeSerializer.new(resource_type).serializable_hash
27
27
  else
28
28
  render json: { success: false, errors: resource_type.errors }, status: :unprocessable_entity
29
29
  end
@@ -4,13 +4,20 @@ module Ecom
4
4
  skip_before_action :authenticate, only: [:login]
5
5
 
6
6
  def login
7
+ app_code = Rails.configuration.app_code
7
8
  user = User.find_by(email: auth_params[:email])
9
+
8
10
  if user
9
11
  if user.authenticate(auth_params[:password])
10
- roles = user.user_roles.each_with_object([]) do |role, result|
12
+ roles = user.roles_for_module(app_code).each_with_object([]) do |role, result|
11
13
  result << role.name
12
14
  end
13
15
 
16
+ if roles.count <= 0
17
+ render json: { error: 'User has no roles in this application.' }, status: :unprocessable_entity
18
+ return
19
+ end
20
+
14
21
  payload = { id: user.id, email: user.email, name: user.full_name, roles: roles }
15
22
  jwt = TokenAuthService.issue(payload)
16
23
  render json: { token: jwt, user: payload, error: nil }
@@ -14,6 +14,7 @@ module Ecom
14
14
  @current_user ||= user if user
15
15
  end
16
16
 
17
+
17
18
  private
18
19
 
19
20
  def authenticate
@@ -2,13 +2,13 @@ module Ecom
2
2
  module Core
3
3
  class ApplicationModulesController < ApplicationController
4
4
  def index
5
- render json: ApplicationModuleSerializer.new(ApplicationModule.all)
5
+ render json: ApplicationModuleSerializer.new(ApplicationModule.all).serializable_hash
6
6
  end
7
7
 
8
8
  def create
9
9
  application_module = ApplicationModule.new(application_module_params)
10
10
  if application_module.save
11
- render json: ApplicationModuleSerializer.new(application_module), status: :created
11
+ render json: ApplicationModuleSerializer.new(application_module).serializable_hash, status: :created
12
12
  else
13
13
  render json: { success: false, errors: application_module.errors }, status: :unprocessable_entity
14
14
  end
@@ -17,7 +17,7 @@ module Ecom
17
17
  def update
18
18
  application_module = ApplicationModule.find(params[:id])
19
19
  if application_module.update(application_module_params)
20
- render json: ApplicationModuleSerializer.new(application_module)
20
+ render json: ApplicationModuleSerializer.new(application_module).serializable_hash
21
21
  else
22
22
  render json: { success: false, errors: application_module.errors }, status: :unprocessable_entity
23
23
  end
@@ -2,24 +2,8 @@ module Ecom
2
2
  module Core
3
3
  class MenusController < ApplicationController
4
4
  def index
5
- user = current_user
6
- roles = user.user_roles
7
- app_module = roles[0].application_module
8
- menus = []
9
- roles.each do |role|
10
- menu_list = role.menus.where(parent: nil, application_module: app_module)
11
- menu_list.each do |menu|
12
- children = []
13
- menu.children.order(:label).each do |child|
14
- if role.menus.include? child
15
- children << { label: child.label, icon: child.icon, route: child.route }
16
- end
17
- end
18
- menus << { label: menu.label, icon: menu.icon, children: children }
19
- end
20
- end
21
-
22
- render json: menus
5
+ service = MenuService.new
6
+ render json: service.fetch_menu(current_user)
23
7
  end
24
8
  end
25
9
  end
@@ -4,14 +4,14 @@ module Ecom
4
4
  before_action :set_user_role, only: [:update]
5
5
 
6
6
  def index
7
- render json: UserRoleSerializer.new(UserRole.all)
7
+ render json: UserRoleSerializer.new(UserRole.all).serializable_hash
8
8
  end
9
9
 
10
10
  def create
11
11
  user_role = UserRole.new(user_role_params)
12
12
 
13
13
  if user_role.save
14
- render json: UserRoleSerializer.new(user_role), status: :created
14
+ render json: UserRoleSerializer.new(user_role).serializable_hash, status: :created
15
15
  else
16
16
  render json: { success: false, errors: user_role.errors }, status: :unprocessable_entity
17
17
  end
@@ -19,7 +19,7 @@ module Ecom
19
19
 
20
20
  def update
21
21
  if @user_role.update(user_role_params)
22
- render json: UserRoleSerializer.new(@user_role)
22
+ render json: UserRoleSerializer.new(@user_role).serializable_hash
23
23
  else
24
24
  render json: { success: false, errors: @user_role.errors }, status: :unprocessable_entity
25
25
  end
@@ -4,17 +4,17 @@ module Ecom
4
4
  before_action :set_user, only: [:update]
5
5
 
6
6
  def index
7
- render json: UserSerializer.new(User.all)
7
+ render json: UserSerializer.new(User.all).serializable_hash
8
8
  end
9
9
 
10
10
  def active
11
- render json: UserSerializer.new(User.active)
11
+ render json: UserSerializer.new(User.active).serializable_hash
12
12
  end
13
13
 
14
14
  def create
15
15
  user = User.new(user_params)
16
16
  if user.save
17
- render json: UserSerializer.new(user), status: :created
17
+ render json: UserSerializer.new(user).serializable_hash, status: :created
18
18
  else
19
19
  render json: { success: false, errors: user.errors }, status: :unprocessable_entity
20
20
  end
@@ -22,7 +22,7 @@ module Ecom
22
22
 
23
23
  def update
24
24
  if @user.update(user_params)
25
- render json: UserSerializer.new(@user)
25
+ render json: UserSerializer.new(@user).serializable_hash
26
26
  else
27
27
  render json: { success: false, errors: @user.errors }, status: :unprocessable_entity
28
28
  end
@@ -8,6 +8,7 @@ module Ecom
8
8
  if: proc { |c| c.employment_date.nil? }
9
9
 
10
10
  belongs_to :crew_type
11
+ has_many :crew_types, class_name: 'Ecom::Core::CrewTime'
11
12
 
12
13
  validates :name, :qualification, presence: true
13
14
  validates :employment, inclusion: [PERMANENT, TEMPORARY]
@@ -9,6 +9,17 @@ module Ecom
9
9
 
10
10
  validates :name, :status, :serial_number, :purchase_date, :purchase_price, presence: true
11
11
  validates :serial_number, uniqueness: true
12
+
13
+ def self.search(param)
14
+ search_term = "%#{param.downcase}%"
15
+ Ecom::Core::EquipmentItem
16
+ .joins(:equipment)
17
+ .where(
18
+ 'lower(ecom_core_equipment_items.name) LIKE ? OR lower(ecom_core_equipment.name) LIKE ?',
19
+ search_term,
20
+ search_term
21
+ )
22
+ end
12
23
  end
13
24
  end
14
25
  end
@@ -15,6 +15,10 @@ module Ecom
15
15
  def full_name
16
16
  "#{first_name} #{last_name}"
17
17
  end
18
+
19
+ def roles_for_module(code)
20
+ user_roles.joins(:application_module).where('ecom_core_application_modules.code = ?', code)
21
+ end
18
22
  end
19
23
  end
20
24
  end
@@ -1,8 +1,6 @@
1
1
  module Ecom
2
2
  module Core
3
- class ApplicationModuleSerializer
4
- include FastJsonapi::ObjectSerializer
5
-
3
+ class ApplicationModuleSerializer < ApplicationSerializer
6
4
  attributes :code, :name
7
5
  end
8
6
  end
@@ -0,0 +1,20 @@
1
+ module Ecom
2
+ module Core
3
+ class ApplicationSerializer
4
+ include FastJsonapi::ObjectSerializer
5
+
6
+ def serializable_hash
7
+ data = super[:data]
8
+ if data.is_a? Hash
9
+ data[:attributes]
10
+ elsif data.is_a? Array
11
+ data.map { |d| d[:attributes] }
12
+ elsif data.nil?
13
+ nil
14
+ else
15
+ data
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,7 +1,6 @@
1
1
  module Ecom
2
2
  module Core
3
- class LookupSerializer
4
- include FastJsonapi::ObjectSerializer
3
+ class LookupSerializer < ApplicationSerializer
5
4
  attributes :name, :type
6
5
  end
7
6
  end
@@ -1,7 +1,6 @@
1
1
  module Ecom
2
2
  module Core
3
- class ResourceTypeSerializer
4
- include FastJsonapi::ObjectSerializer
3
+ class ResourceTypeSerializer < ApplicationSerializer
5
4
  attributes :code, :name, :base_unit, :type
6
5
  end
7
6
  end
@@ -1,8 +1,6 @@
1
1
  module Ecom
2
2
  module Core
3
- class UserRoleSerializer
4
- include FastJsonapi::ObjectSerializer
5
-
3
+ class UserRoleSerializer < ApplicationSerializer
6
4
  attributes :name
7
5
  end
8
6
  end
@@ -1,8 +1,6 @@
1
1
  module Ecom
2
2
  module Core
3
- class UserSerializer
4
- include FastJsonapi::ObjectSerializer
5
-
3
+ class UserSerializer < ApplicationSerializer
6
4
  attributes :first_name, :last_name, :email, :active
7
5
  end
8
6
  end
@@ -0,0 +1,24 @@
1
+ module Ecom
2
+ module Core
3
+ class MenuService
4
+ def fetch_menu(user)
5
+ role_ids = user.user_roles.map(&:id)
6
+ join_sql = <<-SQL
7
+ INNER JOIN ecom_core_menus_user_roles MUR ON MUR.menu_id = ecom_core_menus.id
8
+ INNER JOIN ecom_core_user_roles UR ON MUR.user_role_id = UR.id
9
+ SQL
10
+ menu = Menu.joins(join_sql).where('UR.id IN (?)', role_ids).distinct
11
+ menu_list = menu.select { |m| m.parent.nil? }.each_with_object([]) do |item, list|
12
+ list << { id: item.id, label: item.label, icon: item.icon, route: item.route, children: [] }
13
+ end
14
+
15
+ menu_list.each do |ml|
16
+ ml[:children] = menu.reject { |m| m.parent.nil? }.each_with_object([]) do |item, list|
17
+ list << { id: item.id, label: item.label, icon: item.icon, route: item.route } if item.parent_id == ml[:id]
18
+ end
19
+ end
20
+ menu_list
21
+ end
22
+ end
23
+ end
24
+ end
@@ -1,5 +1,5 @@
1
1
  module Ecom
2
2
  module Core
3
- VERSION = '1.0.25'.freeze
3
+ VERSION = '1.1.4'.freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ecom_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.25
4
+ version: 1.1.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-03-17 00:00:00.000000000 Z
11
+ date: 2020-03-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: aasm
@@ -251,10 +251,12 @@ files:
251
251
  - app/models/ecom/core/work_product.rb
252
252
  - app/models/ecom/core/work_product_template.rb
253
253
  - app/serializers/ecom/core/application_module_serializer.rb
254
+ - app/serializers/ecom/core/application_serializer.rb
254
255
  - app/serializers/ecom/core/lookup_serializer.rb
255
256
  - app/serializers/ecom/core/resource_type_serializer.rb
256
257
  - app/serializers/ecom/core/user_role_serializer.rb
257
258
  - app/serializers/ecom/core/user_serializer.rb
259
+ - app/services/ecom/core/menu_service.rb
258
260
  - app/services/ecom/core/token_auth_service.rb
259
261
  - config/database.ci.yml
260
262
  - config/routes.rb