Add client and user seeders with updated structure and data

This commit is contained in:
Habib Fatkhul Rohman 2025-10-15 21:12:30 +07:00
parent 7e80599a45
commit 1a965282cd
4 changed files with 183 additions and 34 deletions

View File

@ -0,0 +1,47 @@
[
{
"ID": "550e8400-e29b-41d4-a716-446655440001",
"Name": "PT Teknologi Maju Indonesia",
"PIC": "Budi Santoso",
"Phone": "+62811234567",
"Email": "admin@teknologimaju.co.id",
"Address": "Jl. Sudirman No. 123, Jakarta Pusat, DKI Jakarta 10220",
"LogoUrl": "https://example.com/logos/teknologi-maju.png"
},
{
"ID": "550e8400-e29b-41d4-a716-446655440002",
"Name": "CV Sumber Rejeki Abadi",
"PIC": "Siti Nurhaliza",
"Phone": "+62812345678",
"Email": "contact@sumberrejeki.com",
"Address": "Jl. Raya Bogor KM 25, Depok, Jawa Barat 16424",
"LogoUrl": "https://example.com/logos/sumber-rejeki.png"
},
{
"ID": "550e8400-e29b-41d4-a716-446655440003",
"Name": "PT Logistik Nusantara Prima",
"PIC": "Ahmad Fauzi",
"Phone": "+62813456789",
"Email": "info@logistiknusantara.co.id",
"Address": "Jl. Gatot Subroto No. 456, Bandung, Jawa Barat 40263",
"LogoUrl": "https://example.com/logos/logistik-nusantara.png"
},
{
"ID": "550e8400-e29b-41d4-a716-446655440004",
"Name": "UD Mandiri Sejahtera",
"PIC": "Dewi Kartika",
"Phone": "+62814567890",
"Email": "admin@mandirisejahtera.net",
"Address": "Jl. A. Yani No. 789, Surabaya, Jawa Timur 60235",
"LogoUrl": "https://example.com/logos/mandiri-sejahtera.png"
},
{
"ID": "550e8400-e29b-41d4-a716-446655440005",
"Name": "PT Global Supply Chain",
"PIC": "Rizki Pratama",
"Phone": "+62815678901",
"Email": "contact@globalsupplychain.id",
"Address": "Jl. HR Rasuna Said Blok X-5 Kav. 1-2, Jakarta Selatan, DKI Jakarta 12950",
"LogoUrl": "https://example.com/logos/global-supply.png"
}
]

View File

@ -1,20 +1,35 @@
[ [
{ {
"name": "admin", "name": "Super Admin",
"telp_number": "08123456789", "username": "superadmin",
"email": "admin1234@gmail.com", "password": "SuperAdminSecure123",
"password": "admin1234", "gender": "male",
"role": "admin", "address": "Jl. Merdeka No. 10, Jakarta",
"is_verified": true, "phone": "081234567890",
"tenant_name": "Tenant A" "email": "superadmin@example.com",
"photo_url": "https://example.com/photos/superadmin.jpg",
"client_name": "PT Teknologi Maju Indonesia"
}, },
{ {
"name": "user", "name": "Admin",
"telp_number": "08123456789", "username": "admin",
"email": "user1234@gmail.com", "password": "AdminSecure123",
"password": "user1234", "gender": "male",
"role": "user", "address": "Jl. Merdeka No. 10, Jakarta",
"is_verified": true, "phone": "081234567890",
"tenant_name": "Tenant B" "email": "admin@example.com",
"photo_url": "https://example.com/photos/admin.jpg",
"client_name": "PT Teknologi Maju Indonesia"
},
{
"name": "User",
"username": "user",
"password": "UserSecure123",
"gender": "male",
"address": "Jl. Merdeka No. 10, Jakarta",
"phone": "081234567890",
"email": "user@example.com",
"photo_url": "https://example.com/photos/user.jpg",
"client_name": "PT Teknologi Maju Indonesia"
} }
] ]

View File

