Class: Jobs::FixOutOfSyncUserUploadedAvatar

Inherits:
Onceoff
  • Object
show all
Defined in:
app/jobs/onceoff/fix_out_of_sync_user_uploaded_avatar.rb

Instance Method Summary collapse

Methods inherited from Onceoff

enqueue_all, #execute, name_for, #running_key_name

Methods inherited from Base

acquire_cluster_concurrency_lock!, clear_cluster_concurrency_lock!, cluster_concurrency, cluster_concurrency_redis_key, delayed_perform, #error_context, #execute, get_cluster_concurrency, #last_db_duration, #log, #perform, #perform_immediately

Instance Method Details

#execute_onceoff(args) ⇒ Object



5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
# File 'app/jobs/onceoff/fix_out_of_sync_user_uploaded_avatar.rb', line 5

def execute_onceoff(args)
  DB.exec(<<~SQL)
  WITH X AS (
    SELECT
      u.id AS user_id,
      ua.gravatar_upload_id AS gravatar_upload_id
    FROM users u
    JOIN user_avatars ua ON ua.user_id = u.id
    LEFT JOIN uploads ON uploads.id = u.uploaded_avatar_id
    WHERE u.uploaded_avatar_id IS NOT NULL
    AND uploads.id IS NULL
  )
  UPDATE users
  SET uploaded_avatar_id = X.gravatar_upload_id
  FROM X
  WHERE users.id = X.user_id
  AND coalesce(uploaded_avatar_id,-1) <> coalesce(X.gravatar_upload_id,-1)
  SQL
end