Files
Dalan/app/api/v2/management/phones.rb
2026-08-13 19:56:46 +03:30

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