Skip to content
Snippets Groups Projects
user.rb 2.74 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
#  confirmation_token            :string
#  confirmed_at                  :datetime
#  current_sign_in_at            :datetime
#  current_sign_in_ip            :string
#  direct_otp                    :string
#  direct_otp_sent_at            :datetime
#  email                         :string           default(""), not null
#  encrypted_otp_secret_key      :string
#  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
#  remember_created_at           :datetime
#  reset_password_sent_at        :datetime
#  reset_password_token          :string
#  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
#  unlock_token                  :string
#  created_at                    :datetime         not null
#  updated_at                    :datetime         not null
#  language_id                   :uuid
#  university_id                 :uuid             not null
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
Arnaud Levy's avatar
Arnaud Levy committed
#  fk_rails_...  (language_id => languages.id)
#  fk_rails_...  (university_id => universities.id)
Arnaud Levy's avatar
Arnaud Levy committed
#
class User < ApplicationRecord
pabois's avatar
pabois committed
  has_one_attached_deletable :picture  # In this order, "resize avatar" callback will be fired after the others.
Sébastien Gaya's avatar
Sébastien Gaya committed
  include WithAuthentication
pabois's avatar
pabois committed
  include WithRoles
pabois's avatar
pabois committed
  include WithSyncBetweenUniversities
Sébastien Gaya's avatar
Sébastien Gaya committed

  belongs_to :university
Arnaud Levy's avatar
Arnaud Levy committed
  belongs_to :language
Sébastien Gaya's avatar
Sébastien Gaya committed
  has_one :person, class_name: 'University::Person', dependent: :nullify
Arnaud Levy's avatar
Arnaud Levy committed

pabois's avatar
pabois committed
  scope :ordered, -> { order(:last_name, :first_name) }

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