diff --git a/lib/philomena/user_wipe.ex b/lib/philomena/user_wipe.ex index 1f9657e3..dcdd0c80 100644 --- a/lib/philomena/user_wipe.ex +++ b/lib/philomena/user_wipe.ex @@ -13,6 +13,7 @@ defmodule Philomena.UserWipe do alias Philomena.Users alias Philomena.Users.User alias Philomena.Repo + alias PhilomenaQuery.Batch import Ecto.Query def perform(user_id) do @@ -23,7 +24,8 @@ defmodule Philomena.UserWipe do for schema <- [Comment, Image, Post, Report, SourceChange, TagChange] do schema |> where(user_id: ^user.id) - |> in_batches(&Repo.update_all(&1, set: [ip: @wipe_ip, fingerprint: @wipe_fp])) + |> Batch.query_batches() + |> Enum.each(&Repo.update_all(&1, set: [ip: @wipe_ip, fingerprint: @wipe_fp])) end UserIp @@ -38,34 +40,4 @@ defmodule Philomena.UserWipe do |> where(id: ^user.id) |> Repo.update_all(set: [email: "deactivated#{random_hex}@example.com"]) end - - defp in_batches(queryable, mapper) do - queryable = order_by(queryable, asc: :id) - - ids = - queryable - |> select([q], q.id) - |> limit(1000) - |> Repo.all() - - in_batches(queryable, mapper, 1000, ids) - end - - defp in_batches(_queryable, _mapper, _batch_size, []), do: nil - - defp in_batches(queryable, mapper, batch_size, ids) do - queryable - |> where([q], q.id in ^ids) - |> exclude(:order_by) - |> mapper.() - - ids = - queryable - |> where([q], q.id > ^Enum.max(ids)) - |> select([q], q.id) - |> limit(^batch_size) - |> Repo.all() - - in_batches(queryable, mapper, batch_size, ids) - end end