@ -0,0 +1,73 @@
package seeds
import (
"encoding/json"
"errors"
"fmt"
"io"
"os"
"github.com/Caknoooo/go-gin-clean-starter/database/entities"
"gorm.io/gorm"
)
type ClientSeed struct {
ID string `json:"id"`
Name string `json:"name"`
PIC string `json:"pic"`
Phone string `json:"phone"`
Email string `json:"email"`
Address string `json:"address"`
LogoUrl string `json:"logo_url"`
}
func ListClientSeeder(db *gorm.DB) error {
jsonFile, err := os.Open("./database/seeders/json/clients.json")
if err != nil {
fmt.Println("Error opening file:", err)
return err
}
jsonData, err := io.ReadAll(jsonFile)
if err != nil {
fmt.Println("Error reading file:", err)
return err
}
var listClient []ClientSeed
if err := json.Unmarshal(jsonData, &listClient); err != nil {
fmt.Println("Error unmarshalling JSON:", err)
return err
}
hasTable := db.Migrator().HasTable(&entities.M_Client{})
if !hasTable {
fmt.Println("Creating table: M_Client")
if err := db.Migrator().CreateTable(&entities.M_Client{}); err != nil {
return err
}
}
for _, data := range listClient {
var client entities.M_Client
err := db.Where(&entities.M_Client{Name: data.Name}).First(&client).Error
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
fmt.Println("Error querying client:", err)
return err
}
if err := db.FirstOrCreate(&client, entities.M_Client{
ID: client.ID,
Name: data.Name,
PIC: data.PIC,
Phone: data.Phone,
Email: data.Email,
Address: data.Address,
LogoUrl: data.LogoUrl,
}).Error; err != nil {
fmt.Println("Error seeding client:", err)
return err
}
}
return nil
}

View File

@ -3,21 +3,25 @@ package seeds
import ( import (
"encoding/json" "encoding/json"
"errors" "errors"
"fmt"
"io" "io"
"os" "os"
"github.com/Caknoooo/go-gin-clean-starter/database/entities" "github.com/Caknoooo/go-gin-clean-starter/database/entities"
"github.com/Caknoooo/go-gin-clean-starter/pkg/utils"
"gorm.io/gorm" "gorm.io/gorm"
) )
type UserSeed struct { type UserSeed struct {
Name string `json:"name"` Name string `json:"name"`
TelpNumber string `json:"telp_number"` Username string `json:"username"`
Email string `json:"email"`
Password string `json:"password"` Password string `json:"password"`
Role string `json:"role"` Gender string `json:"gender"`
IsVerified bool `json:"is_verified"` Address string `json:"address"`
TenantName string `json:"tenant_name"` Phone string `json:"phone"`
Email string `json:"email"`
PhotoUrl string `json:"photo_url"`
ClientName string `json:"client_name"`
} }
func ListUserSeeder(db *gorm.DB) error { func ListUserSeeder(db *gorm.DB) error {
@ -36,35 +40,45 @@ func ListUserSeeder(db *gorm.DB) error {
return err return err
} }
hasTable := db.Migrator().HasTable(&entities.User{}) hasTable := db.Migrator().HasTable(&entities.M_User{})
if !hasTable { if !hasTable {
if err := db.Migrator().CreateTable(&entities.User{}); err != nil { if err := db.Migrator().CreateTable(&entities.M_User{}); err != nil {
return err return err
} }
} }
for _, data := range listUser { for _, data := range listUser {
var tenant entities.Tenant var client entities.M_Client
if err := db.Where("name = ?", data.TenantName).First(&tenant).Error; err != nil { fmt.Println("Finding client: ", data.ClientName)
return err // tenant tidak ditemukan if err := db.Where("name = ?", data.ClientName).First(&client).Error; err != nil {
fmt.Println("Client not found:", err)
return err // client tidak ditemukan
} }
var user entities.User var user entities.M_User
err := db.Where(&entities.User{Email: data.Email}).First(&user).Error err := db.Where(&entities.M_User{Email: data.Email}).First(&user).Error
if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) {
fmt.Println("Error querying user:", err)
return err return err
} }
isData := db.Find(&user, "email = ?", data.Email).RowsAffected isData := db.Find(&user, "email = ?", data.Email).RowsAffected
if isData == 0 { if isData == 0 {
newUser := entities.User{ fmt.Println("Seeding user:", data.Email)
Name: data.Name, passwordEncrypted, err := utils.HashPassword(data.Password)
TelpNumber: data.TelpNumber, if err != nil {
Email: data.Email, return err
Password: data.Password, }
Role: data.Role, newUser := entities.M_User{
IsVerified: data.IsVerified, Name: data.Name,
TenantID: tenant.ID, Username: data.Username,
Password: passwordEncrypted,
Gender: data.Gender,
Address: data.Address,
Phone: data.Phone,
Email: data.Email,
PhotoUrl: data.PhotoUrl,
ClientID: client.ID,
} }
if err := db.Create(&newUser).Error; err != nil { if err := db.Create(&newUser).Error; err != nil {
return err return err