Pro Seeding

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.

Last updated 7 months ago