stay_commerce 0.1.9 → 0.1.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: 2d9d008a0f4eb9e18a3b883131fcb3aa1f0ee3c6d8a218fb122a177aaf956023
4
- data.tar.gz: 1609a246124988590323768b762ba18dc735d7597b5ad8fc5894d967ac50f5c8
3
+ metadata.gz: b24ed7bc626048ec0567a639f138b6177756960fb6b4206ec03e85802e016c67
4
+ data.tar.gz: ee0e76e20df358f79a4199b27678cb47d931adec21fabcb6c52c031737bcf820
5
5
  SHA512:
6
- metadata.gz: 7ca184bd8b1ec032d4e5d2c8e0c499087ed732b057a9c556c2cfebec077ffdc905fed3fed43fa93f1ff075907e99182af3c55b39fae08206b848d1bc4c284e33
7
- data.tar.gz: ecffb9d3ea768806c5433c0d1120a2bab4f56a09607e6abff7392ab5e9c81881c12d5934f6c1a254e5c877bbebf334b3a0e4128cd5155211cc861868d0fef032
6
+ metadata.gz: 82f905a9fac7c37250665077ced813b2a1e1563250835c0e757df0a506a370a73bf4b4444e0e47d733d0510bcbf6a90cb511e61721b6b6d701b7f3e016862135
7
+ data.tar.gz: 94e34f1b56d89639347113ea1bd3180fa70d9039446aaef09974d2f2e1d11f1279e18a63f4590f34d75e73b80ce70cae1a13235fcfccd77aec4cfb23b376d576
@@ -0,0 +1,185 @@
1
+ # frozen_string_literal: true
2
+
3
+ # rubocop:disable Metrics/ClassLength
4
+ module Devise
5
+ module Api
6
+ class TokensController < Devise.api.config.base_controller.constantize
7
+ wrap_parameters false
8
+ skip_before_action :verify_authenticity_token, raise: false
9
+ before_action :authenticate_devise_api_token!, only: %i[info]
10
+
11
+ respond_to :json
12
+
13
+ # rubocop:disable Metrics/AbcSize
14
+ def sign_up
15
+ unless Devise.api.config.sign_up.enabled
16
+ error_response = Devise::Api::Responses::ErrorResponse.new(request, error: :sign_up_disabled,
17
+ resource_class: resource_class)
18
+
19
+ return render json: error_response.body, status: error_response.status
20
+ end
21
+
22
+ Devise.api.config.before_sign_up.call(sign_up_params, request, resource_class)
23
+
24
+ service = Devise::Api::ResourceOwnerService::SignUp.new(params: sign_up_params,
25
+ resource_class: resource_class).call
26
+ if service.success?
27
+ token = service.success
28
+
29
+ call_devise_trackable!(token.resource_owner)
30
+
31
+ token_response = Devise::Api::Responses::TokenResponse.new(request, token: token, action: __method__)
32
+ Devise.api.config.after_successful_sign_up.call(token.resource_owner, token, request)
33
+ assign_role(token.resource_owner) if token.resource_owner
34
+ data = ActiveModelSerializers::SerializableResource.new(token.resource_owner, serializer: UserSerializer).as_json
35
+ UserMailer.welcome_email(token.resource_owner).deliver_later if token.resource_owner
36
+ return render json: { access_token: token_response&.token.access_token, success: true }, status: token_response.status
37
+ end
38
+
39
+ error_response = Devise::Api::Responses::ErrorResponse.new(request,
40
+ resource_class: resource_class,
41
+ **service.failure)
42
+
43
+ error_message = error_response.body[:error_description].is_a?(Array) ? error_response.body[:error_description].join : error_response.body[:error_description].to_s
44
+ render json: { error: error_message, success: false }, status: error_response.status
45
+ end
46
+ # rubocop:enable Metrics/AbcSize
47
+
48
+ # rubocop:disable Metrics/AbcSize
49
+ def sign_in
50
+ Devise.api.config.before_sign_in.call(sign_in_params, request, resource_class)
51
+ service = Devise::Api::ResourceOwnerService::SignIn.new(params: sign_in_params,
52
+ resource_class: resource_class).call
53
+
54
+ if service.success?
55
+ token = service.success
56
+
57
+ call_devise_trackable!(token.resource_owner)
58
+
59
+ token_response = Devise::Api::Responses::TokenResponse.new(request, token: service.success,
60
+ action: __method__)
61
+ Devise.api.config.after_successful_sign_in.call(token.resource_owner, token, request)
62
+ data = ActiveModelSerializers::SerializableResource.new(token.resource_owner, serializer: UserSerializer).as_json
63
+ return render json: { access_token: token_response&.token.access_token, success: true }, status: token_response.status
64
+ end
65
+
66
+ error_response = Devise::Api::Responses::ErrorResponse.new(request,
67
+ resource_class: resource_class,
68
+ **service.failure)
69
+ error_message = error_response.body[:error_description].is_a?(Array) ? error_response.body[:error_description].join : error_response.body[:error_description].to_s
70
+
71
+ render json: { error: error_message, success: false }, status: :unprocessable_entity
72
+ end
73
+ # rubocop:enable Metrics/AbcSize
74
+
75
+ def info
76
+ token_response = Devise::Api::Responses::TokenResponse.new(request, token: current_devise_api_token,
77
+ action: __method__)
78
+ data = ActiveModelSerializers::SerializableResource.new(token_response.resource_owner, serializer: UserSerializer).as_json
79
+ render json: { data: data, success: true }, status: token_response.status
80
+ end
81
+
82
+ # rubocop:disable Metrics/AbcSize
83
+ def revoke
84
+ Devise.api.config.before_revoke.call(current_devise_api_token, request)
85
+
86
+ service = Devise::Api::TokensService::Revoke.new(devise_api_token: current_devise_api_token).call
87
+
88
+ if service.success?
89
+ token_response = Devise::Api::Responses::TokenResponse.new(request, token: service.success,
90
+ action: __method__)
91
+
92
+ Devise.api.config.after_successful_revoke.call(service.success&.resource_owner, service.success, request)
93
+
94
+ return render json: token_response.body, status: token_response.status
95
+ end
96
+
97
+ error_response = Devise::Api::Responses::ErrorResponse.new(request,
98
+ resource_class: resource_class,
99
+ **service.failure)
100
+
101
+ render json: error_response.body, status: error_response.status
102
+ end
103
+ # rubocop:enable Metrics/AbcSize
104
+
105
+ # rubocop:disable Metrics/AbcSize
106
+ def refresh
107
+ unless Devise.api.config.refresh_token.enabled
108
+ error_response = Devise::Api::Responses::ErrorResponse.new(request,
109
+ resource_class: resource_class,
110
+ error: :refresh_token_disabled)
111
+
112
+ return render json: error_response.body, status: error_response.status
113
+ end
114
+
115
+ if current_devise_api_refresh_token.blank?
116
+ error_response = Devise::Api::Responses::ErrorResponse.new(request, error: :invalid_token,
117
+ resource_class: resource_class)
118
+
119
+ return render json: error_response.body, status: error_response.status
120
+ end
121
+
122
+ if current_devise_api_refresh_token.revoked?
123
+ error_response = Devise::Api::Responses::ErrorResponse.new(request, error: :revoked_token,
124
+ resource_class: resource_class)
125
+
126
+ return render json: error_response.body, status: error_response.status
127
+ end
128
+
129
+ Devise.api.config.before_refresh.call(current_devise_api_refresh_token, request)
130
+
131
+ service = Devise::Api::TokensService::Refresh.new(devise_api_token: current_devise_api_refresh_token).call
132
+
133
+ if service.success?
134
+ token_response = Devise::Api::Responses::TokenResponse.new(request, token: service.success,
135
+ action: __method__)
136
+
137
+ Devise.api.config.after_successful_refresh.call(service.success.resource_owner, service.success, request)
138
+
139
+ return render json: token_response.body, status: token_response.status
140
+ end
141
+
142
+ error_response = Devise::Api::Responses::ErrorResponse.new(request,
143
+ resource_class: resource_class,
144
+ **service.failure)
145
+
146
+ render json: error_response.body, status: error_response.status
147
+ end
148
+ # rubocop:enable Metrics/AbcSize
149
+
150
+ private
151
+
152
+ def sign_up_params
153
+ params.permit(*Devise.api.config.sign_up.extra_fields, *resource_class.authentication_keys,
154
+ *::Devise::ParameterSanitizer::DEFAULT_PERMITTED_ATTRIBUTES[:sign_up]).to_h
155
+ end
156
+
157
+ def assign_role(user)
158
+ role = Stay::Role.find_by(name: params[:type])
159
+ user.role_users.create(role_id: role&.id) if role.present?
160
+ token = Random.hex(16)
161
+ user.update(confirmation_token: token)
162
+ end
163
+
164
+ def sign_in_params
165
+ params.permit(*resource_class.authentication_keys,
166
+ *::Devise::ParameterSanitizer::DEFAULT_PERMITTED_ATTRIBUTES[:sign_in]).to_h
167
+ end
168
+
169
+ def call_devise_trackable!(resource_owner)
170
+ return unless resource_class.supported_devise_modules.trackable?
171
+
172
+ resource_owner.update_tracked_fields!(request)
173
+ end
174
+
175
+ def current_devise_api_refresh_token
176
+ return @current_devise_api_refresh_token if @current_devise_api_refresh_token
177
+
178
+ token = find_devise_api_token
179
+ devise_api_token_model = Devise.api.config.base_token_model.constantize
180
+ @current_devise_api_refresh_token = devise_api_token_model.find_by(refresh_token: token)
181
+ end
182
+ end
183
+ end
184
+ end
185
+ # rubocop:enable Metrics/ClassLength
@@ -0,0 +1,27 @@
1
+ class Stay::Api::V1::ProfilesController < Stay::BaseApiController
2
+ before_action :set_user, only: [:show, :update]
3
+
4
+ def show
5
+ render json: { profile: @profile }
6
+ end
7
+
8
+ def update
9
+ if @profile.update(profile_params)
10
+ data = ActiveModelSerializers::SerializableResource.new(@profile, serializer: UserSerializer)
11
+ render json: { profile: data, success: true }, status: :ok
12
+ else
13
+ render json: { errors: @profile.errors.full_messages, success:false }, status: :unprocessable_entity
14
+ end
15
+ end
16
+
17
+ private
18
+
19
+ def set_user
20
+ @profile = current_devise_api_user || Stay::User.find(params[:id])
21
+ end
22
+
23
+ def profile_params
24
+ params.require(:profile).permit(:first_name, :last_name, :phone, :date_of_birth, :gender, :profile_image )
25
+ end
26
+
27
+ end
@@ -3,12 +3,12 @@ class Stay::Api::V1::PropertyCategoriesController < Stay::BaseApiController
3
3
 
