75 lines
2.6 KiB
Ruby
75 lines
2.6 KiB
Ruby
# frozen_string_literal: true
|
|
|
|
module API::V2
|
|
module Management
|
|
class Phones < Grape::API
|
|
helpers do
|
|
def validate_phone!(phone_number)
|
|
error!('management.phone.invalid_num', 400) unless Phone.valid?(phone_number)
|
|
error!('management.phone.number_exist', 400) if Phone.verified.find_by_number(phone_number)
|
|
end
|
|
end
|
|
|
|
desc 'Phones related routes'
|
|
resource :phones do
|
|
|
|
desc 'Get user phone numbers' do
|
|
@settings[:scope] = :read_phones
|
|
success API::V2::Management::Entities::Phone
|
|
end
|
|
params do
|
|
requires :uid, type: String, desc: 'User uid', allow_blank: false
|
|
end
|
|
post '/get' do
|
|
user = User.find_by(uid: params[:uid])
|
|
error!('user.doesnt_exist', 422) unless user
|
|
|
|
present user.phones, with: API::V2::Management::Entities::Phone
|
|
end
|
|
|
|
desc 'Create phone number for user' do
|
|
@settings[:scope] = :write_phones
|
|
success API::V2::Management::Entities::Phone
|
|
end
|
|
params do
|
|
requires :uid, type: String, desc: 'User uid', allow_blank: false
|
|
requires :number, type: String, desc: 'User phone number', allow_blank: false
|
|
end
|
|
post do
|
|
user = User.find_by(uid: params[:uid])
|
|
error!('user.doesnt_exist', 422) unless user
|
|
|
|
phone_number = Phone.international(params[:number])
|
|
validate_phone!(phone_number)
|
|
|
|
error!('management.phone.exists', 400) if user.phones.find_by_number(phone_number)
|
|
|
|
phone = user.phones.create(number: params[:number], validated_at: Time.now)
|
|
error!(phone.errors.full_messages, 422) if phone.errors.any?
|
|
|
|
present phone, with: API::V2::Management::Entities::Phone
|
|
end
|
|
|
|
desc 'Delete phone number for user' do
|
|
@settings[:scope] = :write_phones
|
|
success API::V2::Management::Entities::Phone
|
|
end
|
|
params do
|
|
requires :uid, type: String, desc: 'User uid', allow_blank: false
|
|
requires :number, type: String, desc: 'User phone number', allow_blank: false
|
|
end
|
|
post '/delete' do
|
|
user = User.find_by(uid: params[:uid])
|
|
error!('user.doesnt_exist', 422) unless user
|
|
|
|
phone_number = Phone.international(params[:number])
|
|
phone = user.phones.find_by_number(phone_number) if phone_number.present?
|
|
error!('management.phone.doesnt_exists', 422) unless phone
|
|
|
|
present phone.destroy, with: API::V2::Management::Entities::Phone
|
|
end
|
|
end
|
|
end
|
|
end
|
|
end
|