solidus_mp 1.0.0 → 1.1.0

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: 317ace149d7d821b01bf295b4883a8b51966a77b9bd58f39607abeff96c6602a
4
- data.tar.gz: d9f670db89f5bd072dab697a37cb3b15446966b93dd71762bffd5c4c35fb76ce
3
+ metadata.gz: 6a0d0a12e6c7919205dcbf772d5166d5536f33b90375c1f7c0b06f81df3b0db6
4
+ data.tar.gz: 51230aee3d7846768b29df33365f8aaa0f1b4c283a3a924d2a8d3e50544bcd60
5
5
  SHA512:
6
- metadata.gz: 8f9d7f20d1db7a1e432aa91cfe54328d9f8a8f0aa01ba907fa9cd92b0dcd0bbe493a9944d1cdefa9b910b660f29a680c8ef758032deaa1048da0acd580ea9d1f
7
- data.tar.gz: 808b7b32bd0f4776180af0f6bcd1124a14879b39947d73dfd493ceb796066a6351b59874ceac72abd0a39d7a62b26082053ff5e90bb2a0670c9700157cc7ad8d
6
+ metadata.gz: 144d042e10f881f3df08ab85710ead0c23330042ed435bcc19be3237ec7fd75cce4a78a698e9f23f39d4b9c4a91601e782a7d2ca35d375a78988da2e9750b36b
7
+ data.tar.gz: d4d08f6d1b79592acb31ff5ad1b1bfb44a0b0456be7f5b58bebf0effa2a838cbeb6c8734e8ffa9caae6dff67b17f98de949916d40c86ff5e98af2599597e6b3a
@@ -0,0 +1,5 @@
1
+ module SolidusMp
2
+ class Card < ApplicationRecord
3
+ belongs_to :customer
4
+ end
5
+ end
@@ -0,0 +1,6 @@
1
+ module SolidusMp
2
+ class Customer < ApplicationRecord
3
+ has_many :cards
4
+ belongs_to :spree_user, class_name: "Spree::User"
5
+ end
6
+ end
@@ -22,8 +22,12 @@ module SolidusMp
22
22
  source.is_a?(payment_source_class)
23
23
  end
24
24
 
25
- def create_card_payment payment
26
- mp_payment = create_mp_payment(payment)
25
+ def create_card_payment payment, user
26
+ if user
27
+ customer = find_or_create_customer(payment, user)
28
+ save_credit_card(payment, customer)
29
+ end
30
+ mp_payment = create_mp_payment(payment, customer.try(:external_id))
27
31
  payment.source.update(external_id: mp_payment.id, three_ds_url: mp_payment.three_ds_info_external_resource_url, three_ds_creq: mp_payment.three_ds_info_creq, last_four_digits: mp_payment.last_four_digits)
28
32
  if mp_payment.error || mp_payment.internal_error
29
33
  payment.invalidate
@@ -39,9 +43,66 @@ module SolidusMp
39
43
  payment.source
40
44
  end
41
45
 
42
- def create_mp_payment payment
46
+ def find_or_create_customer(payment, user)
47
+ customer = SolidusMp::Customer.find_by(spree_user_id: user.id)
48
+ if customer.blank?
49
+ mp_customer = create_mp_customer(payment)
50
+ if mp_customer.error.blank?
51
+ customer = SolidusMp::Customer.create(
52
+ external_id: mp_customer.external_id,
53
+ email: mp_customer.email,
54
+ first_name: mp_customer.first_name,
55
+ identification_type: mp_customer.identification_type,
56
+ tax_id: mp_customer.identification_number,
57
+ spree_user_id: user.id
58
+ )
59
+ end
60
+ end
61
+ customer
62
+ end
63
+
64
+ def save_credit_card(payment, customer)
65
+ return if customer.nil?
66
+ MpApi.configuration.access_token = preferences[:access_token]
67
+ mp_credit_card = MpApi::Card.new(token: payment.source.token, customer_id: customer.external_id).create
68
+ SolidusMp::Card.upsert(
69
+ {
70
+ external_id: mp_credit_card.external_id,
71
+ last_four_digits: mp_credit_card.last_four_digits,
72
+ mp_payment_method_id: mp_credit_card.mp_payment_method_id,
73
+ customer_id: customer.id
74
+ }, unique_by: :external_id
75
+ )
76
+ end
77
+
78
+ def create_mp_customer(payment)
79
+ MpApi.configuration.access_token = preferences[:access_token]
80
+ MpApi::Customer.new(
81
+ email: payment.source.email,
82
+ first_name: payment.order.ship_address.name,
83
+ identification_type: payment.source.payer_identification_type,
84
+ identification_number: payment.source.tax_id
85
+ ).create
86
+ end
87
+
88
+ def create_mp_payment payment, customer_id
43
89
  MpApi.configuration.access_token = preferences[:access_token]