4
4
  def index
5
5
  @type = Stay::PropertyCategory.all
6
+ return render json: { error: "no data found", success: false }, status: :not_found unless @type.any?
6
7
  render json: { data: ActiveModelSerializers::SerializableResource.new(@type, each_serializer: PropertyCategorySerializer), message: "data found", success: true }, status: :ok
7
8
  end
8
9
 
9
10
  def show
10
11
  @type = Stay::PropertyCategory.find_by(id: params[:id])
11
- return render json: { error: "no data found", success: false }, status: :unprocessable_entity if @type.nil?
12
12
  render json: { data: PropertyCategorySerializer.new(@type), message: "data found", success: true }, status: :ok
13
13
  end
14
14
  end
@@ -2,9 +2,25 @@ class Stay::Api::V1::PropertyTypesController < Stay::BaseApiController
2
2
  before_action :authenticate_devise_api_token!
3
3
 
4
4
  def index
5
- @type = Stay::PropertyType.all
6
- render json: { data: ActiveModelSerializers::SerializableResource.new(@type, each_serializer: PropertyTypeSerializer), message: "data found", success: true }, status: :ok
5
+ property_types = Stay::PropertyType.all
6
+
7
+ if property_types.any?
8
+ serialized_data = ActiveModelSerializers::SerializableResource.new(property_types, each_serializer: PropertyTypeSerializer)
9
+
10
+ render json: {
11
+ data: serialized_data,
12
+ message: "Data found",
13
+ success: true
14
+ }, status: :ok
15
+ else
16
+ render json: {
17
+ data: [],
18
+ message: "No property types found",
19
+ success: false
20
+ }, status: :ok
21
+ end
7
22
  end
