Skip to content

Commit

Permalink
add: provide seeding for database population
Browse files Browse the repository at this point in the history
  • Loading branch information
snykk committed Feb 12, 2023
1 parent ebdfd8f commit 44d435c
Show file tree
Hide file tree
Showing 6 changed files with 118 additions and 2 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ A boilerplate for creating RESTful APIs in Go using Gin framework, and sqlx for

##### Prerequisites

- Go version 1.62 or higher
- Go version 1.17 or higher
- PostgreSQL version 9.1 or higher

To get up and running with the Go-REST-Boilerplate, follow these simple steps:
Expand Down
35 changes: 35 additions & 0 deletions cmd/seed/main.go
Original file line number Diff line number Diff line change
@@ -1 +1,36 @@
package main

import (
_ "github.com/lib/pq"
"github.com/sirupsen/logrus"
"github.com/snykk/go-rest-boilerplate/cmd/seed/seeders"
"github.com/snykk/go-rest-boilerplate/internal/config"
"github.com/snykk/go-rest-boilerplate/internal/constants"
"github.com/snykk/go-rest-boilerplate/internal/utils"
"github.com/snykk/go-rest-boilerplate/pkg/logger"
)

func init() {
if err := config.InitializeAppConfig(); err != nil {
logger.Fatal(err.Error(), logrus.Fields{constants.LoggerCategory: constants.LoggerCategoryConfig})
}
logger.Info("configuration loaded", logrus.Fields{constants.LoggerCategory: constants.LoggerCategoryConfig})
}

func main() {
db, err := utils.SetupDatabse()
if err != nil {
logger.Panic(err.Error(), logrus.Fields{constants.LoggerCategory: constants.LoggerCategorySeeder})
}
defer db.Close()

logger.Info("seeding...", logrus.Fields{constants.LoggerCategory: constants.LoggerCategorySeeder})

seeder := seeders.NewSeeder(db)
err = seeder.UserSeeder(seeders.UserData)
if err != nil {
logger.Panic(err.Error(), logrus.Fields{constants.LoggerCategory: constants.LoggerCategorySeeder})
}

logger.Info("seeding success!", logrus.Fields{constants.LoggerCategory: constants.LoggerCategorySeeder})
}
41 changes: 41 additions & 0 deletions cmd/seed/seeders/seeder.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package seeders

import (
"errors"
"time"

"github.com/jmoiron/sqlx"
"github.com/sirupsen/logrus"
"github.com/snykk/go-rest-boilerplate/internal/constants"
"github.com/snykk/go-rest-boilerplate/internal/datasources/records"
"github.com/snykk/go-rest-boilerplate/pkg/logger"
)

type Seeder interface {
UserSeeder(userData []records.Users) (err error)
}

type seeder struct {
db *sqlx.DB
}

func NewSeeder(db *sqlx.DB) Seeder {
return &seeder{db: db}
}

func (s *seeder) UserSeeder(userData []records.Users) (err error) {
if len(userData) == 0 {
return errors.New("users data is empty")
}

logger.Info("inserting users data...", logrus.Fields{constants.LoggerCategory: constants.LoggerCategorySeeder})
for _, user := range userData {
user.CreatedAt = time.Now().In(constants.GMT7)
if _, err = s.db.NamedQuery(`INSERT INTO users(id, username, email, password, active, role_id, created_at) VALUES (uuid_generate_v4(), :username, :email, :password, :active, :role_id, :created_at)`, user); err != nil {
return err
}
}
logger.Info("users data inserted successfully", logrus.Fields{constants.LoggerCategory: constants.LoggerCategorySeeder})

return
}
37 changes: 37 additions & 0 deletions cmd/seed/seeders/seeder.users.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
package seeders

import (
"github.com/sirupsen/logrus"
"github.com/snykk/go-rest-boilerplate/internal/constants"
"github.com/snykk/go-rest-boilerplate/internal/datasources/records"
"github.com/snykk/go-rest-boilerplate/pkg/helpers"
"github.com/snykk/go-rest-boilerplate/pkg/logger"
)

var pass string
var UserData []records.Users

func init() {
var err error
pass, err = helpers.GenerateHash("12345")
if err != nil {
logger.Panic(err.Error(), logrus.Fields{constants.LoggerCategory: constants.LoggerCategorySeeder})
}

UserData = []records.Users{
{
Username: "patrick star 7",
Email: "patrick@gmail.com",
Password: pass,
Active: true,
RoleId: 1,
},
{
Username: "john doe",
Email: "johndoe@gmail.com",
Password: pass,
Active: false,
RoleId: 2,
},
}
}
1 change: 1 addition & 0 deletions internal/constants/constant.logger.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,7 @@ const (
LoggerCategoryHTTP = "http"
LoggerCategoryMigration = "migration"
LoggerCategoryCORS = "cors"
LoggerCategorySeeder = "seeder"

LoggerFile = "file"
)
Expand Down
4 changes: 3 additions & 1 deletion makefile
Original file line number Diff line number Diff line change
Expand Up @@ -20,4 +20,6 @@ mig-down:
coverage:
go test -v ./...
go test -coverprofile=coverage.out ./...
go tool cover -html=coverage.out -o coverage.html
go tool cover -html=coverage.out -o coverage.html
seed:
go run cmd/seed/main.go

0 comments on commit 44d435c

Please sign in to comment.