diff --git a/database/entities/refresh_token_entity.go b/database/entities/refresh_token_entity.go index d39effa..a41df38 100644 --- a/database/entities/refresh_token_entity.go +++ b/database/entities/refresh_token_entity.go @@ -9,9 +9,10 @@ import ( type RefreshToken struct { 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"` + TenantID uuid.UUID `gorm:"type:uuid;not null" json:"tenant_id"` 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"` User User `gorm:"foreignKey:UserID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-"` - + Tenant Tenant `gorm:"foreignKey:TenantID;constraint:OnUpdate:CASCADE,OnDelete:CASCADE;" json:"-"` Timestamp } diff --git a/database/entities/user_entity.go b/database/entities/user_entity.go index 98d9ffb..d3f4316 100644 --- a/database/entities/user_entity.go +++ b/database/entities/user_entity.go @@ -16,6 +16,9 @@ type User struct { ImageUrl string `gorm:"type:varchar(255)" json:"image_url"` 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 } diff --git a/database/migration.go b/database/migration.go index c7b8a5c..3daa90b 100644 --- a/database/migration.go +++ b/database/migration.go @@ -7,9 +7,9 @@ import ( func Migrate(db *gorm.DB) error { if err := db.AutoMigrate( + &entities.Tenant{}, &entities.User{}, &entities.RefreshToken{}, - &entities.Tenant{}, ); err != nil { return err } diff --git a/database/seeder.go b/database/seeder.go index d2e7ece..df07d39 100644 --- a/database/seeder.go +++ b/database/seeder.go @@ -7,8 +7,8 @@ import ( func Seeder(db *gorm.DB) error { seeders := []func(*gorm.DB) error{ - seeds.ListUserSeeder, seeds.ListTenantSeeder, + seeds.ListUserSeeder, } for _, seeder := range seeders { diff --git a/database/seeders/json/users.json b/database/seeders/json/users.json index 0dbec63..0f133d6 100644 --- a/database/seeders/json/users.json +++ b/database/seeders/json/users.json @@ -5,7 +5,8 @@ "email": "admin1234@gmail.com", "password": "admin1234", "role": "admin", - "is_verified": true + "is_verified": true, + "tenant_name": "Tenant A" }, { "name": "user", @@ -13,6 +14,7 @@ "email": "user1234@gmail.com", "password": "user1234", "role": "user", - "is_verified": true + "is_verified": true, + "tenant_name": "Tenant B" } -] \ No newline at end of file +] diff --git a/database/seeders/seeds/user_seed.go b/database/seeders/seeds/user_seed.go index a6f78db..4e2db64 100644 --- a/database/seeders/seeds/user_seed.go +++ b/database/seeders/seeds/user_seed.go @@ -10,6 +10,16 @@ import ( "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 { jsonFile, err := os.Open("./database/seeders/json/users.json") if err != nil { @@ -21,7 +31,7 @@ func ListUserSeeder(db *gorm.DB) error { return err } - var listUser []entities.User + var listUser []UserSeed if err := json.Unmarshal(jsonData, &listUser); err != nil { return err } @@ -34,6 +44,11 @@ func ListUserSeeder(db *gorm.DB) error { } 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 err := db.Where(&entities.User{Email: data.Email}).First(&user).Error 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 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 } } @@ -50,3 +74,44 @@ func ListUserSeeder(db *gorm.DB) error { 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 +// }