23
+
8
24
 
9
25
  def show
10
26
  @type = Stay::PropertyType.find_by(id: params[:id])
@@ -31,10 +31,6 @@ class UserSerializer < ActiveModel::Serializer
31
31
  object&.preferences.present? ? object&.preferences["sms_notification"]: false
32
32
  end
33
33
 
34
- def payment_method_preference
35
- object.payment_method_name
36
- end
37
-
38
34
  def image_file_name
39
35
  object.profile_image&.filename&.to_s || nil
40
36
  end
@@ -0,0 +1,28 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Devise
4
+ module Api
5
+ module ResourceOwnerService
6
+ class Authenticate < Devise::Api::BaseService
7
+ option :params, type: Types::Hash
8
+ option :resource_class, type: Types::Class
9
+
10
+ def call
11
+ resource = resource_class.find_for_authentication(email: params[:email])
12
+ return Failure(error: :invalid_email, record: nil) if resource.blank?
13
+ return Failure(error: :invalid_authentication, record: resource) unless authenticate!(resource)
14
+
15
+ Success(resource)
16
+ end
17
+
18
+ private
19
+
20
+ def authenticate!(resource)
21
+ resource.valid_for_authentication? do
22
+ resource.valid_password?(params[:password])
23
+ end && resource.active_for_authentication?
24
+ end
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,31 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Devise
4
+ module Api
5
+ module ResourceOwnerService
6
+ class SignIn < Devise::Api::BaseService
7
+ option :params, type: Types::Hash
8
+ option :resource_class, type: Types::Class
9
+
10
+ def call
11
+ resource_owner = yield call_authenticate_service
12
+ devise_api_token = yield call_create_devise_api_token_service(resource_owner)
13
+ resource_owner.reset_failed_attempts! if resource_owner.class.supported_devise_modules.lockable?
14
+
15
+ Success(devise_api_token)
16
+ end
17
+
18
+ private
19
+
20
+ def call_authenticate_service
21
+ Devise::Api::ResourceOwnerService::Authenticate.new(params: params,
22
+ resource_class: resource_class).call
23
+ end
24
+
25
+ def call_create_devise_api_token_service(resource_owner)
26
+ Devise::Api::TokensService::Create.new(resource_owner: resource_owner).call
27
+ end
28
+ end
29
+ end
30
+ end
31
+ end
@@ -0,0 +1,26 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Devise
4
+ module Api
5
+ module ResourceOwnerService
6
+ class SocialAuthenticate < Devise::Api::BaseService
7
+ option :params, type: Types::Hash
8
+ option :resource_class, type: Types::Class
9
+
10
+ def call
11
+ resource = resource_class.find_for_authentication(email: params["email"])
12
+ return Failure(error: :invalid_email, record: nil) if resource.blank?
13
+ Success(resource)
14
+ end
15
+
16
+ private
17
+
18
+ def authenticate!(resource)
19
+ resource.valid_for_authentication? do
20
+ resource.valid_password?(params[:password])
21
+ end && resource.active_for_authentication?
22
+ end
23
+ end
24
+ end
25
+ end
26
+ end
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Devise
4
+ module Api
5
+ module ResourceOwnerService
6
+ class SocialSignIn < Devise::Api::BaseService
7
+ option :params, type: Types::Hash
8
+ option :resource_class, type: Types::Class
9
+
10
+ def call
11
+ resource_owner = yield call_authenticate_service
12
+ devise_api_token = yield call_create_devise_api_token_service(resource_owner)
13
+ resource_owner.reset_failed_attempts! if resource_owner.class.supported_devise_modules.lockable?
14
+
15
+ Success(devise_api_token)
16
+ end
17
+
18
+ private
19
+
20
+ def call_authenticate_service
21
+ Devise::Api::ResourceOwnerService::SocialAuthenticate.new(params: params, resource_class: resource_class).call
22
+ end
23
+
24
+ def call_create_devise_api_token_service(resource_owner)
25
+ Devise::Api::TokensService::Create.new(resource_owner: resource_owner).call
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,45 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Devise
4
+ module Api
5
+ module TokensService
6
+ class Create < Devise::Api::BaseService
7
+ option :resource_owner
8
+ option :previous_refresh_token, type: Types::String | Types::Nil, default: proc { nil }
9
+
10
+ def call
11
+ return Failure(error: :invalid_resource_owner) unless resource_owner.respond_to?(:access_tokens)
12
+
13
+ devise_api_token = yield create_devise_api_token
14
+
15
+ Success(devise_api_token)
16
+ end
17
+
18
+ private
19
+
20
+ def authenticate_service
21
+ Devise::Api::ResourceOwnerService::Authenticate.new(params: params,
22
+ resource_class: resource_class).call
23
+ end
24
+
25
+ def create_devise_api_token
26
+ devise_api_token = resource_owner.access_tokens.new(params)
27
+
28
+ return Success(devise_api_token) if devise_api_token.save
29
+
30
+ Failure(error: :devise_api_token_create_error, record: devise_api_token)
31
+ end
32
+
33
+ def params
34
+ {
35
+ access_token: Devise.api.config.base_token_model.constantize.generate_uniq_access_token(resource_owner),
36
+ refresh_token: Devise.api.config.base_token_model.constantize.generate_uniq_refresh_token(resource_owner),
37
+ expires_in: Devise.api.config.access_token.expires_in,
38
+ revoked_at: nil,
39
+ previous_refresh_token: previous_refresh_token
40
+ }
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
@@ -1,30 +0,0 @@
1
- <% if current_store %>
2
- <a class="px-0 py-1 btn text-light" id="storeSelectorDropdown" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
3
- <span class="d-sm-none"><%= svg_icon name: "store.svg", width: '18', height: '18' %></span>
4
- <span class="d-none d-sm-inline"><%= current_store.name %></span> (<%= current_store.code %>) <%= svg_icon name: "chevron-down.svg", width: '12', height: '12', classes: 'ml-1 mb-0' %>
5
- </a>
6
-
7
- <div class="dropdown-menu dropdown-menu-left overflow-hidden ml-2" aria-labelledby="storeSelectorDropdown">
8
- <% @stores.each do |store| %>
9
- <%= store_switcher_link(store) %>
10
- <% end %>
11
-
12
- <div class="dropdown-divider m-0"></div>
13
- <%= link_to new_admin_store_path, class: 'py-2 px-4 mt-1 mb-0 dropdown-item', id: 'addNewStoreLink' do %>
14
- <%= svg_icon name: "plus-circle", width: '18', height: '18' %> Add New Store
15
- <% end %>
16
- </div>
17
- <% end %>
18
-
19
- <script type="text/javascript">
20
- $('#storeSelectorDropdown').click(function () {
21
- event.preventDefault();
22
- $(this).next('.dropdown-menu').toggle();
23
- });
24
-
25
- $(document).click(function (e) {
26
- if (!$(e.target).closest('#storeSelectorDropdown').length) {
27
- $('.dropdown-menu').hide();
28
- }
29
- });
30
- </script>
data/config/routes.rb CHANGED
@@ -162,7 +162,7 @@ Stay::Engine.routes.draw do
162
162
  end
