Skip to content
Snippets Groups Projects
user.rb 3.38 KiB
Newer Older
Arnaud Levy's avatar
Arnaud Levy committed
# == Schema Information
#
# Table name: users
#
Sébastien Gaya's avatar
Sébastien Gaya committed
#  id                            :uuid             not null, primary key
#  confirmation_sent_at          :datetime
pabois's avatar
pabois committed
#  confirmation_token            :string           indexed
Sébastien Gaya's avatar
Sébastien Gaya committed
#  confirmed_at                  :datetime
#  current_sign_in_at            :datetime
#  current_sign_in_ip            :string
#  direct_otp                    :string
#  direct_otp_sent_at            :datetime
pabois's avatar
pabois committed
#  email                         :string           default(""), not null, indexed => [university_id]
#  encrypted_otp_secret_key      :string           indexed
Sébastien Gaya's avatar
Sébastien Gaya committed
#  encrypted_otp_secret_key_iv   :string
#  encrypted_otp_secret_key_salt :string
#  encrypted_password            :string           default(""), not null
#  failed_attempts               :integer          default(0), not null
#  first_name                    :string
#  last_name                     :string
#  last_sign_in_at               :datetime
#  last_sign_in_ip               :string
#  locked_at                     :datetime
#  mobile_phone                  :string
pabois's avatar
pabois committed
#  picture_url                   :string
Sébastien Gaya's avatar
Sébastien Gaya committed
#  remember_created_at           :datetime
#  reset_password_sent_at        :datetime
pabois's avatar
pabois committed
#  reset_password_token          :string           indexed
Sébastien Gaya's avatar
Sébastien Gaya committed
#  role                          :integer          default("visitor")
#  second_factor_attempts_count  :integer          default(0)
#  session_token                 :string
#  sign_in_count                 :integer          default(0), not null
#  totp_timestamp                :datetime
#  unconfirmed_email             :string
pabois's avatar
pabois committed
#  unlock_token                  :string           indexed
Sébastien Gaya's avatar
Sébastien Gaya committed
#  created_at                    :datetime         not null
#  updated_at                    :datetime         not null
pabois's avatar
pabois committed
#  language_id                   :uuid             indexed
#  university_id                 :uuid             not null, indexed => [email], indexed
Arnaud Levy's avatar
Arnaud Levy committed
#
# Indexes
#
Sébastien Gaya's avatar
Sébastien Gaya committed
#  index_users_on_confirmation_token        (confirmation_token) UNIQUE
#  index_users_on_email_and_university_id   (email,university_id) UNIQUE
#  index_users_on_encrypted_otp_secret_key  (encrypted_otp_secret_key) UNIQUE
#  index_users_on_language_id               (language_id)
#  index_users_on_reset_password_token      (reset_password_token) UNIQUE
#  index_users_on_university_id             (university_id)
#  index_users_on_unlock_token              (unlock_token) UNIQUE
pabois's avatar
pabois committed
#  fk_rails_45f4f12508  (language_id => languages.id)
#  fk_rails_bd6f7212a9  (university_id => universities.id)
Arnaud Levy's avatar
Arnaud Levy committed
#
class User < ApplicationRecord
pabois's avatar
pabois committed
  include WithAvatar
Arnaud Levy's avatar
Arnaud Levy committed
  include WithUniversity
Sébastien Gaya's avatar
Sébastien Gaya committed
  include WithAuthentication
pabois's avatar
pabois committed
  include WithOmniauth
Sébastien Gaya's avatar
Sébastien Gaya committed
  include WithPerson
pabois's avatar
pabois committed
  include WithRoles
pabois's avatar
pabois committed
  include WithSyncBetweenUniversities
Sébastien Gaya's avatar
Sébastien Gaya committed

Arnaud Levy's avatar
Arnaud Levy committed
  belongs_to :language
Arnaud Levy's avatar
Arnaud Levy committed

pabois's avatar
pabois committed
  scope :ordered, -> { order(:last_name, :first_name) }
pabois's avatar
pabois committed
  scope :for_language, -> (language_id) { where(language_id: language_id) }
Sébastien Gaya's avatar
Sébastien Gaya committed
  scope :for_search_term, -> (term) {
    where("
      unaccent(concat(users.first_name, ' ', users.last_name)) ILIKE unaccent(:term) OR
      unaccent(concat(users.last_name, ' ', users.first_name)) ILIKE unaccent(:term) OR
      unaccent(users.first_name) ILIKE unaccent(:term) OR
      unaccent(users.last_name) ILIKE unaccent(:term) OR
      unaccent(users.email) ILIKE unaccent(:term) OR
      unaccent(users.mobile_phone) ILIKE unaccent(:term)
    ", term: "%#{sanitize_sql_like(term)}%")
  }
pabois's avatar
pabois committed

Arnaud Levy's avatar
Arnaud Levy committed
  def to_s
    "#{first_name} #{last_name}"
Arnaud Levy's avatar
Arnaud Levy committed
  end
Arnaud Levy's avatar
Arnaud Levy committed
end