diff --git a/database/entities/tenant_entity.go b/database/entities/tenant_entity.go new file mode 100644 index 0000000..60bd0af --- /dev/null +++ b/database/entities/tenant_entity.go @@ -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 +} diff --git a/database/migration.go b/database/migration.go index 874f4b8..c7b8a5c 100644 --- a/database/migration.go +++ b/database/migration.go @@ -9,6 +9,7 @@ func Migrate(db *gorm.DB) error { if err := db.AutoMigrate( &entities.User{}, &entities.RefreshToken{}, + &entities.Tenant{}, ); err != nil { return err } diff --git a/database/seeder.go b/database/seeder.go index 12e0b13..d2e7ece 100644 --- a/database/seeder.go +++ b/database/seeder.go @@ -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 diff --git a/database/seeders/json/tenants.json b/database/seeders/json/tenants.json new file mode 100644 index 0000000..1d7c215 --- /dev/null +++ b/database/seeders/json/tenants.json @@ -0,0 +1,8 @@ +[ + { + "name": "Tenant A" + }, + { + "name": "Tenant B" + } +] diff --git a/database/seeders/seeds/tenant_seed.go b/database/seeders/seeds/tenant_seed.go new file mode 100644 index 0000000..dc57a38 --- /dev/null +++ b/database/seeders/seeds/tenant_seed.go @@ -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 +}