163
163
  end
164
164
  end
165
- resource :profile, only: [ :show, :update ]
165
+ resources :profiles, only: [ :show, :update ]
166
166
  resources :bookings do
167
167
  member do
168
168
  get :booking_chat
data/lib/stay/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module Stay
2
- VERSION = "0.1.9"
2
+ VERSION = "0.1.10"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: stay_commerce
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.9
4
+ version: 0.1.10
5
5
  platform: ruby
6
6
  authors:
7
7
  - w3villa-vikaspal
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2025-04-03 00:00:00.000000000 Z
11
+ date: 2025-04-04 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails
@@ -480,6 +480,7 @@ files:
480
480
  - app/channels/chat_channel.rb
481
481
  - app/controllers/concerns/stay/booking_validations.rb
482
482
  - app/controllers/concerns/stay/stripe_concern.rb
483
+ - app/controllers/devise/api/tokens_controller.rb
483
484
  - app/controllers/stay/admin/addresses_controller.rb
484
485
  - app/controllers/stay/admin/amenities_controller.rb
485
486
  - app/controllers/stay/admin/amenity_categories_controller.rb
@@ -526,7 +527,7 @@ files:
526
527
  - app/controllers/stay/api/v1/invoices_controller.rb
527
528
  - app/controllers/stay/api/v1/messages_controller.rb