44
- MpApi::Payment.new(amount: payment.amount.to_f, payment_method: payment.source.credit_card_brand, payer_email: payment.source.email, payer_identification_type: payment.source.payer_identification_type, payer_identification_number: payment.source.tax_id, token: payment.source.token, issuer_id: payment.source.issuer_id, installments: payment.source.installments, three_d_secure_mode: true, statement_descriptor: payment.source.statement_descriptor, description: payment.source.description, items: payment.source.items).create
90
+ MpApi::Payment.new(
91
+ amount: payment.amount.to_f,
92
+ payment_method: payment.source.credit_card_brand,
93
+ payer_email: payment.source.email,
94
+ payer_identification_type: payment.source.payer_identification_type,
95
+ payer_identification_number: payment.source.tax_id,
96
+ token: payment.source.token,
97
+ issuer_id: payment.source.issuer_id,
98
+ installments: payment.source.installments,
99
+ three_d_secure_mode: true,
100
+ statement_descriptor: payment.source.statement_descriptor,
101
+ description: payment.source.description,
102
+ items: payment.source.items,
103
+ saved_card: payment.source.saved_card,
104
+ customer_id: customer_id
105
+ ).create
45
106
  end
46
107
 
47
108
  def cancel_payment payment
@@ -0,0 +1,17 @@
1
+ class CreateSolidusMpCustomers < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :solidus_mp_customers do |t|
4
+ t.string :external_id
5
+ t.string :email
6
+ t.string :first_name
7
+ t.string :identification_type
8
+ t.string :tax_id
9
+ t.integer :spree_user_id, null: false
10
+
11
+ t.timestamps
12
+ t.foreign_key :spree_users, column: :spree_user_id
13
+ end
14
+
15
+ add_index :solidus_mp_customers, :external_id, unique: true
16
+ end
17
+ end
@@ -0,0 +1,14 @@
1
+ class CreateSolidusMpCards < ActiveRecord::Migration[7.1]
2
+ def change
3
+ create_table :solidus_mp_cards do |t|
4
+ t.string :external_id
5
+ t.string :last_four_digits
6
+ t.string :mp_payment_method_id
7
+ t.integer :customer_id, null: false
8
+
9
+ t.timestamps
10
+ end
11
+
12
+ add_index :solidus_mp_cards, :external_id, unique: true
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ class AddSavedCardColumnToCardSource < ActiveRecord::Migration[7.1]
2
+ def change
3
+ add_column :solidus_mp_card_payment_sources, :saved_card, :boolean, default: false
4
+ end
5
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module SolidusMp
4
- VERSION = '1.0.0'
4
+ VERSION = '1.1.0'
5
5
  end
@@ -0,0 +1,7 @@
1
+ require 'rails_helper'
2
+
3
+ module SolidusMp
4
+ RSpec.describe Card, type: :model do
5
+ pending "add some examples to (or delete) #{__FILE__}"
6
+ end
7
+ end
@@ -0,0 +1,7 @@
1
+ require 'rails_helper'
2
+
3
+ module SolidusMp
4
+ RSpec.describe Customer, type: :model do
5
+ pending "add some examples to (or delete) #{__FILE__}"
6
+ end
7
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: solidus_mp
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - caio
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-05-10 00:00:00.000000000 Z
11
+ date: 2024-07-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: solidus_core
@@ -90,7 +90,9 @@ files:
90
90
  - LICENSE
91
91
  - README.md
92
92
  - Rakefile
93
+ - app/models/solidus_mp/card.rb
93
94
  - app/models/solidus_mp/card_payment_source.rb
95
+ - app/models/solidus_mp/customer.rb
94
96
  - app/models/solidus_mp/mp_card.rb
95
97
  - app/models/solidus_mp/mp_pix.rb
96
98
  - app/models/solidus_mp/pix_payment_source.rb
@@ -116,6 +118,9 @@ files:
116
118
  - db/migrate/20240105143500_add_status_to_payment_source.rb
117
119
  - db/migrate/20240109171955_add_error_message_to_payment_source.rb
118
120
  - db/migrate/20240510185743_add_last_four_digits_to_credit_card_source.rb
121
+ - db/migrate/20240715124647_create_solidus_mp_customers.rb
122
+ - db/migrate/20240715125709_create_solidus_mp_cards.rb
123
+ - db/migrate/20240715131005_add_saved_card_column_to_card_source.rb
119
124
  - lib/generators/solidus_mp/install/install_generator.rb
120
125
  - lib/generators/solidus_mp/install/templates/app/javascript/controllers/credit_card_controller.js
121
126
  - lib/generators/solidus_mp/install/templates/app/javascript/controllers/three_ds_controller.js
@@ -131,6 +136,8 @@ files:
131
136
  - lib/solidus_mp/version.rb
132
137
  - solidus_mp.gemspec
133
138
  - spec/models/solidus_mp/card_payment_source_spec.rb
139
+ - spec/models/solidus_mp/card_spec.rb
140
+ - spec/models/solidus_mp/customer_spec.rb
134
141
  - spec/models/solidus_mp/pix_payment_source_spec.rb
135
142
  - spec/spec_helper.rb
136
143
  homepage: https://github.com/CaioGarcia1/solidus_mp
@@ -158,11 +165,13 @@ required_rubygems_version: !ruby/object:Gem::Requirement
158
165
  - !ruby/object:Gem::Version
159
166
  version: '0'
160
167
  requirements: []
161
- rubygems_version: 3.5.10
168
+ rubygems_version: 3.5.11
162
169
  signing_key:
163
170
  specification_version: 4
164
171
  summary: ''
165
172
  test_files:
166
173
  - spec/models/solidus_mp/card_payment_source_spec.rb
174
+ - spec/models/solidus_mp/card_spec.rb
175
+ - spec/models/solidus_mp/customer_spec.rb
167
176
  - spec/models/solidus_mp/pix_payment_source_spec.rb
168
177
  - spec/spec_helper.rb