item_builder 0.1.29 → 0.1.30

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 99df6cad1a31d94df70b1deb5aa40b57d48eb6fab7a27c36a2843a0d81710aa9
4
- data.tar.gz: e07088f915c42ce126e8ce943113d272312c65dd1961b703b9210ef4b6459da8
3
+ metadata.gz: 4b05a2126b02a1494542d1dfa5c7889dde9df101efb6cc2d36a2b639483deaeb
4
+ data.tar.gz: c5a27afae1de6da5ee31ced96d1924df675d7b0ae38c8765e2f0b770d00a9c58
5
5
  SHA512:
6
- metadata.gz: 996034fe165910db1cc1d7431492329383068effe64f8f014a98b333b1b6a94c8a166b19a9a113c84afe2eb4d7a95c4992a93e5104a3f3f59efb82b322619e4e
7
- data.tar.gz: 20ffc61ea320c64af957763e8c69bc6aea2aebe0c3b62b99f38029d8d5f9df904b210125b0430965e0de4d9051ad5f2b78d7e67107d10590970a3709b8f0d74b
6
+ metadata.gz: 79681dbd1b388370204afc5b517ec7ac1cf8943ca1ac3f798f7f4667fc215597f68b888bcc31a42b48b98e285b60c5ebb0ed1a3d3961221e84f4ca3b5f2c41d3
7
+ data.tar.gz: 36e3a579e47f0533dca84a9cf8482320d6bf4607af85aac3c360de8d50830fd061010323bd9a2686897790a87c927ad5f2b308e84397c812cd605816ee7f6991
data/lib/item_builder.rb CHANGED
@@ -7,6 +7,7 @@ require 'item_builder/modes/price_service'
7
7
  require 'item_builder/modes/quantity_service'
8
8
  require 'item_builder/modes/simple_service'
9
9
  require 'item_models'
10
+ require 'item_builder/zilingo_quantity_service'
10
11
 
11
12
  class ItemBuilder
12
13
  def self.build(listing_ids, mode)
@@ -45,7 +46,8 @@ class ItemBuilder
45
46
  stock_allocs: stock_allocs, variant_listings: variant_listings,
46
47
  bundles: bundles, item_bundle_variants: item_bundle_variants,
47
48
  existing_alloc_stocks: existing_alloc_stocks,
48
- reserved_stocks: reserved_stocks
49
+ reserved_stocks: reserved_stocks,
50
+ zilingo_delta_quantity: zilingo_delta_quantity
49
51
  }
50
52
  end
51
53
 
@@ -105,6 +107,16 @@ class ItemBuilder
105
107
  @listings ||= VariantListing.where(id: listing_ids)
106
108
  end
107
109
 
110
+ def skus
111
+ @skus ||= listings.map(&:local_id).uniq
112
+ end
113
+
114
+ def zilingo_delta_quantity
115
+ @zilingo_delta_quantity ||= ItemBuilder::ZilingoQuantityService.new(
116
+ listings: listings, skus: skus
117
+ ).perform
118
+ end
119
+
108
120
  def modes
109
121
  {
110
122
  price: ItemBuilder::Modes::PriceService,
@@ -128,6 +140,6 @@ class ItemBuilder
128
140
  def reserved_stocks
129
141
  @reserved_stocks ||= JSON.parse(RestClient.get(
130
142
  "#{order_host}?#{reserved_params}"
131
- ).body) if [3,13,18].include?(listings[0].channel_id)
143
+ ).body) if [3,13].include?(listings[0].channel_id)
132
144
  end
133
145
  end
@@ -17,6 +17,7 @@ class ItemBuilder
17
17
  attr_reader :existing_alloc_stocks
18
18
  attr_reader :variant_listings
19
19
  attr_reader :reserved_stocks
20
+ attr_reader :zilingo_delta_quantity
20
21
  def initialize(args)
21
22
  @listing = args.fetch(:listing)
22
23
  @wh_spaces = args.fetch(:wh_spaces, [])
@@ -27,6 +28,7 @@ class ItemBuilder
27
28
  @existing_alloc_stocks = args.fetch(:existing_alloc_stocks, [])
28
29
  @variant_listings = args.fetch(:variant_listings, [])
29
30
  @reserved_stocks = args.fetch(:reserved_stocks, [])
31
+ @zilingo_delta_quantity = args.fetch(:zilingo_delta_quantity)
30
32
  end
31
33
 
32
34
  def base
@@ -6,64 +6,7 @@ class ItemBuilder
6
6
  module Quantity
7
7
  class ZilingoService < Base
8
8
  def perform
