-class User < ActiveRecord::Base
- require 'xml/libxml'
-
- belongs_to :language, :foreign_key => 'locale'
-
- has_many :traces
- has_many :diary_entries, :order => 'created_at DESC'
- has_many :messages, :foreign_key => :to_user_id, :order => 'sent_on DESC'
- has_many :new_messages, :class_name => "Message", :foreign_key => :to_user_id, :conditions => {:message_read => false}, :order => 'sent_on DESC'
- has_many :sent_messages, :class_name => "Message", :foreign_key => :from_user_id, :order => 'sent_on DESC'
- has_many :friends, :include => :befriendee, :conditions => ["users.visible = ?", true]
- has_many :tokens, :class_name => "UserToken"
+# == Schema Information
+#
+# Table name: users
+#
+# email :string not null
+# id :bigint(8) not null, primary key
+# pass_crypt :string not null
+# creation_time :datetime not null
+# display_name :string default(""), not null
+# data_public :boolean default(FALSE), not null
+# description :text default(""), not null
+# home_lat :float
+# home_lon :float
+# home_zoom :integer default(3)
+# nearby :integer default(50)
+# pass_salt :string
+# email_valid :boolean default(FALSE), not null
+# new_email :string
+# creation_ip :string
+# languages :string
+# status :enum default("pending"), not null
+# terms_agreed :datetime
+# consider_pd :boolean default(FALSE), not null
+# auth_uid :string
+# preferred_editor :string
+# terms_seen :boolean default(FALSE), not null
+# description_format :enum default("markdown"), not null
+# changesets_count :integer default(0), not null
+# traces_count :integer default(0), not null
+# diary_entries_count :integer default(0), not null
+# image_use_gravatar :boolean default(FALSE), not null
+# auth_provider :string
+# home_tile :bigint(8)
+# tou_agreed :datetime
+#
+# Indexes
+#
+# users_auth_idx (auth_provider,auth_uid) UNIQUE
+# users_display_name_idx (display_name) UNIQUE
+# users_display_name_lower_idx (lower((display_name)::text))
+# users_email_idx (email) UNIQUE
+# users_email_lower_idx (lower((email)::text))
+# users_home_idx (home_tile)
+#
+
+class User < ApplicationRecord
+ require "digest"
+ include AASM
+
+ has_many :traces, -> { where(:visible => true) }
+ has_many :diary_entries, -> { order(:created_at => :desc) }, :inverse_of => :user
+ has_many :diary_comments, -> { order(:created_at => :desc) }, :inverse_of => :user
+ has_many :diary_entry_subscriptions, :class_name => "DiaryEntrySubscription"
+ has_many :diary_subscriptions, :through => :diary_entry_subscriptions, :source => :diary_entry
+ has_many :messages, -> { where(:to_user_visible => true).order(:sent_on => :desc).preload(:sender, :recipient) }, :foreign_key => :to_user_id
+ has_many :new_messages, -> { where(:to_user_visible => true, :message_read => false).order(:sent_on => :desc) }, :class_name => "Message", :foreign_key => :to_user_id
+ has_many :sent_messages, -> { where(:from_user_visible => true).order(:sent_on => :desc).preload(:sender, :recipient) }, :class_name => "Message", :foreign_key => :from_user_id
+ has_many :friendships, -> { joins(:befriendee).where(:users => { :status => %w[active confirmed] }) }
+ has_many :friends, :through => :friendships, :source => :befriendee
+ has_many :tokens, :class_name => "UserToken", :dependent => :destroy