dscf-marketplace 0.6.7 → 0.6.9

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: 0fb785dc987a200c5acd58677a9ccf1f68fac21f6f675ede6e15bde883d4fcf8
4
- data.tar.gz: f1042bc614f9be92b3a094498ed8ac576b83f82b14f524f21a60a79560dc6fda
3
+ metadata.gz: 47ccdaa6c3f673186ebd2eded4b02d820ca4a5f04c488289a7ae36fd632e86cf
4
+ data.tar.gz: ddc2b3716afba0714a92f9fd3814598eedffd39288a8a01e99eca5c36d320bdc
5
5
  SHA512:
6
- metadata.gz: 88db2f8a555cb9b36b8f18a5b3d086ae78887be193d49875bef3a0dd72279eec23402c981320ce13f7356138b05def4190c94b2b7b5a2bcae8509315adb08fdf
7
- data.tar.gz: ff4a76bfb4405405f64d389e2bfd4f1a9c297671b56b3280b948c34aab82dc50576cd30b18e0b68cf399b14bba9eea3f2ff3cd5115ac741a2eb1ed4bc2b983d8
6
+ metadata.gz: 3dfed84c310ca8365fb97fa54fa9dc46fa9a1603119cf2a05ed0a46c0c1de8834792ad6d03a3427feaf123ce2b0e19392f487e45a79a3c0fd00d5c1350e9d521
7
+ data.tar.gz: 0b68966531e15177a951d62f3737a91f1246f16ac17a3ce72b716fd7efdf1d995c1443fa594fbeea3dc508e6d5eb065d2d42d11ed18b01e639288bd7ed3d53d0
@@ -227,7 +227,7 @@ module Dscf
227
227
  end
228
228
 
229
229
  def eager_loaded_associations
230
- [ :driver, :pickup_address, :delivery_vehicle, :delivery_order_items ]
230
+ [ :driver, :pickup_address, :delivery_vehicle, :delivery_order_items, :delivery_stops ]
231
231
  end
232
232
 
233
233
  def default_serializer_includes
@@ -236,6 +236,7 @@ module Dscf
236
236
  :driver,
237
237
  :pickup_address,
238
238
  :delivery_vehicle,
239
+ :delivery_stops,
239
240
  {
240
241
  delivery_order_items: [ :dropoff_address ]
241
242
  }
@@ -245,9 +246,11 @@ module Dscf
245
246
  :pickup_address,
246
247
  :delivery_vehicle,
247
248
  :marketplace_orders,
249
+ :delivery_stops,
248
250
  {
249
251
  delivery_order_items: [ :dropoff_address ],
250
- marketplace_orders: [ :ordered_by, :ordered_to ]
252
+ marketplace_orders: [ :ordered_by, :ordered_to ],
253
+ delivery_stops: [ :dropoff_address ]
251
254
  }
252
255
  ],
253
256
  create: [ :driver, :pickup_address, :delivery_vehicle ],
@@ -0,0 +1,28 @@
1
+ module Dscf
2
+ module Marketplace
3
+ class LocationsController < ApplicationController
4
+ def get_location
5
+ place_name = params[:name]
6
+
7
+ if place_name.blank?
8
+ render_error(
9
+ "locations.errors.name_required",
10
+ status: :unprocessable_entity
11
+ )
12
+ return
13
+ end
14
+
15
+ service = GebetaService.new
16
+ locations = service.geocode(place_name)
17
+
18
+ render_success(data: locations, status: :ok)
19
+ rescue => e
20
+ render_error(
21
+ "locations.errors.geocoding_failed",
22
+ errors: [ e.message ],
23
+ status: :unprocessable_entity
24
+ )
25
+ end
26
+ end
27
+ end
28
+ end
@@ -52,7 +52,7 @@ module Dscf::Marketplace
52
52
  end
53
53
 
54
54
  def self.ransackable_associations(_auth_object = nil)
55
- %w[driver pickup_address delivery_vehicle delivery_order_items marketplace_orders]
55
+ %w[driver pickup_address delivery_vehicle delivery_order_items marketplace_orders delivery_stops]
56
56
  end
57
57
 
58
58
  def pickup!
@@ -1,6 +1,6 @@
1
1
  module Dscf::Marketplace
2
2
  class DeliveryOrderItem < ApplicationRecord
