philomena-dev / philomena

Next-generation imageboard
GNU Affero General Public License v3.0
84 stars 29 forks source link

Approval Queue #161

Closed Meow closed 2 years ago

Meow commented 2 years ago

Migration instructions

  1. Take site offline
  2. Deploy as normal
  3. Run this
    Philomena.Elasticsearch.update_mapping!(Philomena.Images.Image)
    Philomena.Elasticsearch.update_mapping!(Philomena.Posts.Post)
    Philomena.Elasticsearch.update_mapping!(Philomena.Comments.Comment)
    Philomena.Elasticsearch.update_mapping!(Philomena.Reports.Report)
  4. Run this as well
    Philomena.Repo.insert(Philomena.Roles.Role.changeset(%Philomena.Roles.Role{name: "admin", resource_type: "Image"}, %{}), on_conflict: :nothing)
  5. Take site online
  6. Reindex images, comments, posts and reports
    
    alias Philomena.{Posts, Comments, Images, Reports, Reports.Report}
    alias Philomena.Elasticsearch
    alias Philomena.Polymorphic

mods = [ [Images, Images.Image], [Comments, Comments.Comment], [Posts, Posts.Post] ]

Enum.each(mods, fn [m, mod] -> IO.puts("Reindexing #{to_string(m)}")

entries = if m == Comments do mod |> where([c], not is_nil(c.image_id)) |> preload(^m.indexing_preloads()) else mod |> preload(^m.indexing_preloads()) end

Elasticsearch.reindex(entries, mod, batch_size: 100) end)

(Report |> preload([:user, :admin]) |> Repo.all() |> Polymorphic.load_polymorphic(reportable: [reportable_id: :reportable_type]) |> Enum.map(&Elasticsearch.index_document(&1, Report)))