Skip to content

Commit

Permalink
[generator] add option use gorm if using SQL
Browse files Browse the repository at this point in the history
  • Loading branch information
agungdwiprasetyo committed Jan 22, 2021
1 parent 5f5fd2c commit 5f5d307
Show file tree
Hide file tree
Showing 4 changed files with 50 additions and 48 deletions.
2 changes: 1 addition & 1 deletion candihelper/const.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ import (

const (
// Version of this library
Version = "v1.3.3"
Version = "v1.3.4"
// TimeZoneAsia constanta
TimeZoneAsia = "Asia/Jakarta"
// TokenClaimKey const
Expand Down
36 changes: 8 additions & 28 deletions cmd/candi/main.go
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import (
"flag"
"fmt"
"io/ioutil"
"log"
"os"
"path/filepath"
"sort"
Expand Down Expand Up @@ -35,29 +36,14 @@ func main() {
}

b, err := ioutil.ReadFile(baseDir + "candi.json")
if err == nil {
json.Unmarshal(b, &srvConfig)
for i := range srvConfig.Modules {
srvConfig.Modules[i].Skip = true
}
modConfigs = append(modConfigs, srvConfig.Modules...)
} else {
files, err := ioutil.ReadDir(baseDir + "internal/modules")
if err != nil {
panic(err)
}
for _, f := range files {
if f.IsDir() {
modConfigs = append(modConfigs, moduleConfig{
ModuleName: f.Name(), Skip: true,
})
}
}
if serviceNameFlag == "" {
pwd, _ := os.Getwd()
headerConfig.ServiceName = filepath.Base(pwd)
}
if err != nil {
log.Fatal("ERROR: cannot find candi.json file")
}
json.Unmarshal(b, &srvConfig)
for i := range srvConfig.Modules {
srvConfig.Modules[i].Skip = true
}
modConfigs = append(modConfigs, srvConfig.Modules...)
}

sort.Slice(modConfigs, func(i, j int) bool {
Expand Down Expand Up @@ -268,12 +254,6 @@ func main() {
}},
}

if srvConfig.SQLDeps {
baseDirectoryFile.Childs = append(baseDirectoryFile.Childs, FileStructure{
FromTemplate: true, DataSource: srvConfig, Source: cmdMainTemplate, FileName: "main.go",
})
}

internalServiceStructure.Childs = append(internalServiceStructure.Childs, moduleStructure)
apiStructure.Skip = true
apiProtoStructure.Skip, apiGraphQLStructure.Skip = true, true
Expand Down
57 changes: 38 additions & 19 deletions cmd/candi/template_repository.go
Original file line number Diff line number Diff line change
Expand Up @@ -37,13 +37,15 @@ import (
{{clean $module.ModuleName}}repo "{{$.PackagePrefix}}/internal/modules/{{cleanPathModule $module.ModuleName}}/repository"
{{- end }}
"{{.LibraryName}}/tracer"
"{{.LibraryName}}/tracer"` +
`{{if .SQLUseGORM}}
"gorm.io/driver/{{.SQLDriver}}"
"gorm.io/gorm"{{end}}` + `
)
// RepoSQL uow
type RepoSQL struct {
readDB, writeDB *sql.DB
tx *sql.Tx
readDB, writeDB *{{if .SQLUseGORM}}gorm{{else}}sql{{end}}.DB` + "{{if not .SQLUseGORM}}\n tx *sql.Tx{{end}}" + `
// register all repository from modules
{{- range $module := .Modules}}
Expand All @@ -57,7 +59,22 @@ var (
// setSharedRepoSQL set the global singleton "RepoSQL" implementation
func setSharedRepoSQL(readDB, writeDB *sql.DB) {
globalRepoSQL = NewRepositorySQL(readDB, writeDB, nil)
{{if .SQLUseGORM}}gormRead, err := gorm.Open({{.SQLDriver}}.New({{.SQLDriver}}.Config{
Conn: readDB,
}), &gorm.Config{SkipDefaultTransaction: true})
if err != nil {
panic(err)
}
gormWrite, err := gorm.Open({{.SQLDriver}}.New({{.SQLDriver}}.Config{
Conn: writeDB,
}), &gorm.Config{})
if err != nil {
panic(err)
}{{end}}
globalRepoSQL = NewRepositorySQL({{if .SQLUseGORM}}gormRead, gormWrite{{else}}readDB, writeDB, nil{{end}})
}
// GetSharedRepoSQL returns the global singleton "RepoSQL" implementation
Expand All @@ -66,13 +83,14 @@ func GetSharedRepoSQL() *RepoSQL {
}
// NewRepositorySQL constructor
func NewRepositorySQL(readDB, writeDB *sql.DB, tx *sql.Tx) *RepoSQL {
func NewRepositorySQL(readDB, writeDB *{{if .SQLUseGORM}}gorm{{else}}sql{{end}}.DB{{if not .SQLUseGORM}}, tx *sql.Tx{{end}}) *RepoSQL {
return &RepoSQL{
readDB: readDB, writeDB: writeDB, tx: tx,
readDB: readDB, writeDB: writeDB,{{if not .SQLUseGORM}} tx: tx,{{end}}
{{- range $module := .Modules}}
{{clean (upper $module.ModuleName)}}Repo: {{clean $module.ModuleName}}repo.New{{clean (upper $module.ModuleName)}}RepoSQL(readDB, writeDB, tx),
{{if not .SQLDeps}}// {{end}}{{clean (upper $module.ModuleName)}}Repo: ` +
"{{clean $module.ModuleName}}repo.New{{clean (upper $module.ModuleName)}}RepoSQL(readDB, writeDB{{if not .SQLUseGORM}}, tx{{end}})," + `
{{- end }}
}
}
Expand All @@ -83,13 +101,13 @@ func (r *RepoSQL) WithTransaction(ctx context.Context, txFunc func(ctx context.C
defer trace.Finish()
ctx = trace.Context()
tx, errInit := r.writeDB.Begin()
if errInit != nil {
return errInit
tx{{if not .SQLUseGORM}}, err{{end}} := r.writeDB.Begin()` + "\n{{if .SQLUseGORM}} err = tx.Error{{end}}" + `
if err != nil {
return err
}
// reinit new repository in different memory address with tx value
manager := NewRepositorySQL(r.readDB, r.writeDB, tx)
manager := NewRepositorySQL(r.readDB, r.writeDB{{if not .SQLUseGORM}}, tx{{end}})
defer manager.free()
defer func() {
Expand Down Expand Up @@ -165,7 +183,7 @@ func setSharedRepoMongo(readDB, writeDB *mongo.Database) {
readDB: readDB, writeDB: writeDB,
{{- range $module := .Modules}}
{{clean (upper $module.ModuleName)}}Repo: {{clean $module.ModuleName}}repo.New{{clean (upper $module.ModuleName)}}RepoMongo(readDB, writeDB),
{{if not .MongoDeps}}// {{end}}{{clean (upper $module.ModuleName)}}Repo: {{clean $module.ModuleName}}repo.New{{clean (upper $module.ModuleName)}}RepoMongo(readDB, writeDB),
{{- end }}
}
}
Expand Down Expand Up @@ -227,21 +245,22 @@ func (r *{{clean .ModuleName}}RepoMongo) FindHello(ctx context.Context) (string,
package repository
import (
"context"
"database/sql"
"context"` + `{{if not .SQLUseGORM}}
"database/sql"{{end}}` + `
"{{.LibraryName}}/tracer"
"{{.LibraryName}}/tracer"` +
`{{if .SQLUseGORM}}
"gorm.io/gorm"{{end}}` + `
)
type {{clean .ModuleName}}RepoSQL struct {
readDB, writeDB *sql.DB
tx *sql.Tx
readDB, writeDB *{{if .SQLUseGORM}}gorm{{else}}sql{{end}}.DB` + "{{if not .SQLUseGORM}}\n tx *sql.Tx{{end}}" + `
}
// New{{clean (upper .ModuleName)}}RepoSQL mongo repo constructor
func New{{clean (upper .ModuleName)}}RepoSQL(readDB, writeDB *sql.DB, tx *sql.Tx) {{clean (upper .ModuleName)}}Repository {
func New{{clean (upper .ModuleName)}}RepoSQL(readDB, writeDB *{{if .SQLUseGORM}}gorm{{else}}sql{{end}}.DB{{if not .SQLUseGORM}}, tx *sql.Tx{{end}}) {{clean (upper .ModuleName)}}Repository {
return &{{clean .ModuleName}}RepoSQL{
readDB, writeDB, tx,
readDB, writeDB,{{if not .SQLUseGORM}} tx,{{end}}
}
}
Expand Down
3 changes: 3 additions & 0 deletions cmd/candi/utils.go
Original file line number Diff line number Diff line change
Expand Up @@ -208,6 +208,9 @@ constructConfig:
}

func parseSharedRepository(data serviceConfig) (repos []FileStructure) {
for i := range data.Modules {
data.Modules[i].config = data.config
}
repos = append(repos, []FileStructure{
{FromTemplate: true, DataSource: data, Source: templateRepository, FileName: "repository.go"},
{FromTemplate: true, DataSource: data, Source: templateRepositoryUOWSQL, FileName: "repository_sql.go"},
Expand Down

0 comments on commit 5f5d307

Please sign in to comment.