@@ -3,133 +3,89 @@ package file
33import (
44 "fmt"
55 "os"
6- "path"
76
87 "github.com/blackmarllboro/create-project-struct/pkg/version"
9- )
108
11- // TODO need to works on layouts.
9+ "github.com/blackmarllboro/create-project-struct/internal/pkg/temp/interfaces"
10+ )
1211
13- type File struct {}
12+ type File struct {
13+ temp interfaces.Template
14+ }
1415
15- func NewFile () * File {
16- return & File {}
16+ func NewFile (temp interfaces. Template ) * File {
17+ return & File {temp : temp }
1718}
1819
1920func (fl File ) createAndWriteFile (dir , content string ) error {
2021 file , err := os .Create (dir )
2122 if err != nil {
2223 return err
2324 }
25+
2426 defer func () {
2527 err = file .Close ()
2628 }()
29+
2730 if err != nil {
2831 return err
2932 }
3033
3134 if _ , err := file .WriteString (content ); err != nil {
32- return err
35+ return fmt . Errorf ( "failed to write file, err: %v" , err )
3336 }
3437
3538 return nil
3639}
3740
38- func (fl File ) GenerateMainFile (dir string ) error {
39- const content = `
40- package main
41-
42- import "fmt"
43-
44- func main() {
45- fmt.Println("Hello!")
46- }
47- `
48-
49- if err := fl .createAndWriteFile (dir , content ); err != nil {
50- return err
41+ func (fl File ) getFileContent (fileName , projectName , goVersion string ) string {
42+ switch fileName {
43+ case fmt .Sprintf ("%s.go" , projectName ):
44+ return fl .temp .GetMain ()
45+ case "golangci.yml" :
46+ return fl .temp .GetLintConfig ()
47+ case "Makefile" :
48+ return fl .temp .GetMakefile (projectName )
49+ case "go.mod" :
50+ return fl .temp .GetGoMod (projectName , goVersion )
51+ default :
52+ return ""
5153 }
52-
53- return nil
5454}
5555
56- func (fl File ) GenerateCfgFile (dir string ) error {
57- if err := fl .createAndWriteFile (dir + "/config.yaml" , "" ); err != nil {
58- return err
59- }
60-
61- return nil
62- }
63-
64- func (fl File ) generateGoModFile (dir string , isCurrentDir bool ) error {
56+ func (fl File ) GenerateFiles (isCurrentDir bool , projectName string ) error {
6557 goVersion , err := version .GoVersion ()
6658 if err != nil {
67- return err
59+ return fmt . Errorf ( "failed to get go version, err: %v" , err )
6860 }
6961
70- projectName := path .Base (dir )
71-
72- content := fmt .Sprintf ("module %s\n \n %s" , projectName , goVersion )
73-
74- var creatingFile string
75- if isCurrentDir {
76- creatingFile = "go.mod"
77- } else {
78- creatingFile = projectName + "/go.mod"
62+ mainGoFile := fmt .Sprintf ("%s.go" , projectName )
63+ fileNames := []string {
64+ mainGoFile ,
65+ "golangci.yml" ,
66+ "Makefile" ,
67+ "go.mod" ,
68+ "config.yml" ,
7969 }
8070
81- if err := fl .createAndWriteFile (creatingFile , content ); err != nil {
82- return err
83- }
84-
85- return nil
86- }
87-
88- func (fl File ) generateMakefile (projectName string , isCurrentDir bool ) error {
71+ dirPrefix := "./"
8972 if ! isCurrentDir {
90- projectName = path .Base (projectName )
91- }
92-
93- content := fmt .Sprintf (
94- "PROJECT_NAME = %s\n " +
95- "PROJECT_PATH = cmd/$(PROJECT_NAME).go\n \n " +
96- ".PHONY:run\n run:\n \t go run $(PROJECT_PATH)\n \n " +
97- ".PHONY:build\n build:\n \t go build -o bin/$(PROGRAM_NAME) $(PROJECT_PATH)\n \n " +
98- ".PHONY:test\n test:\n \t go test ./...\n \n " +
99- ".PHONY:lint\n lint:\n \t golangci-lint run" ,
100- projectName ,
101- )
102-
103- var creatingFile string
104- if isCurrentDir {
105- creatingFile = "Makefile"
106- } else {
107- creatingFile = projectName + "/Makefile"
108- }
109-
110- if err := fl .createAndWriteFile (creatingFile , content ); err != nil {
111- return err
112- }
113-
114- return nil
115- }
116-
117- func (fl File ) GenerateFilesInMainDir (projectName string , isCurrentDir bool ) error {
118- currentDir , err := os .Getwd ()
119- if err != nil {
120- return err
73+ dirPrefix = fmt .Sprintf ("%s/" , projectName )
12174 }
12275
123- if ! isCurrentDir {
124- currentDir += fmt .Sprintf ("/%s" , projectName )
125- }
76+ for _ , fileName := range fileNames {
77+ filePath := dirPrefix + fileName
12678
127- if err := fl .generateGoModFile (currentDir , isCurrentDir ); err != nil {
128- return err
129- }
79+ switch fileName {
80+ case mainGoFile :
81+ filePath = fmt .Sprintf ("%s/cmd/%s" , dirPrefix , fileName )
82+ case "config.yml" :
83+ filePath = fmt .Sprintf ("%s/config/%s" , dirPrefix , fileName )
84+ }
13085
131- if err := fl .generateMakefile (currentDir , isCurrentDir ); err != nil {
132- return err
86+ if err := fl .createAndWriteFile (filePath , fl .getFileContent (fileName , projectName , goVersion )); err != nil {
87+ return fmt .Errorf ("failed to write file data, err: %v" , err )
88+ }
13389 }
13490
13591 return nil
0 commit comments