Skip to content

Commit

Permalink
Merge pull request #31 from waler4ik/feature_move_model_to_separate_f…
Browse files Browse the repository at this point in the history
…older

Move model to internal/model folder
  • Loading branch information
waler4ik authored Jul 21, 2024
2 parents 6c32d01 + 53c4cdc commit 8274fed
Show file tree
Hide file tree
Showing 10 changed files with 118 additions and 72 deletions.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

53 changes: 30 additions & 23 deletions internal/commands/add/add.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,6 +15,7 @@ import (

"github.com/tangzero/inflector"
"github.com/waler4ik/kk/internal/parse"
"github.com/waler4ik/kk/internal/pathchecker"
"github.com/waler4ik/kk/internal/tmpl"
"github.com/waler4ik/kk/internal/walk"
"golang.org/x/mod/modfile"
Expand Down Expand Up @@ -83,8 +84,6 @@ func (a *Add) Execute(args []string) error {

prepareResourceNames(a.Args.Path, ti)

ti.RoutePath = a.Args.Path

routerType, err := parse.RouterType("internal/config/router.go")
if err != nil {
return fmt.Errorf("router type: %w", err)
Expand All @@ -93,14 +92,16 @@ func (a *Add) Execute(args []string) error {
ti.RouterType = routerType

templateDir := "templates/" + routerType + "/" + a.Args.ResourceType
templateDirController := templateDir + "/controller"

if err := walk.Walk(a.Content, templateDir+"/controller", filepath.Clean("internal/endpoints"+a.Args.Path), ti); err != nil {
if err := walk.Walk(a.Content, templateDirController, filepath.Clean("internal/endpoints"+a.Args.Path),
ti, pathchecker.New(ti.PathBase, templateDirController)); err != nil {
return err
}

templateDirInternal := templateDir + "/internal"
if _, err := fs.Stat(a.Content, templateDirInternal); err == nil {
if err := walk.Walk(a.Content, templateDirInternal, "internal", ti); err != nil {
if err := walk.Walk(a.Content, templateDirInternal, "internal", ti, pathchecker.New(ti.PathBase, templateDirInternal)); err != nil {
return err
}
} else if !errors.Is(err, fs.ErrNotExist) {
Expand All @@ -111,14 +112,17 @@ func (a *Add) Execute(args []string) error {
return err
}

if err := walk.Walk(a.Content, "templates/rest/internal/config", "internal/config", ti,
"templates/rest/internal/config/router.go.tmpl",
"templates/rest/internal/config/websockets.go.tmpl"); err != nil {
templateDirConfig := "templates/rest/internal/config"

if err := walk.Walk(a.Content, templateDirConfig, "internal/config", ti,
pathchecker.New(ti.PathBase, templateDirConfig, "templates/rest/internal/config/router.go.tmpl",
"templates/rest/internal/config/websockets.go.tmpl")); err != nil {
return err
}

if err := walk.Walk(a.Content, "templates/rest/internal/api", "internal/api", ti,
"templates/rest/internal/api/websockets.go.tmpl"); err != nil {
templateDirApi := "templates/rest/internal/api"
if err := walk.Walk(a.Content, templateDirApi, "internal/api", ti,
pathchecker.New(ti.PathBase, templateDirApi, "templates/rest/internal/api/websockets.go.tmpl")); err != nil {
return err
}
} else if a.Args.ResourceType == EnvSecretManager {
Expand All @@ -139,7 +143,7 @@ func (a *Add) Execute(args []string) error {

templateDir := "templates/" + a.Args.ResourceType

if err := walk.Walk(a.Content, templateDir, "./", pti); err != nil {
if err := walk.Walk(a.Content, templateDir, "./", pti, pathchecker.New("", templateDir)); err != nil {
return err
}

Expand All @@ -149,14 +153,14 @@ func (a *Add) Execute(args []string) error {
if err := collectProviderInfoForWiring("internal/provider", pti); err != nil {
return err
}

if err := walk.Walk(a.Content, "templates/rest/internal/api", "internal/api", pti,
"templates/rest/internal/api/provider.go.tmpl"); err != nil {
templateDirApi := "templates/rest/internal/api"
if err := walk.Walk(a.Content, templateDirApi, "internal/api", pti,
pathchecker.New("", templateDirApi, "templates/rest/internal/api/provider.go.tmpl")); err != nil {
return err
}

if err := walk.Walk(a.Content, "templates/rest/internal/config", "internal/config", pti,
"templates/rest/internal/config/provider.go.tmpl"); err != nil {
templateDirConfig := "templates/rest/internal/config"
if err := walk.Walk(a.Content, templateDirConfig, "internal/config", pti,
pathchecker.New("", templateDirConfig, "templates/rest/internal/config/provider.go.tmpl")); err != nil {
return err
}
} else if a.Args.ResourceType == Postgres || a.Args.ResourceType == RabbitMQ {
Expand All @@ -179,21 +183,23 @@ func (a *Add) Execute(args []string) error {

templateDir := "templates/" + a.Args.ResourceType

if err := walk.Walk(a.Content, templateDir, "./", pti); err != nil {
if err := walk.Walk(a.Content, templateDir, "./", pti, pathchecker.New("", templateDir)); err != nil {
return err
}

if err := collectProviderInfoForWiring("internal/provider", pti); err != nil {
return err
}

if err := walk.Walk(a.Content, "templates/rest/internal/api", "internal/api", pti,
"templates/rest/internal/api/provider.go.tmpl"); err != nil {
templateDirApi := "templates/rest/internal/api"
if err := walk.Walk(a.Content, templateDirApi, "internal/api", pti,
pathchecker.New("", templateDirApi, "templates/rest/internal/api/provider.go.tmpl")); err != nil {
return err
}

if err := walk.Walk(a.Content, "templates/rest/internal/config", "internal/config", pti,
"templates/rest/internal/config/provider.go.tmpl"); err != nil {
templateDirConfig := "templates/rest/internal/config"
if err := walk.Walk(a.Content, templateDirConfig, "internal/config", pti,
pathchecker.New("", templateDirConfig, "templates/rest/internal/config/provider.go.tmpl")); err != nil {
return err
}
} else {
Expand All @@ -215,8 +221,9 @@ func readModulePath() (string, error) {
}
}

func prepareResourceNames(resourcePath string, ti *ResourceTemplateInput) {
pathBase := path.Base(resourcePath)
func prepareResourceNames(routePath string, ti *ResourceTemplateInput) {
ti.RoutePath = routePath
pathBase := path.Base(routePath)
ti.PathBase = pathBase
pathBasePl := inflector.Pluralize(pathBase)
ti.ResourceNamePlCaps = cases.Title(language.English).String(pathBasePl)
Expand Down
6 changes: 4 additions & 2 deletions internal/commands/initial/initial.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import (
"path"
"strings"

"github.com/waler4ik/kk/internal/pathchecker"
"github.com/waler4ik/kk/internal/tmpl"
"github.com/waler4ik/kk/internal/walk"
)
Expand All @@ -31,14 +32,15 @@ type TemplateInput struct {
func (i *Init) Execute(args []string) error {
if i.Args.ProjectType == "rest" {
rootFolder := strings.ToLower(path.Base(i.Args.ModulePath))
if err := walk.Walk(i.Content, "templates/"+i.Args.ProjectType, rootFolder, &TemplateInput{
templateDir := "templates/" + i.Args.ProjectType
if err := walk.Walk(i.Content, templateDir, rootFolder, &TemplateInput{
Root: tmpl.Root{
ModulePath: i.Args.ModulePath,
Packages: []tmpl.Package{},
WSPackages: []tmpl.WSPackage{},
RouterType: i.RouterType,
},
}); err != nil {
}, pathchecker.New("", templateDir)); err != nil {
return err
}
} else {
Expand Down
39 changes: 39 additions & 0 deletions internal/pathchecker/pathchecker.go
Original file line number Diff line number Diff line change
@@ -0,0 +1,39 @@
package pathchecker

import "strings"

type PathChecker struct {
pathbase, templateFolder string
exclusivePaths []string
}

func New(pathBase, templateFolder string, exclusivePaths ...string) PathChecker {
return PathChecker{
pathbase: pathBase,
templateFolder: templateFolder,
exclusivePaths: exclusivePaths,
}
}

func (pc PathChecker) Skip(path string) bool {
if path == pc.templateFolder {
return true
}
if len(pc.exclusivePaths) > 0 && !contains(path, pc.exclusivePaths) {
return true
}
return false
}

func (pc PathChecker) Rename(path string) (renamed string) {
return strings.Replace(path, "{{PathBase}}", pc.pathbase, -1)
}

func contains(t string, s []string) bool {
for _, p := range s {
if p == t {
return true
}
}
return false
}
28 changes: 11 additions & 17 deletions internal/walk/walk.go
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,12 @@ import (
var doNotEditPrefix = []byte("// Code generated by kk; DO NOT EDIT.")
var maxPermissions fs.FileMode = 0750

func Walk(content embed.FS, templateDir, targetDir string, data any, exclusivePaths ...string) error {
type pathChecker interface {
Skip(path string) bool
Rename(path string) (renamed string)
}

func Walk(content embed.FS, templateDir, targetDir string, data any, pathCkeck pathChecker) error {
if err := os.MkdirAll(targetDir, maxPermissions); err != nil {
return fmt.Errorf("MkdirAll %s: %s", targetDir, err)
}
Expand All @@ -25,22 +30,20 @@ func Walk(content embed.FS, templateDir, targetDir string, data any, exclusivePa
return err
}

if path == templateDir {
if pathCkeck.Skip(path) {
return nil
}

if len(exclusivePaths) > 0 && !contains(path, exclusivePaths) {
return nil
}
renamedPath := pathCkeck.Rename(path)

if d.IsDir() {
if err := os.MkdirAll(replacePrefix(path, templateDir, targetDir), maxPermissions); err != nil {
return fmt.Errorf("MkdirAll %s: %s", path, err)
if err := os.MkdirAll(replacePrefix(renamedPath, templateDir, targetDir), maxPermissions); err != nil {
return fmt.Errorf("MkdirAll %s: %s", renamedPath, err)
}
} else if strings.HasSuffix(path, ".tmpl") {
tt := template.Must(template.ParseFS(content, path))
for _, t := range tt.Templates() {
filePath := filepath.Clean(strings.TrimSuffix(replacePrefix(path, templateDir, targetDir), ".tmpl"))
filePath := filepath.Clean(strings.TrimSuffix(replacePrefix(renamedPath, templateDir, targetDir), ".tmpl"))
if _, err := os.Stat(filePath); err == nil {
if currentFile, err := os.ReadFile(filePath); err != nil {
return fmt.Errorf("ReadFile %s: %s", filePath, err)
Expand Down Expand Up @@ -78,12 +81,3 @@ func Walk(content embed.FS, templateDir, targetDir string, data any, exclusivePa
func replacePrefix(path, oldPrefix, newPrefix string) string {
return strings.Replace(path, oldPrefix, newPrefix, 1)
}

func contains(t string, s []string) bool {
for _, p := range s {
if p == t {
return true
}
}
return false
}
Loading

0 comments on commit 8274fed

Please sign in to comment.