Add TenantID to User and RefreshToken entities, update migrations and seeders
This commit is contained in:
parent
86f51ce390
commit
630c2881c5
|
|
@ -9,9 +9,10 @@ import (
|
||||||
type RefreshToken struct {
|
type RefreshToken struct {
|
||||||
ID uuid.UUID `gorm:"type:uuid;primary_key;default:uuid_generate_v4()" json:"id"`
|
ID uuid.UUID `gorm:"type:uuid;primary_key;default:uuid_generate_v4()" json:"id"`
|
||||||
UserID uuid.UUID `gorm:"type:uuid;not null" json:"user_id"`
|
UserID uuid.UUID `gorm:"type:uuid;not null" json:"user_id"`
|
||||||
|
TenantID uuid.UUID `gorm:"type:uuid;not null" json:"tenant_id"`
|
||||||
Token string `gorm:"type:varchar(255);not null;uniqueIndex" json:"token"`
|
Token string `gorm:"type:varchar(255);not null;uniqueIndex" json:"token"`
|
||||||
ExpiresAt time.Time `gorm:"type:timestamp with time zone;not null" json:"expires_at"`
|
ExpiresAt time.Time `gorm:"type:timestamp with time zone;not null" json:"expires_at"`
|
||||||
User User `gorm:"foreignKey:UserID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-"`
|
User User `gorm:"foreignKey:UserID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-"`
|
||||||
|
Tenant Tenant `gorm:"foreignKey:TenantID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-"`
|
||||||
Timestamp
|
Timestamp
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -16,6 +16,9 @@ type User struct {
|
||||||
ImageUrl string `gorm:"type:varchar(255)" json:"image_url"`
|
ImageUrl string `gorm:"type:varchar(255)" json:"image_url"`
|
||||||
IsVerified bool `gorm:"default:false" json:"is_verified"`
|
IsVerified bool `gorm:"default:false" json:"is_verified"`
|
||||||
|
|
||||||
|
TenantID uuid.UUID `gorm:"type:uuid;null;index" json:"tenant_id"`
|
||||||
|
Tenant Tenant `gorm:"foreignKey:TenantID;constraint:OnUpdate:CASCADE,OnDelete:SET NULL;" json:"tenant"`
|
||||||
|
|
||||||
Timestamp
|
Timestamp
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -7,9 +7,9 @@ import (
|
||||||
|
|
||||||
func Migrate(db *gorm.DB) error {
|
func Migrate(db *gorm.DB) error {
|
||||||
if err := db.AutoMigrate(
|
if err := db.AutoMigrate(
|
||||||
|
&entities.Tenant{},
|
||||||
&entities.User{},
|
&entities.User{},
|
||||||
&entities.RefreshToken{},
|
&entities.RefreshToken{},
|
||||||
&entities.Tenant{},
|
|
||||||
); err != nil {
|
); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -7,8 +7,8 @@ import (
|
||||||
|
|
||||||
func Seeder(db *gorm.DB) error {
|
func Seeder(db *gorm.DB) error {
|
||||||
seeders := []func(*gorm.DB) error{
|
seeders := []func(*gorm.DB) error{
|
||||||
seeds.ListUserSeeder,
|
|
||||||
seeds.ListTenantSeeder,
|
seeds.ListTenantSeeder,
|
||||||
|
seeds.ListUserSeeder,
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, seeder := range seeders {
|
for _, seeder := range seeders {
|
||||||
|
|
|
||||||
|
|
@ -5,7 +5,8 @@
|
||||||
"email": "admin1234@gmail.com",
|
"email": "admin1234@gmail.com",
|
||||||
"password": "admin1234",
|
"password": "admin1234",
|
||||||
"role": "admin",
|
"role": "admin",
|
||||||
"is_verified": true
|
"is_verified": true,
|
||||||
|
"tenant_name": "Tenant A"
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
"name": "user",
|
"name": "user",
|
||||||
|
|
@ -13,6 +14,7 @@
|
||||||
"email": "user1234@gmail.com",
|
"email": "user1234@gmail.com",
|
||||||
"password": "user1234",
|
"password": "user1234",
|
||||||
"role": "user",
|
"role": "user",
|
||||||
"is_verified": true
|
"is_verified": true,
|
||||||
|
"tenant_name": "Tenant B"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
@ -10,6 +10,16 @@ import (
|
||||||
"gorm.io/gorm"
|
"gorm.io/gorm"
|
||||||
)
|
)
|
||||||
|
|
||||||
|
type UserSeed struct {
|
||||||
|
Name string `json:"name"`
|
||||||
|
TelpNumber string `json:"telp_number"`
|
||||||
|
Email string `json:"email"`
|
||||||
|
Password string `json:"password"`
|
||||||
|
Role string `json:"role"`
|
||||||
|
IsVerified bool `json:"is_verified"`
|
||||||
|
TenantName string `json:"tenant_name"`
|
||||||
|
}
|
||||||
|
|
||||||
func ListUserSeeder(db *gorm.DB) error {
|
func ListUserSeeder(db *gorm.DB) error {
|
||||||
jsonFile, err := os.Open("./database/seeders/json/users.json")
|
jsonFile, err := os.Open("./database/seeders/json/users.json")
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -21,7 +31,7 @@ func ListUserSeeder(db *gorm.DB) error {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
var listUser []entities.User
|
var listUser []UserSeed
|
||||||
if err := json.Unmarshal(jsonData, &listUser); err != nil {
|
if err := json.Unmarshal(jsonData, &listUser); err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
@ -34,6 +44,11 @@ func ListUserSeeder(db *gorm.DB) error {
|
||||||
}
|
}
|
||||||
|
|
||||||
for _, data := range listUser {
|
for _, data := range listUser {
|
||||||
|
var tenant entities.Tenant
|
||||||
|
if err := db.Where("name = ?", data.TenantName).First(&tenant).Error; err != nil {
|
||||||
|
return err // tenant tidak ditemukan
|
||||||
|
}
|
||||||
|
|
||||||
var user entities.User
|
var user entities.User
|
||||||
err := db.Where(&entities.User{Email: data.Email}).First(&user).Error
|
err := db.Where(&entities.User{Email: data.Email}).First(&user).Error
|
||||||
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
|
@ -42,7 +57,16 @@ func ListUserSeeder(db *gorm.DB) error {
|
||||||
|
|
||||||
isData := db.Find(&user, "email = ?", data.Email).RowsAffected
|
isData := db.Find(&user, "email = ?", data.Email).RowsAffected
|
||||||
if isData == 0 {
|
if isData == 0 {
|
||||||
if err := db.Create(&data).Error; err != nil {
|
newUser := entities.User{
|
||||||
|
Name: data.Name,
|
||||||
|
TelpNumber: data.TelpNumber,
|
||||||
|
Email: data.Email,
|
||||||
|
Password: data.Password,
|
||||||
|
Role: data.Role,
|
||||||
|
IsVerified: data.IsVerified,
|
||||||
|
TenantID: tenant.ID,
|
||||||
|
}
|
||||||
|
if err := db.Create(&newUser).Error; err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -50,3 +74,44 @@ func ListUserSeeder(db *gorm.DB) error {
|
||||||
|
|
||||||
return nil
|
return nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// func ListUserSeeder(db *gorm.DB) error {
|
||||||
|
// jsonFile, err := os.Open("./database/seeders/json/users.json")
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
|
||||||
|
// jsonData, err := io.ReadAll(jsonFile)
|
||||||
|
// if err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
|
||||||
|
// var listUser []entities.User
|
||||||
|
// if err := json.Unmarshal(jsonData, &listUser); err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
|
||||||
|
// hasTable := db.Migrator().HasTable(&entities.User{})
|
||||||
|
// if !hasTable {
|
||||||
|
// if err := db.Migrator().CreateTable(&entities.User{}); err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// for _, data := range listUser {
|
||||||
|
// var user entities.User
|
||||||
|
// err := db.Where(&entities.User{Email: data.Email}).First(&user).Error
|
||||||
|
// if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
|
||||||
|
// isData := db.Find(&user, "email = ?", data.Email).RowsAffected
|
||||||
|
// if isData == 0 {
|
||||||
|
// if err := db.Create(&data).Error; err != nil {
|
||||||
|
// return err
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
// }
|
||||||
|
|
||||||
|
// return nil
|
||||||
|
// }
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue