aboutsummaryrefslogtreecommitdiff
path: root/seed/seeder
diff options
context:
space:
mode:
Diffstat (limited to 'seed/seeder')
-rw-r--r--seed/seeder/seeder.go47
-rw-r--r--seed/seeder/tern.go28
2 files changed, 75 insertions, 0 deletions
diff --git a/seed/seeder/seeder.go b/seed/seeder/seeder.go
new file mode 100644
index 0000000..37dfe30
--- /dev/null
+++ b/seed/seeder/seeder.go
@@ -0,0 +1,47 @@
+package seeder
+
+import (
+ "context"
+ "log"
+
+ "github.com/go-faker/faker/v4"
+ "github.com/go-faker/faker/v4/pkg/options"
+ "github.com/volatiletech/sqlboiler/v4/boil"
+ "gitlab.com/alexkavon/newsstand/src/db"
+ "gitlab.com/alexkavon/newsstand/src/models"
+ "gitlab.com/alexkavon/newsstand/src/user"
+)
+
+type Seeder struct {
+ dbconn *db.Db
+}
+
+func beginSeed(dbconn *db.Db, insertFunc func(context.Context, boil.ContextExecutor, boil.Columns) error) error {
+ return insertFunc(context.Background(), dbconn.ToSqlDb(), boil.Infer())
+}
+
+func NewSeeder(dbconn *db.Db) *Seeder {
+ options.SetGenerateUniqueValues(true)
+ return &Seeder{dbconn}
+}
+
+func (s *Seeder) SeedUsers(num int) error {
+ user.InitHooks()
+ for i := 1; i <= num; i++ {
+ log.Printf("seeding=%d", i)
+ u := &models.User{}
+ u.Username = faker.Username()
+ u.Secret = faker.Password()
+
+ err := beginSeed(s.dbconn, u.Insert)
+ if err != nil {
+ return err
+ }
+ }
+ return nil
+}
+
+func (s *Seeder) SeedPosts(num int) error {
+ // query users, pick random, generate num posts
+ return nil
+}
diff --git a/seed/seeder/tern.go b/seed/seeder/tern.go
new file mode 100644
index 0000000..8eff9d5
--- /dev/null
+++ b/seed/seeder/tern.go
@@ -0,0 +1,28 @@
+package seeder
+
+import (
+ "context"
+ "os"
+
+ "github.com/jackc/tern/v2/migrate"
+ "gitlab.com/alexkavon/newsstand/src/db"
+)
+
+func MigrateDatabase(dbpool *db.Db, migrationspath string) error {
+ conn, err := dbpool.Conn().Acquire(context.Background())
+ if err != nil {
+ return err
+ }
+ m, err := migrate.NewMigrator(context.Background(), conn.Conn(), "public.schema_version")
+ if err != nil {
+ return err
+ }
+ // load migration files
+ err = m.LoadMigrations(os.DirFS(migrationspath))
+ if err != nil {
+ return err
+ }
+
+ // migrate!
+ return m.Migrate(context.Background())
+}