diff --git a/database/seeders/json/clients.json b/database/seeders/json/clients.json new file mode 100644 index 0000000..0265f0f --- /dev/null +++ b/database/seeders/json/clients.json @@ -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" + } +] diff --git a/database/seeders/json/users.json b/database/seeders/json/users.json index 0f133d6..afad1f1 100644 --- a/database/seeders/json/users.json +++ b/database/seeders/json/users.json @@ -1,20 +1,35 @@ [ { - "name": "admin", - "telp_number": "08123456789", - "email": "admin1234@gmail.com", - "password": "admin1234", - "role": "admin", - "is_verified": true, - "tenant_name": "Tenant A" + "name": "Super Admin", + "username": "superadmin", + "password": "SuperAdminSecure123", + "gender": "male", + "address": "Jl. Merdeka No. 10, Jakarta", + "phone": "081234567890", + "email": "superadmin@example.com", + "photo_url": "https://example.com/photos/superadmin.jpg", + "client_name": "PT Teknologi Maju Indonesia" }, { - "name": "user", - "telp_number": "08123456789", - "email": "user1234@gmail.com", - "password": "user1234", - "role": "user", - "is_verified": true, - "tenant_name": "Tenant B" + "name": "Admin", + "username": "admin", + "password": "AdminSecure123", + "gender": "male", + "address": "Jl. Merdeka No. 10, Jakarta", + "phone": "081234567890", + "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" } ] diff --git a/database/seeders/seeds/client_seed.go b/database/seeders/seeds/client_seed.go new file mode 100644 index 0000000..b017fee --- /dev/null +++ b/database/seeders/seeds/client_seed.go @@ -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 +} diff --git a/database/seeders/seeds/user_seed.go b/database/seeders/seeds/user_seed.go index 4e2db64..45d7d9a 100644 --- a/database/seeders/seeds/user_seed.go +++ b/database/seeders/seeds/user_seed.go @@ -3,21 +3,25 @@ package seeds import ( "encoding/json" "errors" + "fmt" "io" "os" "github.com/Caknoooo/go-gin-clean-starter/database/entities" + "github.com/Caknoooo/go-gin-clean-starter/pkg/utils" "gorm.io/gorm" ) type UserSeed struct { Name string `json:"name"` - TelpNumber string `json:"telp_number"` - Email string `json:"email"` + Username string `json:"username"` Password string `json:"password"` - Role string `json:"role"` - IsVerified bool `json:"is_verified"` - TenantName string `json:"tenant_name"` + Gender string `json:"gender"` + Address string `json:"address"` + Phone string `json:"phone"` + Email string `json:"email"` + PhotoUrl string `json:"photo_url"` + ClientName string `json:"client_name"` } func ListUserSeeder(db *gorm.DB) error { @@ -36,35 +40,45 @@ func ListUserSeeder(db *gorm.DB) error { return err } - hasTable := db.Migrator().HasTable(&entities.User{}) + hasTable := db.Migrator().HasTable(&entities.M_User{}) if !hasTable { - if err := db.Migrator().CreateTable(&entities.User{}); err != nil { + if err := db.Migrator().CreateTable(&entities.M_User{}); err != nil { return err } } 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 client entities.M_Client + fmt.Println("Finding client: ", data.ClientName) + 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 - err := db.Where(&entities.User{Email: data.Email}).First(&user).Error + var user entities.M_User + err := db.Where(&entities.M_User{Email: data.Email}).First(&user).Error if err != nil && !errors.Is(err, gorm.ErrRecordNotFound) { + fmt.Println("Error querying user:", err) return err } isData := db.Find(&user, "email = ?", data.Email).RowsAffected if isData == 0 { - newUser := entities.User{ - Name: data.Name, - TelpNumber: data.TelpNumber, - Email: data.Email, - Password: data.Password, - Role: data.Role, - IsVerified: data.IsVerified, - TenantID: tenant.ID, + fmt.Println("Seeding user:", data.Email) + passwordEncrypted, err := utils.HashPassword(data.Password) + if err != nil { + return err + } + newUser := entities.M_User{ + Name: data.Name, + 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 { return err