@@ -3,131 +3,89 @@ package file
33import (
44 "fmt"
55 "os"
6- "path"
76
87 "github.com/blackmarllboro/create-project-struct/pkg/version"
8+
9+ "github.com/blackmarllboro/create-project-struct/internal/pkg/temp/interfaces"
910)
1011
11- type File struct {}
12+ type File struct {
13+ temp interfaces.Template
14+ }
1215
13- func NewFile () * File {
14- return & File {}
16+ func NewFile (temp interfaces. Template ) * File {
17+ return & File {temp : temp }
1518}
1619
1720func (fl File ) createAndWriteFile (dir , content string ) error {
1821 file , err := os .Create (dir )
1922 if err != nil {
2023 return err
2124 }
25+
2226 defer func () {
2327 err = file .Close ()
2428 }()
29+
2530 if err != nil {
2631 return err
2732 }
2833
2934 if _ , err := file .WriteString (content ); err != nil {
30- return err
31- }
32-
33- return nil
34- }
35-
36- func (fl File ) GenerateMainFile (dir string ) error {
37- const content = `
38- package main
39-
40- import "fmt"
41-
42- func main() {
43- fmt.Println("Hello!")
44- }
45- `
46-
47- if err := fl .createAndWriteFile (dir , content ); err != nil {
48- return err
35+ return fmt .Errorf ("failed to write file, err: %v" , err )
4936 }
5037
5138 return nil
5239}
5340
54- func (fl File ) GenerateCfgFile (dir string ) error {
55- if err := fl .createAndWriteFile (dir + "/config.yaml" , "" ); err != nil {
56- 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 ""
5753 }
58-
59- return nil
6054}
6155
62- func (fl File ) generateGoModFile ( dir string , isCurrentDir bool ) error {
56+ func (fl File ) GenerateFiles ( isCurrentDir bool , projectName string ) error {
6357 goVersion , err := version .GoVersion ()
6458 if err != nil {
65- return err
66- }
67-
68- projectName := path .Base (dir )
69-
70- content := fmt .Sprintf ("module %s\n \n %s" , projectName , goVersion )
71-
72- var creatingFile string
73- if isCurrentDir {
74- creatingFile = "go.mod"
75- } else {
76- creatingFile = projectName + "/go.mod"
59+ return fmt .Errorf ("failed to get go version, err: %v" , err )
7760 }
7861
79- if err := fl .createAndWriteFile (creatingFile , content ); err != nil {
80- return err
62+ mainGoFile := fmt .Sprintf ("%s.go" , projectName )
63+ fileNames := []string {
64+ mainGoFile ,
65+ "golangci.yml" ,
66+ "Makefile" ,
67+ "go.mod" ,
68+ "config.yml" ,
8169 }
8270
83- return nil
84- }
85-
86- func (fl File ) generateMakefile (projectName string , isCurrentDir bool ) error {
71+ dirPrefix := "./"
8772 if ! isCurrentDir {
88- projectName = path .Base (projectName )
89- }
90-
91- content := fmt .Sprintf (
92- "PROJECT_NAME = %s\n " +
93- "PROJECT_PATH = cmd/$(PROJECT_NAME).go\n \n " +
94- ".PHONY:run\n run:\n \t go run $(PROJECT_PATH)\n \n " +
95- ".PHONY:build\n build:\n \t go build -o bin/$(PROGRAM_NAME) $(PROJECT_PATH)\n \n " +
96- ".PHONY:test\n test:\n \t go test ./...\n \n " +
97- ".PHONY:lint\n lint:\n \t golangci-lint run" ,
98- projectName ,
99- )
100-
101- var creatingFile string
102- if isCurrentDir {
103- creatingFile = "Makefile"
104- } else {
105- creatingFile = projectName + "/Makefile"
106- }
107-
108- if err := fl .createAndWriteFile (creatingFile , content ); err != nil {
109- return err
110- }
111-
112- return nil
113- }
114-
115- func (fl File ) GenerateFilesInMainDir (projectName string , isCurrentDir bool ) error {
116- currentDir , err := os .Getwd ()
117- if err != nil {
118- return err
73+ dirPrefix = fmt .Sprintf ("%s/" , projectName )
11974 }
12075
121- if ! isCurrentDir {
122- currentDir += fmt .Sprintf ("/%s" , projectName )
123- }
76+ for _ , fileName := range fileNames {
77+ filePath := dirPrefix + fileName
12478
125- if err := fl .generateGoModFile (currentDir , isCurrentDir ); err != nil {
126- return err
127- }
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+ }
12885
129- if err := fl .generateMakefile (currentDir , isCurrentDir ); err != nil {
130- 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+ }
13189 }
13290
13391 return nil
0 commit comments