andela/eventx

View on GitHub
app/models/user.rb

Summary

Maintainability
A
0 mins
Test Coverage
class User < ActiveRecord::Base
  has_many :bookings
  has_many :user_tickets, through: :bookings
  has_many :events_attending, through: :bookings, source: "event"
  has_many :event_staffs
  has_one :manager_profile
  has_many :events, through: :manager_profile
  has_many :reviews, dependent: :destroy

  def self.from_omniauth(auth)
    return auth unless auth
    provider = auth["provider"]
    where(provider: provider, uid: auth["uid"]).first_or_create do |user|
      user.provider = provider
      user.uid = auth["uid"]
      user.profile_url = auth["info"][:image]
      user.first_name = auth["info"][:name]
      user.email = auth["info"][:email]
      user.save!
    end
  end

  def self.lookup_email(email)
    where(arel_table[:email].matches("%#{email}%")).limit(5).
      pluck(:email, :id).map do |mail, id|
      { "value" => mail, "data" => id }
    end
  end

  def event_manager?
    !manager_profile.nil?
  end

  def self.user_info(parameter)
    if parameter[:user_id].nil?
      { error: "Field is empty" }
    else
      user_role = user_role(parameter[:role])
      user_data = user_hash(parameter).merge(user_role: user_role)
      parameter.merge(user_data).symbolize_keys
    end
  end

  def user_tickets_for_event(event_id)
    bookings.where(
      event_id: event_id
    ).order(id: :desc).decorate
  end

  def generate_auth_token
    payload = { user_id: id, email: email }
    AuthToken.encode(payload)
  end

  def self.user_role(role)
    role.split("_").map(&:capitalize).join(" ")
  end

  def self.user_hash(params)
    user = User.where(id: params[:user_id]).pluck(:first_name, :email,
                                                  :profile_url).first
    { first_name: user[0], email: user[1], profile_url: user[2] }
  end

  def self.get_user_events(user_id)
    booking = Booking.where(user_id: user_id).pluck(:event_id)
    Event.find(booking)
  end
end