|
@@ -13,6 +13,8 @@
|
|
|
# listable :boolean
|
|
|
# reviewed_at :datetime
|
|
|
# requested_review_at :datetime
|
|
|
+# last_status_at :datetime
|
|
|
+# last_trend_at :datetime
|
|
|
#
|
|
|
|
|
|
class Tag < ApplicationRecord
|
|
@@ -33,7 +35,8 @@ class Tag < ApplicationRecord
|
|
|
scope :unreviewed, -> { where(reviewed_at: nil) }
|
|
|
scope :pending_review, -> { unreviewed.where.not(requested_review_at: nil) }
|
|
|
scope :usable, -> { where(usable: [true, nil]) }
|
|
|
- scope :discoverable, -> { where(listable: [true, nil]).joins(:account_tag_stat).where(AccountTagStat.arel_table[:accounts_count].gt(0)).order(Arel.sql('account_tag_stats.accounts_count desc')) }
|
|
|
+ scope :listable, -> { where(listable: [true, nil]) }
|
|
|
+ scope :discoverable, -> { listable.joins(:account_tag_stat).where(AccountTagStat.arel_table[:accounts_count].gt(0)).order(Arel.sql('account_tag_stats.accounts_count desc')) }
|
|
|
scope :most_used, ->(account) { joins(:statuses).where(statuses: { account: account }).group(:id).order(Arel.sql('count(*) desc')) }
|
|
|
|
|
|
delegate :accounts_count,
|
|
@@ -44,6 +47,8 @@ class Tag < ApplicationRecord
|
|
|
|
|
|
after_save :save_account_tag_stat
|
|
|
|
|
|
+ update_index('tags#tag', :self) if Chewy.enabled?
|
|
|
+
|
|
|
def account_tag_stat
|
|
|
super || build_account_tag_stat
|
|
|
end
|
|
@@ -121,9 +126,10 @@ class Tag < ApplicationRecord
|
|
|
normalized_term = normalize(term.strip).mb_chars.downcase.to_s
|
|
|
pattern = sanitize_sql_like(normalized_term) + '%'
|
|
|
|
|
|
- Tag.where(arel_table[:name].lower.matches(pattern))
|
|
|
- .where(arel_table[:score].gt(0).or(arel_table[:name].lower.eq(normalized_term)))
|
|
|
- .order(Arel.sql('length(name) ASC, score DESC, name ASC'))
|
|
|
+ Tag.listable
|
|
|
+ .where(arel_table[:name].lower.matches(pattern))
|
|
|
+ .where(arel_table[:name].lower.eq(normalized_term).or(arel_table[:reviewed_at].not_eq(nil)))
|
|
|
+ .order(Arel.sql('length(name) ASC, name ASC'))
|
|
|
.limit(limit)
|
|
|
.offset(offset)
|
|
|
end
|