Sha256: 623d974b5d9fb24483592697d36825125ef4fb3f8f60fbab6e40c9f67fb12f50

Contents?: true

Size: 1.84 KB

Versions: 14

Compression:

Stored size: 1.84 KB

Contents

# frozen_string_literal: true

module Thredded
  class UserTopicReadState < ActiveRecord::Base
    include Thredded::UserTopicReadStateCommon
    belongs_to :user,
               class_name: Thredded.user_class_name,
               inverse_of: :thredded_topic_read_states
    belongs_to :postable,
               class_name: 'Thredded::Topic',
               inverse_of: :user_read_states
    belongs_to :messageboard,
               class_name: 'Thredded::Messageboard',
               inverse_of: :user_topic_read_states

    class << self
      def topic_class
        Thredded::Topic
      end

      def visible_posts_scope(user)
        Thredded::Post.moderation_state_visible_to_user(user)
      end

      # @param [Integer] user_id
      # @param [Thredded::Post] post
      # @param [Boolean] overwrite_newer
      def touch!(user_id, post, overwrite_newer: false)
        state = find_or_initialize_by(user_id: user_id, postable_id: post.postable_id)
        return if !overwrite_newer && state.read_at? && state.read_at >= post.created_at
        state.messageboard_id = post.messageboard_id
        state.read_at = post.created_at
        state.update!(state.calculate_post_counts)
      end

      # @param [Thredded.user_class] user
      # @param [Thredded::Post] post
      def read_on_first_post!(user, post)
        create!(user: user, postable_id: post.postable_id, messageboard_id: post.messageboard_id,
                read_at: post.created_at, read_posts_count: 1, unread_posts_count: 0)
      end

      protected

      # @param [Array<Thredded.user_class>] users
      # @return [Array<[id, unread_count, read_count]>]
      def calculate_post_counts_for_users(users)
        users
          .group_by { |user| visible_posts_scope(user) }
          .flat_map { |s, u| where(user_id: u.map(&:id)).merge(s).calculate_post_counts }
      end
    end
  end
end

Version data entries

14 entries across 14 versions & 1 rubygems

Version Path
thredded-0.16.14 app/models/thredded/user_topic_read_state.rb
thredded-0.16.13 app/models/thredded/user_topic_read_state.rb
thredded-0.16.12 app/models/thredded/user_topic_read_state.rb
thredded-0.16.11 app/models/thredded/user_topic_read_state.rb
thredded-0.16.10 app/models/thredded/user_topic_read_state.rb
thredded-0.16.9 app/models/thredded/user_topic_read_state.rb
thredded-0.16.8 app/models/thredded/user_topic_read_state.rb
thredded-0.16.7 app/models/thredded/user_topic_read_state.rb
thredded-0.16.6 app/models/thredded/user_topic_read_state.rb
thredded-0.16.5 app/models/thredded/user_topic_read_state.rb
thredded-0.16.4 app/models/thredded/user_topic_read_state.rb
thredded-0.16.3 app/models/thredded/user_topic_read_state.rb
thredded-0.16.1 app/models/thredded/user_topic_read_state.rb
thredded-0.16.0 app/models/thredded/user_topic_read_state.rb