Add Tenant entity, migration, seeder, and JSON data for tenants

This commit is contained in:
Habib Fatkhul Rohman 2025-09-11 10:39:43 +07:00
parent 87d28fffee
commit 5a6b85ec18
5 changed files with 82 additions and 2 deletions

View File

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

View File

@ -9,6 +9,7 @@ func Migrate(db *gorm.DB) error {
if err := db.AutoMigrate(
&entities.User{},
&entities.RefreshToken{},
&entities.Tenant{},
); err != nil {
return err
}

View File

@ -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

View File

@ -0,0 +1,8 @@
[
{
"name": "Tenant A"
},
{
"name": "Tenant B"
}
]

View File

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