Class: Api::V5::UserAddressesController

Inherits:
BaseController
  • Object
show all
Includes:
Concerns::Authorization
Defined in:
app/controllers/api/v5/user_addresses_controller.rb

Constant Summary

Constants inherited from BaseController

BaseController::CACHE_NAMESPACE, BaseController::INTERNAL_SERVER_ERROR_MESSAGE, BaseController::ResponseSchema

Instance Method Summary collapse

Methods inherited from BaseController

#identity_cache_memoization

Methods included from LogrageCustomLogger

#append_info_to_payload

Methods included from ResponseCacheConcern

#my_response_cache

Instance Method Details

#createObject



34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
# File 'app/controllers/api/v5/user_addresses_controller.rb', line 34

def create
  is_primary = permitted_params[:primary] if permitted_params[:primary].present?

  address = current_user.addresses.build permitted_params

  full_address = @full_address
  str_identity = '. detail:'

  if full_address.present? && full_address.include?(str_identity) && full_address.split(str_identity).last.strip.blank?
    address[:detail] = full_address.split(str_identity).first
  else
    address[:detail] = full_address
  end

  result = address.valid? && address.save
  if result
    update_primary(address.id) if is_primary
    render json: resource_as_json(address, DEFAULT_SERIALIZER, {}).merge(success: true, message: 'Success')
  else
    render json: { data: nil, success: false, message: address.errors.full_messages.to_sentence }
  end
end

#destroyObject



97
98
99
100
101
102
103
104
# File 'app/controllers/api/v5/user_addresses_controller.rb', line 97

def destroy
  address = DeliveryAddress.find(params[:id])
  if address.user == current_user && address.destroy
    render json: { data: nil, success: true, message: 'Address deleted successfully' }
  else
    render json: { data: nil, success: false, message: 'Sorry you are not authorized' }
  end
end

#indexObject



8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
# File 'app/controllers/api/v5/user_addresses_controller.rb', line 8

def index
  page = params.fetch(:page, {})
  kind = params.fetch(:kind, {})

  addresses = current_user.addresses
                          .where(is_saved: true)

  addresses = if kind.present? && kind == 'recent'
                addresses.order(updated_at: :desc)
                         .limit(10)
              else
                addresses.order(primary: :desc)
                         .order(name: :asc)
              end

  render json: ActiveModelSerializers::SerializableResource.new(
    addresses.page(page[:number].presence || 1).per(page[:size].presence || 10),
    {
      serialization_context: serialization_context,
      serializer: ActiveModel::Serializer::CollectionSerializer,
      adapter: :json_api,
      each_serializer: DEFAULT_SERIALIZER
    }
  ).as_json.merge(success: true, message: 'Success')
end

#showObject



62
63
64
65
66
67
68
69
# File 'app/controllers/api/v5/user_addresses_controller.rb', line 62

def show
  address = DeliveryAddress.find(params[:id])
  if address.user == current_user
    render json: resource_as_json(address, DEFAULT_SERIALIZER, {}).merge(success: true, message: 'Success')
  else
    render json: { data: nil, success: false, message: 'Sorry you are not authorized' }
  end
end

#updateObject



71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
# File 'app/controllers/api/v5/user_addresses_controller.rb', line 71

def update
  is_primary = permitted_params[:primary] if permitted_params[:primary].present?
  address = DeliveryAddress.find(params[:id])
  if address.user == current_user

    full_address = @full_address
    str_identity = '. detail:'

    if full_address.present? && full_address.include?(str_identity) && full_address.split(str_identity).last.strip.blank?
      delivery_address = permitted_params
      delivery_address[:detail] = full_address.split(str_identity).first
    else
      delivery_address = permitted_params
      delivery_address[:detail] = full_address
    end

    address.update(delivery_address)

    update_primary(address.id) if is_primary

    render json: resource_as_json(address, DEFAULT_SERIALIZER, {}).merge(success: true, message: 'Success')
  else
    render json: { data: nil, success: false, message: 'Sorry you are not authorized' }
  end
end

#update_primary(id) ⇒ Object



57
58
59
60
# File 'app/controllers/api/v5/user_addresses_controller.rb', line 57

def update_primary(id)
  address = current_user.addresses.where.not(id: id)
  address.update_all(primary: false)
end