# frozen_string_literal: true class UserTestBookmarkSerializer < UserBookmarkBaseSerializer def title fancy_title end def fancy_title @fancy_title ||= user.username end def cooked user.user_profile&.bio_cooked end def bookmarkable_user @bookmarkable_user ||= user end def bookmarkable_url "#{Discourse.base_url}/u/#{user.username}" end def excerpt return nil unless cooked @excerpt ||= PrettyText.excerpt(cooked, 300, keep_emoji_images: true) end private def user object.bookmarkable end end class UserTestBookmarkable < BaseBookmarkable def self.model User end def self.serializer UserTestBookmarkSerializer end def self.preload_associations [:topic_users, :tags, { posts: :user }] end def self.list_query(user, guardian) user .bookmarks .joins( "INNER JOIN users ON users.id = bookmarks.bookmarkable_id AND bookmarks.bookmarkable_type = 'User'", ) .where(bookmarkable_type: "User") end def self.search_query(bookmarks, query, ts_query, &bookmarkable_search) bookmarks.where("users.username ILIKE ?", query) end def self.reminder_handler(bookmark) # noop end def self.reminder_conditions(bookmark) bookmark.bookmarkable.present? end def self.can_see?(guardian, bookmark) true end end def register_test_bookmarkable(klass = UserTestBookmarkable) DiscoursePluginRegistry.register_bookmarkable( RegisteredBookmarkable.new(klass), stub(enabled?: true), ) end