package db import ( "gorm.io/gorm" "rul.sh/vaulterm/server/lib" "rul.sh/vaulterm/server/models" ) type SeedFn func(*gorm.DB) error var seeders = []SeedFn{ seedUsers, } func seedUsers(tx *gorm.DB) error { var userCount int64 if res := tx.Model(&models.User{}).Count(&userCount); res.Error != nil { return res.Error } // skip seeder if users already exist if userCount > 0 { return nil } testPasswd, err := lib.HashPassword("123456") if err != nil { return err } teams := []*models.Team{ { Name: "My Team", Icon: "☘️", }, } if res := tx.Create(&teams); res.Error != nil { return res.Error } userList := []*models.User{ { Name: "Admin", Username: "admin", Password: testPasswd, Email: "admin@mail.com", Role: models.UserRoleAdmin, }, { Name: "John Doe", Username: "user", Password: testPasswd, Email: "user@mail.com", }, { Name: "Mary Doe", Username: "user2", Password: testPasswd, Email: "user2@mail.com", }, } if res := tx.Create(&userList); res.Error != nil { return res.Error } teamMembers := []models.TeamMembers{ {TeamID: teams[0].ID, UserID: userList[0].ID, Role: models.TeamRoleOwner}, {TeamID: teams[0].ID, UserID: userList[1].ID, Role: models.TeamRoleAdmin}, {TeamID: teams[0].ID, UserID: userList[2].ID, Role: models.TeamRoleMember}, } if res := tx.Create(&teamMembers); res.Error != nil { return res.Error } return nil } func runSeeders(db *gorm.DB) { db.Transaction(func(tx *gorm.DB) error { for _, seed := range seeders { if err := seed(tx); err != nil { return err } } return nil }) }