mirror of
https://github.com/philomena-dev/philomena.git
synced 2024-11-24 12:37:58 +01:00
36 lines
1 KiB
Elixir
36 lines
1 KiB
Elixir
|
defmodule Mix.Tasks.ReindexAll do
|
||
|
use Mix.Task
|
||
|
|
||
|
alias Philomena.{Comments.Comment, Galleries.Gallery, Posts.Post, Images.Image, Reports.Report, Tags.Tag}
|
||
|
alias Philomena.{Comments, Galleries, Posts, Images, Tags}
|
||
|
alias Philomena.Polymorphic
|
||
|
alias Philomena.Repo
|
||
|
import Ecto.Query
|
||
|
|
||
|
@shortdoc "Destroys and recreates all Elasticsearch indices."
|
||
|
def run(_) do
|
||
|
if Mix.env == "prod" do
|
||
|
raise "do not run this task in production"
|
||
|
end
|
||
|
|
||
|
{:ok, _apps} = Application.ensure_all_started(:philomena)
|
||
|
|
||
|
for {context, schema} <- [{Images, Image}, {Comments, Comment}, {Galleries, Gallery}, {Tags, Tag}, {Posts, Post}] do
|
||
|
schema.delete_index!
|
||
|
schema.create_index!
|
||
|
|
||
|
schema.reindex(schema |> preload(^context.indexing_preloads()))
|
||
|
end
|
||
|
|
||
|
# Reports are a bit special
|
||
|
|
||
|
Report.delete_index!
|
||
|
Report.create_index!
|
||
|
|
||
|
Report
|
||
|
|> preload([:user, :admin])
|
||
|
|> Repo.all()
|
||
|
|> Polymorphic.load_polymorphic(reportable: [reportable_id: :reportable_type])
|
||
|
|> Enum.map(&Report.index_document/1)
|
||
|
end
|
||
|
end
|