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(
|
if err := db.AutoMigrate(
|
||||||
&entities.User{},
|
&entities.User{},
|
||||||
&entities.RefreshToken{},
|
&entities.RefreshToken{},
|
||||||
|
&entities.Tenant{},
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -6,9 +6,16 @@ import (
|
||||||
)
|
)
|
||||||
|
|
||||||
func Seeder(db *gorm.DB) error {
|
func Seeder(db *gorm.DB) error {
|
||||||
if err := seeds.ListUserSeeder(db); err != nil {
|
seeders := []func(*gorm.DB) error{
|
||||||
|
seeds.ListUserSeeder,
|
||||||
|
seeds.ListTenantSeeder,
|
||||||
|
}
|
||||||
|
|
||||||
|
for _, seeder := range seeders {
|
||||||
|
if err := seeder(db); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return nil
|
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