mirror of
https://github.com/philomena-dev/philomena.git
synced 2025-02-08 15:16:43 +01:00
Use PhilomenaQuery.Batch for UserWipe
This commit is contained in:
parent
bba88626f6
commit
ecd0cb8958
1 changed files with 3 additions and 31 deletions
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue