mirror of
https://github.com/opbnq-q/nto-cli.git
synced 2025-12-06 17:10:34 +07:00
feat: new parser & generator
This commit is contained in:
@@ -2,18 +2,18 @@ package generation
|
||||
|
||||
import (
|
||||
"log"
|
||||
"nto_cli/entities"
|
||||
"nto_cli/model"
|
||||
"nto_cli/utils"
|
||||
"os"
|
||||
"path/filepath"
|
||||
"strings"
|
||||
)
|
||||
|
||||
func Generate(structName string, fields []entities.Field) {
|
||||
mkPath := filepath.Join(utils.FindFrontendPath(), strings.ToLower(structName))
|
||||
func Generate(model *model.Model) {
|
||||
mkPath := filepath.Join(utils.FindFrontendPath(), strings.ToLower(model.Name))
|
||||
if err := os.Mkdir(mkPath, 0755); err != nil {
|
||||
log.Fatalf("Failed to mkdir for model: %s", err)
|
||||
}
|
||||
GenerateService(structName, mkPath)
|
||||
GenerateScheme(structName, fields, mkPath)
|
||||
GenerateService(model, mkPath)
|
||||
GenerateScheme(model, mkPath)
|
||||
}
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"log"
|
||||
"nto_cli/entities"
|
||||
"nto_cli/model"
|
||||
"nto_cli/utils"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -28,20 +28,20 @@ type TemplateData struct {
|
||||
StructName string
|
||||
LowerName string
|
||||
GolangServicesPath string
|
||||
Fields []entities.Field
|
||||
Fields []model.Field
|
||||
Dependencies []Dependency
|
||||
}
|
||||
|
||||
func GenerateScheme(structName string, fields []entities.Field, mkPath string) {
|
||||
func GenerateScheme(model *model.Model, mkPath string) {
|
||||
data := TemplateData{
|
||||
StructName: structName,
|
||||
LowerName: strings.ToLower(structName),
|
||||
StructName: model.Name,
|
||||
LowerName: strings.ToLower(model.Name),
|
||||
GolangServicesPath: GolangServicesPath,
|
||||
Fields: fields,
|
||||
Dependencies: processDependencies(fields),
|
||||
Fields: model.Fields,
|
||||
Dependencies: processDependencies(model.Fields),
|
||||
}
|
||||
|
||||
schemeFilename := strings.ToUpper(structName[:1]) + strings.ToLower(structName[1:]) + "Scheme.vue"
|
||||
schemeFilename := strings.ToUpper(model.Name[:1]) + strings.ToLower(model.Name[1:]) + "Scheme.vue"
|
||||
schemeFilePath := filepath.Join(mkPath, schemeFilename)
|
||||
schemeFile, err := os.Create(schemeFilePath)
|
||||
if err != nil {
|
||||
@@ -63,25 +63,25 @@ func GenerateScheme(structName string, fields []entities.Field, mkPath string) {
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to execute template: %s", err)
|
||||
}
|
||||
log.Printf("Scheme for `%s` model is written: %s", structName, schemeFilePath)
|
||||
log.Printf("Scheme for `%s` model is written: %s", model.Name, schemeFilePath)
|
||||
_ = utils.FormatFilesWithPrettier([]string{schemeFilePath})
|
||||
}
|
||||
|
||||
func processDependencies(fields []entities.Field) []Dependency {
|
||||
func processDependencies(fields []model.Field) []Dependency {
|
||||
var dependencies []Dependency
|
||||
|
||||
for _, field := range fields {
|
||||
for _, meta := range field.Metadata {
|
||||
if meta.Name == "data" {
|
||||
dependency := meta.Values[0]
|
||||
dependencies = append(dependencies, Dependency{
|
||||
ImportName: strings.ToUpper(dependency[:1]) + strings.ToLower(dependency[1:]) + "Service",
|
||||
ServiceName: strings.ToLower(dependency) + "Service",
|
||||
LowerName: strings.ToLower(dependency),
|
||||
FieldName: field.Name,
|
||||
})
|
||||
}
|
||||
dependency := field.Metadata.RelatedModel
|
||||
if dependency == "" {
|
||||
continue
|
||||
}
|
||||
dependencies = append(dependencies, Dependency{
|
||||
ImportName: strings.ToUpper(dependency[:1]) + strings.ToLower(dependency[1:]) + "Service",
|
||||
ServiceName: strings.ToLower(dependency) + "Service",
|
||||
LowerName: strings.ToLower(dependency),
|
||||
FieldName: field.Name,
|
||||
})
|
||||
|
||||
}
|
||||
|
||||
return dependencies
|
||||
|
||||
@@ -4,6 +4,7 @@ import (
|
||||
_ "embed"
|
||||
"fmt"
|
||||
"log"
|
||||
"nto_cli/model"
|
||||
"nto_cli/utils"
|
||||
"os"
|
||||
"path/filepath"
|
||||
@@ -20,8 +21,8 @@ type ServiceTemplateContext struct {
|
||||
ServicesPath string
|
||||
}
|
||||
|
||||
func GenerateService(structName, mkPath string) {
|
||||
servicePath := filepath.Join(mkPath, strings.ToLower(structName)+".service.ts")
|
||||
func GenerateService(model *model.Model, mkPath string) {
|
||||
servicePath := filepath.Join(mkPath, strings.ToLower(model.Name)+".service.ts")
|
||||
serviceFile, err := os.Create(servicePath)
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to create service file: %s", err)
|
||||
@@ -35,8 +36,8 @@ func GenerateService(structName, mkPath string) {
|
||||
}(serviceFile)
|
||||
|
||||
context := ServiceTemplateContext{
|
||||
LowerModelName: strings.ToLower(structName),
|
||||
ModelName: structName,
|
||||
LowerModelName: strings.ToLower(model.Name),
|
||||
ModelName: model.Name,
|
||||
ServicesPath: GolangServicesPath,
|
||||
}
|
||||
|
||||
@@ -50,6 +51,6 @@ func GenerateService(structName, mkPath string) {
|
||||
if err != nil {
|
||||
log.Fatalf("Failed to execute template: %s", err)
|
||||
}
|
||||
log.Printf("Service for `%s` model is written: %s", structName, servicePath)
|
||||
log.Printf("Service for `%s` model is written: %s", model.Name, servicePath)
|
||||
_ = utils.FormatFilesWithPrettier([]string{servicePath})
|
||||
}
|
||||
|
||||
@@ -20,7 +20,7 @@ onMounted(async () => {
|
||||
|
||||
const scheme: Scheme<{{.StructName}}> = reactive({
|
||||
{{range .Fields}}
|
||||
{{.Name}}: {{.Generate}},
|
||||
{{.Name}}: {{.GenerateFieldCode}},
|
||||
{{end}}
|
||||
})
|
||||
|
||||
@@ -32,4 +32,4 @@ const getDefaults = () => getDefaultValues(scheme)
|
||||
<main class="w-screen h-screen">
|
||||
<Table :scheme :service :getDefaults></Table>
|
||||
</main>
|
||||
</template>
|
||||
</template>
|
||||
|
||||
Reference in New Issue
Block a user