3
- enum :status, {pending: 0, picked_up: 1, delivered: 2, receiver_confirmed: 3, damaged: 4, missing: 5, disputed: 6, wrong_item: 7, missing: 8}
3
+ enum :status, {pending: 0, picked_up: 1, delivered: 2, receiver_confirmed: 3, damaged: 4, missing: 5, disputed: 6, wrong_item: 7}
4
4
 
5
5
  belongs_to :delivery_order
6
6
  belongs_to :delivery_stop, class_name: "Dscf::Marketplace::DeliveryStop", optional: true
@@ -4,18 +4,35 @@ module Dscf
4
4
  module Marketplace
5
5
  class GebetaService
6
6
  include HTTParty
7
+
7
8
  base_uri "https://mapapi.gebeta.app/api"
8
9
  debug_output $stdout if Rails.env.development?
9
10
 
10
11
  def initialize(api_key: ENV["GEBETA_MAPS_API_KEY"])
11
12
  # Sanitize the key: strip whitespace and remove surrounding quotes if any
12
13
  @api_key = api_key.to_s.strip.gsub(/\A['"]+|['"]+\z/, "")
13
-
14
+
14
15
  if @api_key.blank?
15
16
  Rails.logger.error "[GebetaService] GEBETA_MAPS_API_KEY is missing or blank"
16
17
  else
17
18
  masked_key = "#{@api_key[0...4]}...#{@api_key[-4..-1]}" if @api_key.length > 8
18
- Rails.logger.info "[GebetaService] Initialized with key: #{masked_key || 'too short'}, length: #{@api_key.length}"
19
+ Rails.logger.info "[GebetaService] Initialized with key: #{masked_key || "too short"}, length: #{@api_key.length}"
20
+ end
21
+ end
22
+
23
+ # Forward Geocoding
24
+ # @param place_name [String] The name of the place to search for
25
+ # @return [Array] Array of matching location objects
26
+ def geocode(place_name)
27
+ response = self.class.get("/v1/route/geocoding", query: {
28
+ name: place_name,
29
+ apiKey: @api_key
30
+ })
31
+
32
+ if response.success?
33
+ response.parsed_response
34
+ else
35
+ raise StandardError, "Gebeta API Error: #{response.code} - #{response.body}"
19
36
  end
20
37
  end
21
38
 
@@ -25,10 +42,10 @@ module Dscf
25
42
  def tsp(locations)
26
43
  # Gebeta TSS API expects a custom string format: [{lat,lon},{lat,lon},...]
27
44
  # Example: [{8.9,38.7},{9.0,38.8}] - Literal curly braces, comma sep lat/lon
28
-
45
+
29
46
  custom_payload = "[" + locations.map { |loc| "{#{loc[0]},#{loc[1]}}" }.join(",") + "]"
30
-
31
- # We pass this string directly to the json query param.
47
+
48
+ # We pass this string directly to the json query param.
32
49
  # HTTParty will encode the characters (e.g., { becomes %7B), which is expected.
33
50
  response = self.class.get("/route/tss", query: {
34
51
  apiKey: @api_key,
data/config/routes.rb CHANGED
@@ -121,4 +121,6 @@ Dscf::Marketplace::Engine.routes.draw do
121
121
  end
122
122
 
123
123
  resources :delivery_vehicles
124
+
125
+ get "get_location", to: "locations#get_location"
124
126
  end
@@ -1,5 +1,5 @@
1
1
  module Dscf
2
2
  module Marketplace
3
- VERSION = "0.6.7".freeze
3
+ VERSION = "0.6.9".freeze
4
4
  end
5
5
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: dscf-marketplace
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.7
4
+ version: 0.6.9
5
5
  platform: ruby
6
6
  authors:
7
7
  - Asrat
8
8
  bindir: bin
9
9
  cert_chain: []
10
- date: 2025-12-20 00:00:00.000000000 Z
10
+ date: 2026-01-01 00:00:00.000000000 Z
11
11
  dependencies:
12
12
  - !ruby/object:Gem::Dependency
13
13
  name: rails
@@ -423,6 +423,7 @@ files:
423
423
  - app/controllers/dscf/marketplace/delivery_stops_controller.rb
424
424
  - app/controllers/dscf/marketplace/delivery_vehicles_controller.rb
425
425
  - app/controllers/dscf/marketplace/listings_controller.rb
426
+ - app/controllers/dscf/marketplace/locations_controller.rb
426
427
  - app/controllers/dscf/marketplace/order_items_controller.rb
427
428
  - app/controllers/dscf/marketplace/orders_controller.rb
428
429
  - app/controllers/dscf/marketplace/products_controller.rb