summaryrefslogtreecommitdiff
path: root/app/services/users/update_assigned_open_issue_count_service.rb
blob: 2ed05853b2fa8c32f64632b65a9674286313154c (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
# frozen_string_literal: true

module Users
  # Service class for calculating and caching the number of assigned open issues for a user.
  class UpdateAssignedOpenIssueCountService
    attr_accessor :target_user

    def initialize(target_user:)
      @target_user = target_user

      raise ArgumentError, "Please provide a target user" unless target_user.is_a?(User)
    end

    def execute
      value = calculate_count
      Rails.cache.write(cache_key, value, expires_in: User::COUNT_CACHE_VALIDITY_PERIOD)

      ServiceResponse.success(payload: { count: value })
    rescue StandardError => e
      ServiceResponse.error(message: e.message)
    end

    private

    def cache_key
      ['users', target_user.id, 'assigned_open_issues_count']
    end

    def calculate_count
      IssuesFinder.new(target_user, assignee_id: target_user.id, state: 'opened', non_archived: true).execute.count
    end
  end
end