aboutsummaryrefslogtreecommitdiff
path: root/seed
diff options
context:
space:
mode:
Diffstat (limited to 'seed')
-rw-r--r--seed/main.go35
-rw-r--r--seed/seeder/seeder.go47
-rw-r--r--seed/seeder/tern.go28
3 files changed, 110 insertions, 0 deletions
diff --git a/seed/main.go b/seed/main.go
new file mode 100644
index 0000000..a2cc084
--- /dev/null
+++ b/seed/main.go
@@ -0,0 +1,35 @@
+package main
+
+import (
+ "log"
+ "os"
+ "path/filepath"
+
+ "gitlab.com/alexkavon/newsstand/seed/seeder"
+ "gitlab.com/alexkavon/newsstand/src/conf"
+ "gitlab.com/alexkavon/newsstand/src/db"
+)
+
+func main() {
+ err := os.Setenv("NEWSSTAND_CONFIG_PATH", "./.seedrc.toml")
+ if err != nil {
+ log.Fatal(err)
+ }
+ config := conf.NewConf()
+ database := db.NewDb(config)
+ defer database.Close()
+ // load seeder
+ s := seeder.NewSeeder(database)
+ // migrate
+ migrations := filepath.Join(config.GetCwd(), "/migrations")
+ err = seeder.MigrateDatabase(database, migrations)
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ err = s.SeedUsers(10)
+ if err != nil {
+ log.Fatal(err)
+ }
+ os.Exit(0)
+}
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())
+}