Skip to content

Commit

Permalink
Merge pull request #60 from Caknoooo/task/refactor-seeding
Browse files Browse the repository at this point in the history
refactor: change seeding to be more structre
  • Loading branch information
Caknoooo authored Jan 20, 2024
2 parents a45a81e + 36d0812 commit 334f3ce
Show file tree
Hide file tree
Showing 3 changed files with 69 additions and 50 deletions.
18 changes: 18 additions & 0 deletions migrations/json/users.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
[
{
"name": "admin",
"telp_number": "08123456789",
"email": "admin1234@gmail.com",
"password": "admin1234",
"role": "admin",
"is_verified": true
},
{
"name": "user",
"telp_number": "08123456789",
"email": "user1234@gmail.com",
"password": "user1234",
"role": "user",
"is_verified": true
}
]
52 changes: 2 additions & 50 deletions migrations/seeder.go
Original file line number Diff line number Diff line change
@@ -1,62 +1,14 @@
package migrations

import (
"errors"

"github.com/Caknoooo/go-gin-clean-template/constants"
"github.com/Caknoooo/go-gin-clean-template/entity"
"github.com/Caknoooo/go-gin-clean-template/migrations/seeds"
"gorm.io/gorm"
)

func Seeder(db *gorm.DB) error {
if err := ListUserSeeder(db); err != nil {
if err := seeds.ListUserSeeder(db); err != nil {
return err
}

return nil
}

func ListUserSeeder(db *gorm.DB) error {
var listUser = []entity.User{
{
Name: "Admin",
TelpNumber: "081234567890",
Email: "admin@gmail.com",
Password: "admin123",
Role: constants.ENUM_ROLE_ADMIN,
IsVerified: true,
},
{
Name: "User",
TelpNumber: "081234567891",
Email: "user@gmail.com",
Password: "user123",
Role: constants.ENUM_ROLE_USER,
IsVerified: true,
},
}

hasTable := db.Migrator().HasTable(&entity.User{})
if !hasTable {
if err := db.Migrator().CreateTable(&entity.User{}); err != nil {
return err
}
}

for _, data := range listUser {
var user entity.User
err := db.Where(&entity.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
}
49 changes: 49 additions & 0 deletions migrations/seeds/user_seed.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
package seeds

import (
"encoding/json"
"errors"
"io"
"os"

"github.com/Caknoooo/go-gin-clean-template/entity"
"gorm.io/gorm"
)

func ListUserSeeder(db *gorm.DB) error {
jsonFile, err := os.Open("./migrations/json/users.json")
if err != nil {
return err
}

jsonData, _ := io.ReadAll(jsonFile)

var listUser []entity.User
if err := json.Unmarshal(jsonData, &listUser); err != nil {
return err
}

hasTable := db.Migrator().HasTable(&entity.User{})
if !hasTable {
if err := db.Migrator().CreateTable(&entity.User{}); err != nil {
return err
}
}

for _, data := range listUser {
var user entity.User
err := db.Where(&entity.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
}

0 comments on commit 334f3ce

Please sign in to comment.