Class: BoatRegisterService

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

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initializeBoatRegisterService

Returns a new instance of BoatRegisterService.



7
8
9
# File 'app/services/boat_register_service.rb', line 7

def initialize
  _reset_instance_variables
end

Instance Attribute Details

#boatObject (readonly)

Returns the value of attribute boat.



3
4
5
# File 'app/services/boat_register_service.rb', line 3

def boat
  @boat
end

#errorsObject (readonly)

Returns the value of attribute errors.



3
4
5
# File 'app/services/boat_register_service.rb', line 3

def errors
  @errors
end

#userObject (readonly)

Returns the value of attribute user.



3
4
5
# File 'app/services/boat_register_service.rb', line 3

def user
  @user
end

Instance Method Details

#perform(boat_params, request, user = nil) ⇒ Object

Parameters:

  • boat_params
    • параметры лодки, пришедшие с формы регистрации лодки

  • request
    • нужен только для того, чтобы установить ip юзеру

  • user (defaults to: nil)
    • это current_user (в номинальном режиме)



15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
# File 'app/services/boat_register_service.rb', line 15

def perform(boat_params, request, user = nil)
  _reset_instance_variables

  schema = ::Schemas::Site::RegisterBoatSchema.new boat_params                                                        # проверяем параметры, пришедшие с формы
  unless schema.valid?
    @errors = schema.errors.messages
    return false
  end

  _create_user(boat_params.dig(:users_attributes, '0'), user)                                                         # # затем создаём и проверяем юзера == NOTE: такой странный хэш приходит 100%, если в модели Boat есть accept_nested_attributes :users
  return false if @user.new_record? && !@user.valid?
  _new_boat boat_params                                                                                               # создаём лодку (но в базу пока не кладём)

  ActiveRecord::Base.transaction do                                                                                   # если дошли до этого этапа - значит всё ровно и с юзером и с лодкой - связываем их и пишем в базу
    @boat.users << @user
    @user.save validate: false

    @boat.send :set_slug
    @boat.save validate: false

    # Делаем первую фотку главной и пишем в базу IP
    MediaService.new(@boat).set_main_picture(:boat_photo)
    UserService.new(@user).set_ip(request.remote_ip.to_s)

    # в конце концов рассчитываем цены во всех валютах
    ::Boats::BoatPricesSaveService.perform(@boat, [schema.attributes[:boat_price]])            unless @boat.for_rent.zero?
    ::Boats::BoatSalePricesSaveService.perform(@boat.id, schema.attributes[:boat_sale_price])  unless @boat.for_sale.zero?

    # TODO:: во-первых, заменить условия в двух строках выше на анализ boat_params[:boat_price] и boat_params[:boat_sale_price] соответственно
    # TODO:: во-вторых, только после успешной отработки ценовых сервисов определять for_sale и for_rent и обновлять атрибуты

  end

  true
end