cats_core 1.0.6 → 1.0.10

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: d34a61d070d789f175697fa32b8d763c04908b7bdb031c577fa35ba7eceedc88
4
- data.tar.gz: 36039d25f798567b2e9196ffb37189b99f4bfa7406c66abccb0dbc2b614dcfdc
3
+ metadata.gz: c511fd3cb4ee9da3373af2685f3d0afc00b5398c8e4383aaa0fe3d07ddfe5ffc
4
+ data.tar.gz: dc4d3bc44ef05e623f02456574e1c038efaca0d0fe001c75023717afe4e2ba71
5
5
  SHA512:
6
- metadata.gz: 8fb02566443952aca7ec7e45c1e665206b4eb8edbc7058ef444c1c7b65e2a946b9005f8284c50fbb5a6dea820286ffbf7a52b6904c02e081512828f48dc2803b
7
- data.tar.gz: 06cde81638ce5e693929122574b7dc32079370c4a481651f8b9d26159709ceb91d2b60451874cfe733807fb44fd9707705e78b1385657a90bde759f7e80a4aec
6
+ metadata.gz: 04c8d868354002f73de37919c6fa4acf069bc4f88dfe7c471dd1b54253ce7bc23721b0c2ba351a8860a8998e2aa8967581fbe8ddf4e198c011dff1125e41cfcb
7
+ data.tar.gz: 44a86aaf44b09fcb2bfcc44d38d19220dbcb04f59303508bc308d54535da0d60c4b020b992291a5cc8702d8d3501d935d89332aa3f92407e3c8563b990ad4e8e
@@ -0,0 +1,37 @@
1
+ module Cats
2
+ module Core
3
+ class AccessController < ApplicationController
4
+ skip_before_action :authenticate, only: [:login]
5
+
6
+ def login
7
+ user = Cats::Core::User.find_by(email: auth_params[:email])
8
+ if user
9
+ if user.authenticate(auth_params[:password])
10
+ roles = user.roles.map(&:name)
11
+
12
+ unless roles.count.positive?
13
+ render json: { error: 'User has no roles.' }, status: :unprocessable_entity
14
+ return
15
+ end
16
+
17
+ payload = {
18
+ id: user.id, email: user.email, first_name: user.first_name, last_name: user.last_name, roles: roles
19
+ }
20
+ jwt = Cats::Core::TokenAuthService.issue(payload)
21
+ render json: { token: jwt, user: payload }
22
+ else
23
+ rener json: { error: 'Invalid username or password.' }, status: 400
24
+ end
25
+ else
26
+ render json: { error: 'User does not exist.' }, status: 400
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ def auth_params
33
+ params.require(:auth).permit(:email, :password)
34
+ end
35
+ end
36
+ end
37
+ end
@@ -1,6 +1,6 @@
1
1
  module Cats
2
2
  module Core
3
- class ApplicationController < ActionController::Base
3
+ class ApplicationController < ActionController::API
4
4
  before_action :authenticate
5
5
 
6
6
  def current_user
@@ -1,14 +1,36 @@
1
1
  module Cats
2
2
  module Core
3
3
  class NotificationsController < ApplicationController
4
+ before_action :set_notification, only: %i[mark_as_read mark_as_unread]
4
5
  def index
5
- data = { success: true, data: current_user.notifications.newest_first }
6
- render json: data
6
+ data = Notification.messages(current_user.notifications.newest_first)
7
+ render json: { success: true, data: data }
8
+ end
9
+
10
+ def read
11
+ data = Notification.messages(current_user.notifications.read.newest_first)
12
+ render json: { success: true, data: data }
7
13
  end
8
14
 
9
15
  def unread
10
- data = { success: true, data: current_user.notifications.unread.newest_first }
11
- render json: data
16
+ data = Notification.messages(current_user.notifications.unread.newest_first)
17
+ render json: { success: true, data: data }
18
+ end
19
+
20
+ def mark_as_read
21
+ @notification.mark_as_read!
22
+ render json: { success: true, data: @notification.message }
23
+ end
24
+
25
+ def mark_as_unread
26
+ @notification.mark_as_unread!
27
+ render json: { success: true, data: @notification.message }
28
+ end
29
+
30
+ private
31
+
32
+ def set_notification
33
+ @notification = Notification.find(params[:id])
12
34
  end
13
35
  end
14
36
  end
@@ -0,0 +1,18 @@
1
+ module Cats
2
+ module Core
3
+ class RolesController < ApplicationController
4
+ before_action :set_role, only: [:users]
5
+
6
+ def users
7
+ data = ActiveModelSerializers::SerializableResource.new(@role.users)
8
+ render json: { success: true, data: data }
9
+ end
10
+
11
+ private
12
+
13
+ def set_role
14
+ @role = Role.find(params[:id])
15
+ end
16
+ end
17
+ end
18
+ end
@@ -0,0 +1,23 @@
1
+ module Cats
2
+ module Core
3
+ class UsersController < ApplicationController
4
+ before_action :set_user, only: %i[stores warehouses]
5
+
6
+ def stores
7
+ data = ActiveModelSerializers::SerializableResource.new(@user.stores)
8
+ render json: { success: true, data: data }
9
+ end
10
+
11
+ def warehouses
12
+ data = ActiveModelSerializers::SerializableResource.new(@user.warehouses)
13
+ render json: { success: true, data: data }
14
+ end
15
+
16
+ private
17
+
18
+ def set_user
19
+ @user = User.find(params[:id])
20
+ end
21
+ end
22
+ end
23
+ end
@@ -6,7 +6,11 @@ module Cats
6
6
  belongs_to :recipient, polymorphic: true
