Add client and user seeders with updated structure and data
This commit is contained in:
parent
7e80599a45
commit
1a965282cd
|
|
@ -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"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
|
@ -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"
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
|
|
|
||||||
|
|
@ -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
|
||||||
|
}
|
||||||
|
|
@ -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
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue