Class: Lease::FindSuitsService

Inherits:
Object
  • Object
show all
Defined in:
app/services/lease/find_suits_service.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeFindSuitsService

Returns a new instance of FindSuitsService.



10
11
12
# File 'app/services/lease/find_suits_service.rb', line 10

def initialize
  _reset_ivars
end

Instance Attribute Details

#aboats_idsObject (readonly)

результат: ошибки



5
6
7
# File 'app/services/lease/find_suits_service.rb', line 5

def aboats_ids
  @aboats_ids
end

#emailsObject (readonly)

результат: ошибки



5
6
7
# File 'app/services/lease/find_suits_service.rb', line 5

def emails
  @emails
end

#errorsObject (readonly)

результат: ошибки



5
6
7
# File 'app/services/lease/find_suits_service.rb', line 5

def errors
  @errors
end

#logObject (readonly)

результат: ошибки



5
6
7
# File 'app/services/lease/find_suits_service.rb', line 5

def log
  @log
end

Instance Method Details

#perform(inquiry, personal_boat_id = nil) ⇒ Object

вернёт false, если:

* нет подходящих под заявку юзеров
* нет подходящих под заявку лодок


17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'app/services/lease/find_suits_service.rb', line 17

def perform(inquiry, personal_boat_id = nil)
  _reset_ivars
  @inquiry  = inquiry

  locs1      = BoatLocation.near([inquiry.latitude, inquiry.longitude], 300, units: :km, order: false)              # сначала ищем все лодки в Ш-радиусе (300км)
  locs2      = locs1.select { |loc| loc.radius >= loc.distance }                                                     # потом выбираем только те лодки, которые охватывают эту точку заявки

  boats_ids = locs2.map(&:boat_id).uniq
  boats     = Boat.where(id: boats_ids).where(boat_type_id: inquiry.boat_type_ids).where(for_rent: 1).where(state: ::Boat::STATE_APPROVED)
  boats_ids = boats.map(&:id)

  _log 'inquiry_id = ',          inquiry.id
  _log 'locs sql = ',            locs1.to_sql
  _log 'boats sql = ',           boats.to_sql
  _log 'result 1: boats_ids = ', boats_ids

  find_users boats_ids, personal_boat_id                                                                            # 3) фильтруем найденные лодки - выбираем только те, которые имеют хозяев
end