9
- available_quantity - local_quantity.to_i
10
- end
11
-
12
- def local_quantity
13
- quantities = sku_quantities(listing.local_item_id)
14
- quantities[listing.local_id]
15
- end
16
-
17
- def headers
18
- { content_type: :json, accept: :json }
19
- end
20
-
21
- def data(item_id)
22
- {
23
- "credential": JSON.parse(credential)['credential'],
24
- "data": { "item_id": item_id }
25
- }.to_json
26
- end
27
-
28
- def credential
29
- return @credential if @credential
30
-
31
- account_id = listing.profile_channel_association_id
32
- host = ENV['CREDENTIAL_URL'] || raise('credential url is not set')
33
- url = "#{host}/credential?account_id=#{account_id}"
34
- @credential = rest_client(method: :get, url: url)
35
- end
36
-
37
- def url
38
- url = ENV['API_GATEWAY_URL'] || raise('api gateway is not set')
39
- url + "/zilingo/item_quantities"
40
- end
41
-
42
- def sku_quantities(item_id)
43
- args = {
44
- method: :post, url: url, payload: data(item_id), headers: headers
45
- }
46
- resp = JSON.parse(rest_client(args, [200, 500, 406]))
47
- response_process(resp)
48
- end
49
-
50
- def response_process(resp)
51
- hash = Hash.new
52
- resp['zilingoSKUQuantities'].each do |sku|
53
- hash[sku['zilingoSKUId']] = sku['quantity'] + sku['frozenQuantity']
54
- end
55
- hash
56
- end
57
-
58
- def rest_client(params, rescued_codes = 200)
59
- RestClient::Request.execute(params.merge(timeout: 3)) do |response|
60
- code = response.code
61
- unless Array.wrap(rescued_codes).include?(code)
62
- raise "Response Code is #{code}"
63
- end
64
-
65
- response
66
- end
9
+ available_quantity - reserved_stock.to_i
67
10
  end
68
11
  end
69
12
  end
@@ -47,7 +47,11 @@ class ItemBuilder
47
47
  end
48
48
 
49
49
  def reserved_stock
50
- reserved_stocks.find {|rs| rs['variant_id'] == listing.variant_id }['reserved_quantity']
50
+ if channel_name == 'Zilingo'
51
+ zilingo_delta_quantity[listing.local_id]
52
+ else
53
+ reserved_stocks.find {|rs| rs['variant_id'] == listing.variant_id }['reserved_quantity']
54
+ end
51
55
  end
52
56
 
53
57
  def available_quantity
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  class ItemBuilder
4
- VERSION = '0.1.29'
4
+ VERSION = '0.1.30'
5
5
  end
@@ -0,0 +1,64 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'item_builder/modes.rb'
4
+ class ItemBuilder
5
+ class ZilingoQuantityService
6
+ attr_reader :listings, :skus
7
+ def initialize(args)
8
+ @listings = args.fetch(:listings)
9
+ @skus = args.fetch(:skus)
10
+ end
11
+
12
+ def perform
13
+ args = {
14
+ method: :post, url: url, payload: data, headers: headers
15
+ }
16
+ resp = JSON.parse(rest_client(args, [200, 500, 406]))
17
+ response_process(resp)
18
+ end
19
+
20
+ def headers
21
+ { content_type: :json, accept: :json }
22
+ end
23
+
24
+ def data
25
+ {
26
+ "credential": JSON.parse(credential)['credential'],
27
+ "data": { "skus": skus }
28
+ }.to_json
29
+ end
30
+
31
+ def credential
32
+ return @credential if @credential
33
+
34
+ account_id = listings[0].profile_channel_association_id
35
+ host = ENV['CREDENTIAL_URL'] || raise('credential url is not set')
36
+ url = "#{host}/credential?account_id=#{account_id}"
37
+ @credential = rest_client(method: :get, url: url)
38
+ end
39
+
40
+ def url
41
+ url = ENV['API_GATEWAY_URL'] || raise('api gateway is not set')
42
+ url + "/zilingo/item_quantity_by_sku"
43
+ end
44
+
45
+ def response_process(resp)
46
+ hash = Hash.new
47
+ resp['zilingoSKUQuantities'].each do |sku|
48
+ hash[sku['zilingoSKUId']] = sku['quantity'] + sku['frozenQuantity']
49
+ end
50
+ hash
51
+ end
52
+
53
+ def rest_client(params, rescued_codes = 200)
54
+ RestClient::Request.execute(params.merge(timeout: 3)) do |response|
55
+ code = response.code
56
+ unless Array.wrap(rescued_codes).include?(code)
57
+ raise "Response Code is #{code}"
58
+ end
59
+
60
+ response
61
+ end
62
+ end
63
+ end
64
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: item_builder
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.29
4
+ version: 0.1.30
5
5
  platform: ruby
6
6
  authors:
7
7
  - okaaryanata
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-02-15 00:00:00.000000000 Z
11
+ date: 2021-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -144,6 +144,7 @@ files:
144
144
  - lib/item_builder/modes/update/zalora_service.rb
145
145
  - lib/item_builder/modes/update_service.rb
146
146
  - lib/item_builder/version.rb
147
+ - lib/item_builder/zilingo_quantity_service.rb
147
148
  homepage:
148
149
  licenses: []
149
150
  metadata: {}