wpw-final/internal/biz/core/default.go
2022-12-02 20:40:23 +07:00

94 lines
2.1 KiB
Go

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
})
}