package coresvc import ( "fmt" "wpw-common/internal/system" "wpw-common/pkg/gen/biz/core/structs" "gorm.io/gorm" ) func (c *CoreService) migrateDefaultData() [][]any { mustNot := func(err error) { if err != nil { c.logger.Fatalw("must no error", "err", err) } } // user admin priUser1, pubUser1, err := c.getEd25519KeyPair() mustNot(err) var testUser []any for i := 0; i < 100; i++ { testUser = append(testUser, &structs.User{ Username: fmt.Sprintf("psw_user%d", i), DisplayName: fmt.Sprintf("The User %d", i), Roles: []*structs.Role{}, }) } var testWp []any for i := 0; i < 200; i++ { testWp = append(testWp, &structs.WajibPajak{ Profile: &structs.WajibPajakProfile{ // not validated. Npwp: fmt.Sprintf("%15d", i), DisplayName: fmt.Sprintf("PT. Wajib Pajak %d Tbk.", i), Address: fmt.Sprintf("Lorem Ipsum %d, Surabaya, East Java", i), }, Owners: []*structs.User{testUser[i/2].(*structs.User)}, }) } return [][]any{ // User append([]any{ &structs.User{ Username: "admin", Password: c.passwordHasher("admin512"), DisplayName: "The Admin", Roles: []*structs.Role{ {ID: 1, DisplayName: "admin", RoleType: structs.RoleType_SYSTEM}, {ID: 2, DisplayName: "operator", RoleType: structs.RoleType_SYSTEM}, }, PrivateKey: priUser1, PublicKey: pubUser1, }, }, testUser...), // // Wajib Pajak append([]any{ // &structs.WajibPajak{}, }, testWp...), } } func (c *CoreService) migrateSchemeAndData() { system.Default.DoOnce("core_v1_migrate", func() error { c.logger.Info("migrate scheme and data") err := c.db.Transaction(func(tx *gorm.DB) (err error) { for _, migKinds := range c.migrateDefaultData() { if len(migKinds) <= 0 { continue } if err = tx.AutoMigrate(migKinds[0]); err != nil { return } for _, mData := range migKinds { if err = tx.Create(mData).Error; err != nil { return } } } return }) // fail immediately if the migration fails if err != nil { c.logger.Fatalw("failed to migrate", "err", err) } return nil }) }