528
529
  - app/controllers/stay/api/v1/payments_controller.rb
529
- - app/controllers/stay/api/v1/profile_controller.rb
530
+ - app/controllers/stay/api/v1/profiles_controller.rb
530
531
  - app/controllers/stay/api/v1/properties_controller.rb
531
532
  - app/controllers/stay/api/v1/property_categories_controller.rb
532
533
  - app/controllers/stay/api/v1/property_types_controller.rb
@@ -544,7 +545,6 @@ files:
544
545
  - app/controllers/stay/users/confirmations_controller.rb
545
546
  - app/controllers/stay/users/omniauth_callbacks_controller.rb
546
547
  - app/controllers/stay/users/passwords_controller.rb
547
- - app/controllers/stay/users/profiles_controller.rb
548
548
  - app/controllers/stay/users/registrations_controller.rb
549
549
  - app/controllers/stay/users/sessions_controller.rb
550
550
  - app/controllers/stay/users/unlocks_controller.rb
@@ -624,6 +624,11 @@ files:
624
624
  - app/serializers/room_type_serializer.rb
625
625
  - app/serializers/user_listing_serializer.rb
626
626
  - app/serializers/user_serializer.rb
627
+ - app/services/devise/api/resource_owner_service/authenticate.rb
628
+ - app/services/devise/api/resource_owner_service/sign_in.rb
629
+ - app/services/devise/api/resource_owner_service/social_authenticate.rb
630
+ - app/services/devise/api/resource_owner_service/social_sign_in.rb
631
+ - app/services/devise/api/tokens_service/create.rb
627
632
  - app/services/stay/bookings/create_booking_service.rb
628
633
  - app/services/stay/bookings/create_line_item_service.rb
629
634
  - app/services/stay/bookings/existing_booking_service.rb
@@ -1,23 +0,0 @@
1
- class Stay::Api::V1::ProfileController < Stay::BaseApiController
2
- before_action :set_user, only: [:show, :update]
3
-
4
- def show
5
- render json: { profile: @profile }
6
- end
7
-
8
- def update
9
- @profile.update(profile_params)
10
- render json: { profile: @profile }, status: :ok
11
- end
12
-
13
- private
14
-
15
- def set_user
16
- @profile = current_devise_api_user || Stay::Profile.find(params[:id])
17
- end
18
-
19
- def profile_params
20
- params.require(:profile).permit(:first_name, :last_name, :phone, :date_of_birth, :gender )
21
- end
22
-
23
- end
File without changes