online-order/command/generateCrud/generate_crud.go
2023-11-17 23:50:29 +03:30

201 lines
4.1 KiB
Go

package main
import (
"fmt"
"github.com/ettle/strcase"
"io/ioutil"
"os"
"strings"
)
func main() {
name := "order"
createSchemaEnt(name)
createDomain(name)
createEntity(name)
createHandler(name)
createRepository(name)
createUsecase(name)
createRouter(name)
}
func createSchemaEnt(name string) {
fileName := "../../ent/schema/" + name + ".go"
file, err := os.Create(fileName)
if err != nil {
fmt.Println("error in create file on schema:", err)
return
}
defer file.Close()
replaced := replace(getFile("schema.text"), name)
_, err = file.WriteString(replaced)
if err != nil {
fmt.Println("error in write file content on schema:", err)
return
}
fmt.Printf("%s file created.\n", fileName)
}
func createRouter(name string) {
fileName := "../../api/handlers/" + name + "s/router.go"
os.Mkdir("../../api/handlers/"+name+"s", os.ModePerm)
file, err := os.Create(fileName)
if err != nil {
fmt.Println("error in create file on route:", err)
return
}
defer file.Close()
replaced := replace(getFile("router.text"), name)
_, err = file.WriteString(replaced)
if err != nil {
fmt.Println("error in write file content on route:", err)
return
}
fmt.Printf("%s file created.\n", fileName)
}
func createUsecase(name string) {
fileName := "../../usecase/" + name + "/service.go"
os.Mkdir("../../usecase/"+name, os.ModePerm)
file, err := os.Create(fileName)
if err != nil {
fmt.Println("error in create file on usecase:", err)
return
}
defer file.Close()
replaced := replace(getFile("usecase.text"), name)
_, err = file.WriteString(replaced)
if err != nil {
fmt.Println("error in write file content on usecase:", err)
return
}
fmt.Printf("%s file created.\n", fileName)
}
func createRepository(name string) {
fileName := "../../repository/" + name + "/" + name + ".go"
os.Mkdir("../../repository/"+name, os.ModePerm)
file, err := os.Create(fileName)
if err != nil {
fmt.Println("error in create file on repository:", err)
return
}
defer file.Close()
replaced := replace(getFile("repository.text"), name)
_, err = file.WriteString(replaced)
if err != nil {
fmt.Println("error in write file content on repository:", err)
return
}
fmt.Printf("%s file created.\n", fileName)
}
func createHandler(name string) {
fileName := "../../api/handlers/" + name + "s/" + name + ".go"
os.Mkdir("../../api/handlers/"+name+"s", os.ModePerm)
file, err := os.Create(fileName)
if err != nil {
fmt.Println("error in create file on handlers:", err)
return
}
defer file.Close()
replaced := replace(getFile("handler.text"), name)
_, err = file.WriteString(replaced)
if err != nil {
fmt.Println("error in write file content on handlers:", err)
return
}
fmt.Printf("%s file created.\n", fileName)
}
func createEntity(name string) {
fileName := "../../entity/" + name + ".go"
file, err := os.Create(fileName)
if err != nil {
fmt.Println("error in create file on entity:", err)
return
}
defer file.Close()
replaced := replace(getFile("entity.text"), name)
_, err = file.WriteString(replaced)
if err != nil {
fmt.Println("error in write file content on entity:", err)
return
}
fmt.Printf("%s file created.\n", fileName)
}
func createDomain(name string) {
fileName := "../../domain/" + name + ".go"
file, err := os.Create(fileName)
if err != nil {
fmt.Println("error in create file on domain:", err)
return
}
defer file.Close()
replaced := replace(getFile("domain.text"), name)
_, err = file.WriteString(replaced)
if err != nil {
fmt.Println("error in write file content on domain:", err)
return
}
fmt.Printf("%s file created.\n", fileName)
}
func getFile(path string) string {
file, err := os.Open(path)
if err != nil {
fmt.Println("error in open file:", err)
return ""
}
defer file.Close()
// خواندن محتوای فایل
content, err := ioutil.ReadAll(file)
if err != nil {
fmt.Println("error in read file:", err)
return ""
}
// تبدیل محتوا به رشته
return string(content)
}
func replace(c string, name string) string {
c = strings.ReplaceAll(c, "{name}", name)
pascalCaseName := strcase.ToPascal(name)
return strings.ReplaceAll(c, "{Name}", pascalCaseName)
}