jam-cloud/web/app/controllers/api_recurly_controller.rb

166 lines
5.3 KiB
Ruby

class ApiRecurlyController < ApiController
before_filter :api_signed_in_user
respond_to :json
# create Recurly account
def create_account
#logger.debug(params[:billing_info])
if current_user.recurly_code.nil?
@account = Recurly::Account.create(
account_code: current_user.id,
email: current_user.email,
first_name: current_user.first_name,
last_name: current_user.last_name,
address: {
city: current_user.city,
state: current_user.state,
country: current_user.country
}
)
else
@account = Recurly::Account.find(current_user.recurly_code)
end
if @account.errors.any?
response.status = 404
else
current_user.recurly_code = @account.account_code
current_user.save
@account.billing_info = params[:billing_info]
@account.billing_info.save
#logger.debug @account.to_json
end
render :json=>@account.to_json
rescue Recurly::Error, NoMethodError => e
render json: { :message => e.inspect, error: e }, :status => 404
end
def delete_account
@account = Recurly::Account.find(current_user.recurly_code)
if @account.present?
@account.destroy
end
render :json=>{}, :status=>200
rescue Recurly::Error, NoMethodError => e
render json: { message: ValidationMessages::RECURLY_ERROR, error: e}, :status => 404
end
# get Recurly account
def get_account
@account = Recurly::Account.find(current_user.recurly_code)
render :json=>@account.to_json
rescue Recurly::Error, NoMethodError => e
render json: { message: ValidationMessages::RECURLY_ERROR, error: e}, :status => 404
end
# update Recurly account
def update_account
safe_retrieve_account()
@account.first_name = current_user.first_name
@account.last_name = current_user.last_name
@account.email = current_user.email
@account.save
if @account.errors.any?
response.status = 404
else
current_user.recurly_code = @account.account_code
current_user.save
end
render :json=>@account.to_json
rescue Recurly::Error, NoMethodError => e
raise e
render json: { message: ValidationMessages::RECURLY_ERROR, error: e}, :status => 404
end
# get subscription
def get_subscription
safe_retrieve_account()
render :json=>@account.subscriptions.last.to_json
rescue Recurly::Error, NoMethodError => e
render json: { message: ValidationMessages::RECURLY_ACCOUNT_ERROR, error: e}, :status => 404
end
# create subscription
def create_subscription
end
# get Billing Information
def billing_info
if current_user.recurly_code.nil?
render json: { message: ValidationMessages::RECURLY_ACCOUNT_ERROR }, :status => 404 and return
else
@account = Recurly::Account.find(current_user.recurly_code)
#logger.debug @account
render json: @account.billing_info
end
rescue Recurly::Error, NoMethodError => e
render json: { message: ValidationMessages::RECURLY_ERROR, error: e}, :status => 404
end
# update Billing Information
def update_billing_info
if current_user.recurly_code.nil?
render json: { message: ValidationMessages::RECURLY_ACCOUNT_ERROR }, :status => 404 and return
else
if params[:first_name].blank? or params[:last_name].blank? or params[:number].blank? or params[:year].blank? or params[:month].blank? or params[:verification_value].blank?
render json: { message: ValidationMessages::RECURLY_PARAMETER_ERROR }, :status => 404 and return
end
@account = Recurly::Account.find(current_user.recurly_code)
@account.billing_info = params
@account.billing_info.save
if @account.errors.any?
response.status = :unprocessable_entity
end
render json: @account
end
rescue Recurly::Error, NoMethodError => e
render json: { message: ValidationMessages::RECURLY_ERROR, error: e}, :status => 404
end
def place_order
if current_user.recurly_code.nil?
render json: { message: ValidationMessages::RECURLY_ACCOUNT_ERROR }, :status => 404 and return
else
if params[:first_name].blank? or params[:last_name].blank? or params[:number].blank? or params[:year].blank? or params[:month].blank? or params[:verification_value].blank?
render json: { message: ValidationMessages::RECURLY_PARAMETER_ERROR }, :status => 404 and return
end
@account = Recurly::Account.find(current_user.recurly_code)
@account.billing_info = params
@account.billing_info.save
# create subscription.
if @account.errors.any?
response.status = :unprocessable_entity
end
render json: @account
end
rescue Recurly::Error, NoMethodError => e
render json: { message: ValidationMessages::RECURLY_ERROR, error: e}, :status => 404
end
private
def safe_retrieve_account
if current_user.recurly_code.nil?
@account = Recurly::Account.create(
account_code: current_user.id,
email: current_user.email,
first_name: current_user.first_name,
last_name: current_user.last_name,
address: {
city: current_user.city,
state: current_user.state,
country: current_user.country
}
)
else
@account = Recurly::Account.find(current_user.recurly_code)
end
end
end