openSUSE/open-build-service

View on GitHub
src/api/app/jobs/bs_request_clean_tasks_cache_job.rb

Summary

Maintainability
A
0 mins
Test Coverage
A
100%
class BsRequestCleanTasksCacheJob < ApplicationJob
  def perform(request_id)
    request = BsRequest.find(request_id)

    return unless request

    target_package_ids = request.bs_request_actions.with_target_package.pluck(:target_package_id)
    target_project_ids = request.bs_request_actions.with_target_project.pluck(:target_project_id)

    user_ids = Relationship.where(package_id: target_package_ids).or(
      Relationship.where(project_id: target_project_ids)
    ).groups.joins(:groups_users).pluck('groups_users.user_id')

    user_ids += Relationship.where(package_id: target_package_ids).or(
      Relationship.where(project_id: target_project_ids)
    ).users.pluck(:user_id)

    user_ids << User.find_by_login!(request.creator).id

    # rubocop:disable Rails/SkipsModelValidations
    # Skipping Model validations in this case is fine as we only want to touch
    # the associated user models to invalidate the cache keys
    Group.joins(:relationships).where(relationships: { package_id: target_package_ids }).or(
      Group.joins(:relationships).where(relationships: { project_id: target_project_ids })
    ).update_all(updated_at: Time.zone.now)
    User.where(id: user_ids).update_all(updated_at: Time.zone.now)
    # rubocop:enable Rails/SkipsModelValidations
  end
end