7
7
 
8
8
  def message
9
- to_notification.message
9
+ { id: id, read: !read_at.nil? }.merge(to_notification.message)
10
+ end
11
+
12
+ def self.messages(notifications)
13
+ notifications.map(&:message)
10
14
  end
11
15
  end
12
16
  end
@@ -2,6 +2,7 @@ module Cats
2
2
  module Core
3
3
  class Role < ApplicationRecord
4
4
  belongs_to :application_module
5
+ has_and_belongs_to_many :users, join_table: :cats_core_users_cats_core_roles
5
6
  has_many :role_menus
6
7
 
7
8
  validates :name, presence: true
@@ -40,7 +40,7 @@ module Cats
40
40
  rule = Cats::Core::StackingRule.first
41
41
 
42
42
  # If no rule is defined, then define a default rule
43
- rule ||= Cats::Core::StackingRule(
43
+ rule ||= Cats::Core::StackingRule.new(
44
44
  space_between_stack: 1,
45
45
  distance_from_gangway: 2,
46
46
  distance_from_ceiling: 1,
@@ -11,6 +11,18 @@ module Cats
11
11
  validates :first_name, :last_name, :email, presence: true
12
12
  validates :password, length: { minimum: 6 }
13
13
  validates :email, uniqueness: true, format: { with: URI::MailTo::EMAIL_REGEXP }
14
+
15
+ def warehouses
16
+ return unless details.key?('warehouses')
17
+
18
+ Cats::Core::Location.where(id: details['warehouses'], location_type: Cats::Core::Location::WAREHOUSE)
19
+ end
20
+
21
+ def stores
22
+ return unless details.key?('stores')
23
+
24
+ Cats::Core::Store.where(id: details['stores'])
25
+ end
14
26
  end
15
27
  end
16
28
  end
data/config/routes.rb CHANGED
@@ -1,5 +1,23 @@
1
1
  Cats::Core::Engine.routes.draw do
2
+ post '/login', controller: :access, action: :login
2
3
  get '/notifications/unread', controller: :notifications, action: :unread
4
+ get '/notifications/read', controller: :notifications, action: :read
3
5
 
4
- resources :notifications, only: [:index]
6
+ resources :notifications, only: [:index] do
7
+ member do
8
+ post 'mark_as_read', controller: :notifications, action: :mark_as_read
9
+ post 'mark_as_unread', controller: :notifications, action: :mark_as_unread
10
+ end
11
+ end
12
+ resources :roles do
13
+ member do
14
+ get 'users', controller: :roles, action: :users
15
+ end
16
+ end
17
+ resources :users do
18
+ member do
19
+ get 'stores', controller: :users, action: :stores
20
+ get 'warehouses', controller: :users, action: :warehouses
21
+ end
22
+ end
5
23
  end
@@ -1,5 +1,5 @@
1
1
  module Cats
2
2
  module Core
3
- VERSION = '1.0.6'.freeze
3
+ VERSION = '1.0.10'.freeze
4
4
  end
5
5
  end
data/lib/cats_core.rb CHANGED
@@ -4,3 +4,4 @@ require 'ancestry'
4
4
  require 'rolify'
5
5
  require 'jwt'
6
6
  require 'noticed'
7
+ require 'active_model_serializers'
@@ -1,7 +1,7 @@
1
1
  FactoryBot.define do
2
2
  factory :notification, class: 'Cats::Core::Notification' do
3
3
  recipient factory: :user
4
- type { nil }
4
+ type { 'ExampleNotification' }
5
5
  params { {} }
6
6
  read_at { Date.today }
7
7
  end
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cats_core
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.6
4
+ version: 1.0.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - Henock L.
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2021-08-04 00:00:00.000000000 Z
11
+ date: 2021-08-05 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: active_model_serializers
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  - !ruby/object:Gem::Dependency
14
28
  name: ancestry
15
29
  requirement: !ruby/object:Gem::Requirement
@@ -202,8 +216,11 @@ files:
202
216
  - MIT-LICENSE
203
217
  - README.md
204
218
  - Rakefile
219
+ - app/controllers/cats/core/access_controller.rb
205
220
  - app/controllers/cats/core/application_controller.rb
206
221
  - app/controllers/cats/core/notifications_controller.rb
222
+ - app/controllers/cats/core/roles_controller.rb
223
+ - app/controllers/cats/core/users_controller.rb
207
224
  - app/jobs/cats/core/application_job.rb
208
225
  - app/models/cats/core/application_module.rb
209
226
  - app/models/cats/core/application_record.rb