Add Tenant entity, migration, seeder, and JSON data for tenants
This commit is contained in:
parent
87d28fffee
commit
5a6b85ec18
|
|
@ -0,0 +1,12 @@
|
|||
package entities
|
||||
|
||||
import (
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
type Tenant struct {
|
||||
ID uuid.UUID `gorm:"type:uuid;primary_key;default:uuid_generate_v4()" json:"id"`
|
||||
Name string `gorm:"type:varchar(100);not null" json:"name"`
|
||||
|
||||
Timestamp
|
||||
}
|
||||
|
|
@ -9,6 +9,7 @@ func Migrate(db *gorm.DB) error {
|
|||
if err := db.AutoMigrate(
|
||||
&entities.User{},
|
||||
&entities.RefreshToken{},
|
||||
&entities.Tenant{},
|
||||
); err != nil {
|
||||
return err
|
||||
}
|
||||
|
|
|
|||
|
|
@ -6,8 +6,15 @@ import (
|
|||
)
|
||||
|
||||
func Seeder(db *gorm.DB) error {
|
||||
if err := seeds.ListUserSeeder(db); err != nil {
|
||||
return err
|
||||
seeders := []func(*gorm.DB) error{
|
||||
seeds.ListUserSeeder,
|
||||
seeds.ListTenantSeeder,
|
||||
}
|
||||
|
||||
for _, seeder := range seeders {
|
||||
if err := seeder(db); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
|
|
|
|||
|
|
@ -0,0 +1,8 @@
|
|||
[
|
||||
{
|
||||
"name": "Tenant A"
|
||||
},
|
||||
{
|
||||
"name": "Tenant B"
|
||||
}
|
||||
]
|
||||
|
|
@ -0,0 +1,52 @@
|
|||
package seeds
|
||||
|
||||
import (
|
||||
"encoding/json"
|
||||
"errors"
|
||||
"io"
|
||||
"os"
|
||||
|
||||
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
|
||||
"gorm.io/gorm"
|
||||
)
|
||||
|
||||
func ListTenantSeeder(db *gorm.DB) error {
|
||||
jsonFile, err := os.Open("./database/seeders/json/tenants.json")
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
jsonData, err := io.ReadAll(jsonFile)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
var listTenant []entities.Tenant
|
||||
if err := json.Unmarshal(jsonData, &listTenant); err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
hasTable := db.Migrator().HasTable(&entities.Tenant{})
|
||||
if !hasTable {
|
||||
if err := db.Migrator().CreateTable(&entities.Tenant{}); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
|
||||
for _, data := range listTenant {
|
||||
var tenant entities.Tenant
|
||||
err := db.Where(&entities.Tenant{Name: data.Name}).First(&tenant).Error
|
||||
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||
return err
|
||||
}
|
||||
|
||||
isData := db.Find(&tenant, "name = ?", data.Name).RowsAffected
|
||||
if isData == 0 {
|
||||
if err := db.Create(&data).Error; err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Loading…
Reference in New Issue