philomena/priv/repo/seeds.exs
2019-12-03 23:14:56 -05:00

67 lines
No EOL
1.8 KiB
Elixir

# Script for populating the database. You can run it as:
#
# mix run priv/repo/seeds.exs
#
# Inside the script, you can read and write to any of your
# repositories directly:
#
# Philomena.Repo.insert!(%Philomena.SomeSchema{})
#
# We recommend using the bang functions (`insert!`, `update!`
# and so on) as they will fail if something goes wrong.
alias Philomena.{Repo, Comments.Comment, Filters.Filter, Forums.Forum, Galleries.Gallery, Posts.Post, Images.Image, Reports.Report, Tags.Tag, Users.User}
alias Philomena.Tags
import Ecto.Query
IO.puts "---- Creating Elasticsearch indices"
for model <- [Image, Comment, Gallery, Tag, Post, Report] do # Report
model.delete_index!
model.create_index!
end
resources =
"priv/repo/seeds.json"
|> File.read!()
|> Jason.decode!()
IO.puts "---- Generating rating tags"
for tag_name <- resources["rating_tags"] do
%Tag{category: "rating"}
|> Tag.creation_changeset(%{name: tag_name})
|> Repo.insert(on_conflict: :nothing)
end
IO.puts "---- Generating system filters"
for filter_def <- resources["system_filters"] do
spoilered_tag_list = Enum.join(filter_def["spoilered"], ",")
hidden_tag_list = Enum.join(filter_def["hidden"], ",")
%Filter{system: true}
|> Filter.changeset(%{
name: filter_def["name"],
description: filter_def["description"],
spoilered_tag_list: spoilered_tag_list,
hidden_tag_list: hidden_tag_list
})
|> Repo.insert(on_conflict: :nothing)
end
IO.puts "---- Generating forums"
for forum_def <- resources["forums"] do
%Forum{}
|> Forum.changeset(forum_def)
|> Repo.insert(on_conflict: :nothing)
end
IO.puts "---- Generating users"
for user_def <- resources["users"] do
%User{}
|> User.creation_changeset(user_def)
|> Repo.insert(on_conflict: :nothing)
end
IO.puts "---- Indexing content"
Tag.reindex(Tag |> preload(^Tags.indexing_preloads()))
IO.puts "---- Done."