Pro Seeding
Viewing latest docs.
Switch version: v3

Seeding

Seeding means populating the database with records. We do this in development to show what the web app looks like with data.

We do this in one script file: seeds.exs

seeds.exs
aliasPetalPro.Accounts.User
aliasPetalPro.Accounts.UserSeeder
aliasPetalPro.Accounts.UserToken
aliasPetalPro.Accounts.UserTOTP
aliasPetalPro.Files.File
aliasPetalPro.Files.FileSeeder
aliasPetalPro.Logs.Log
aliasPetalPro.Orgs.Invitation
aliasPetalPro.Orgs.Membership
aliasPetalPro.Orgs.Org
aliasPetalPro.Orgs.OrgSeeder
aliasPetalPro.Posts.Post
aliasPetalPro.Posts.PostSeeder

ifMix.env()==:devdo
PetalPro.Repo.delete_all(Post)
PetalPro.Repo.delete_all(File)
PetalPro.Repo.delete_all(Log)
PetalPro.Repo.delete_all(UserTOTP)
PetalPro.Repo.delete_all(Invitation)
PetalPro.Repo.delete_all(Membership)
PetalPro.Repo.delete_all(Org)
PetalPro.Repo.delete_all(UserToken)
PetalPro.Repo.delete_all(User)

  admin =UserSeeder.admin()

  normal_user =
UserSeeder.normal_user(%{
email:"[email protected]",
name:"Sarah Cunningham",
password:"password",
confirmed_at:Timex.to_naive_datetime(DateTime.utc_now())
})

UserSeeder.fake_subscription(normal_user)

  org =OrgSeeder.random_org(admin)
PetalPro.Orgs.create_invitation(org, %{email: normal_user.email})

UserSeeder.random_users(20)

FileSeeder.create_files(admin)
PostSeeder.create_posts(admin)
end

We use the faker library for randomizing data:

elixir
def random_user_attributes(attrs \\ %{}) do
  Enum.into(attrs, %{
    name: Faker.Person.En.first_name() <> " " <> Faker.Person.En.last_name(),
    email: unique_user_email()
  })
end

Seeds should be regularly updated with any new tables you create. This allows you to better test and develop your app.