diff --git a/entities/field.go b/entities/field.go
index 6368da7..79eeb3d 100644
--- a/entities/field.go
+++ b/entities/field.go
@@ -9,7 +9,7 @@ import (
type Field struct {
Name string
Type string
- Medatada []Metadata
+ Metadata []Metadata
}
var PrimitiveTypes = map[string]string{
@@ -47,7 +47,7 @@ func (f *Field) GenerateType() string {
result += fmt.Sprintf(` primitive: "%s",`, PrimitiveTypes[strings.ToLower(f.Type)])
} else {
var field = "[]"
- for _, meta := range f.Medatada {
+ for _, meta := range f.Metadata {
if meta.Name == "field" {
if len(meta.Values) > 0 {
field = "['" + strings.Join(meta.Values, "', '") + "']"
@@ -65,7 +65,7 @@ func (f *Field) GenerateType() string {
func (f *Field) Generate() string {
result := "{\n"
- for _, meta := range f.Medatada {
+ for _, meta := range f.Metadata {
if meta.Name == "hidden" {
result += " hidden: true,\n"
} else if meta.Name == "label" {
diff --git a/generation/scheme.go b/generation/scheme.go
index a5754a0..8068003 100644
--- a/generation/scheme.go
+++ b/generation/scheme.go
@@ -1,87 +1,78 @@
package generation
import (
+ _ "embed"
"fmt"
"log"
"nto_cli/entities"
- "nto_cli/utils"
"os"
"strings"
+ "text/template"
)
+//go:embed templates/scheme.tmpl
+var SchemeTemplate string
+
+const GolangServicesPath = "../../bindings/app/internal/services"
+
+type Dependency struct {
+ ImportName string
+ ServiceName string
+ LowerName string
+ FieldName string
+}
+
+type TemplateData struct {
+ StructName string
+ LowerName string
+ GolangServicesPath string
+ Fields []entities.Field
+ Dependencies []Dependency
+}
+
func GenerateScheme(structName string, fields []entities.Field, mkPath string) {
- schemeFile, err := os.Create(mkPath + "/" + strings.ToUpper(structName[:1]) + strings.ToLower(structName[1:]) + "Scheme.vue")
- defer schemeFile.Close()
+ data := TemplateData{
+ StructName: structName,
+ LowerName: strings.ToLower(structName),
+ GolangServicesPath: GolangServicesPath,
+ Fields: fields,
+ Dependencies: processDependencies(fields),
+ }
+
+ fileName := strings.ToUpper(structName[:1]) + strings.ToLower(structName[1:]) + "Scheme.vue"
+ schemeFile, err := os.Create(mkPath + "/" + fileName)
if err != nil {
log.Fatalf("Failed to create file: %s", err)
}
+ defer schemeFile.Close()
- _, err = schemeFile.WriteString(fmt.Sprintf(
- `
-
-
-
-
-
-
-`, strings.ToLower(structName), structName, utils.GetServiceStructType(structName), LoadDependencies(fields), structName, GenerateFields(fields)))
+ tmpl, err := template.New("scheme").Parse(SchemeTemplate)
if err != nil {
- log.Fatalf("Failed to write to file: %s", err)
+ panic(fmt.Sprintf("Failed to parse template: %s", err))
+ }
+
+ err = tmpl.Execute(schemeFile, data)
+ if err != nil {
+ log.Fatalf("Failed to execute template: %s", err)
}
}
-func GenerateFields(fields []entities.Field) string {
- result := "{\n"
- for _, field := range fields {
- result += field.Name + ":" + field.Generate() + ", \n"
- }
- return result + "\n}"
-}
+func processDependencies(fields []entities.Field) []Dependency {
+ dependencies := []Dependency{}
-func LoadDependencies(fields []entities.Field) string {
- type Dependency struct {
- fieldName string
- dependencyName string
- }
-
- result := ""
- var dependencies []Dependency
for _, field := range fields {
- for _, meta := range field.Medatada {
+ for _, meta := range field.Metadata {
if meta.Name == "data" {
dependency := meta.Values[0]
dependencies = append(dependencies, Dependency{
- fieldName: field.Name,
- dependencyName: dependency,
+ ImportName: strings.ToUpper(dependency[:1]) + strings.ToLower(dependency[1:]) + "Service",
+ ServiceName: strings.ToLower(dependency) + "Service",
+ LowerName: strings.ToLower(dependency),
+ FieldName: field.Name,
})
- result += fmt.Sprintf("import %sService from '../%s/%s.service.ts'\n", dependency, strings.ToLower(dependency), strings.ToLower(dependency))
- result += fmt.Sprintf("const %sService = new %sService\n", strings.ToLower(dependency), strings.ToUpper(dependency[:1])+strings.ToLower(dependency[1:]))
}
}
}
- insertIntoScheme := ""
- for _, dep := range dependencies {
- insertIntoScheme += fmt.Sprintf("(scheme as any).%s.type!.nested!.values = await %sService.readAll()\n", dep.fieldName, strings.ToLower(dep.dependencyName))
- }
- result += fmt.Sprintf(`onMounted(async () => {
- %s
-})`+"\n", insertIntoScheme)
- return result
+ return dependencies
}
diff --git a/generation/service.go b/generation/service.go
index b758f5a..07a3abb 100644
--- a/generation/service.go
+++ b/generation/service.go
@@ -18,7 +18,7 @@ func GenerateService(structName, mkPath string) {
`import { GetAll, Create, Delete, GetById, Update, Count } from "%s"
import type { %s } from "%s"
import type { IService } from "%s"
-
+
export default class %sService implements IService<%s> {
async read(id: number) {
return await GetById(id) as %s
@@ -44,7 +44,7 @@ export default class %sService implements IService<%s> {
return await Count()
}
}
-`, utils.GetServiceBindPath(structName), structName, utils.GetServiceStructType(structName), utils.GetServiceType(), structName, structName, structName, structName, structName, structName))
+`, utils.GetServiceBindPath(structName), structName, GolangServicesPath, utils.GetServiceType(), structName, structName, structName, structName, structName, structName))
if err != nil {
log.Fatalf("Failed to write to file: %s", err)
}
diff --git a/generation/templates/scheme.tmpl b/generation/templates/scheme.tmpl
new file mode 100644
index 0000000..2639788
--- /dev/null
+++ b/generation/templates/scheme.tmpl
@@ -0,0 +1,35 @@
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/generation/templates/service.tmpl b/generation/templates/service.tmpl
new file mode 100644
index 0000000..bb081a9
--- /dev/null
+++ b/generation/templates/service.tmpl
@@ -0,0 +1,27 @@
+import { GetAll, Create, Delete, GetById, Update, Count } from "../../bindings/app/internal/services/authorservice.ts"
+import type { Author } from "../../bindings/app/internal/services/models.ts"
+import type { IService } from "../types/service.type.ts"
+
+export default class AuthorService implements IService {
+ async read(id: number) {
+ return await GetById(id)
+ }
+
+ async readAll() {
+ return await GetAll() as Author[]
+ }
+
+ async create(item: Author) {
+ await Create(item)
+ }
+
+ async delete(id: number) {
+ return await Delete(id)
+ }
+ async update(item: Author) {
+ await Update(item)
+ }
+ async count() {
+ return await Count()
+ }
+}
diff --git a/utils/imports.go b/utils/imports.go
index f34a7b1..4db647f 100644
--- a/utils/imports.go
+++ b/utils/imports.go
@@ -10,11 +10,6 @@ func GetServiceBindPath(structName string) string {
return path
}
-func GetServiceStructType(structName string) string {
- path := "../../bindings/app/internal/services/models.ts"
- return path
-}
-
func GetServiceType() string {
path := "../types/service.type.ts"
return path
diff --git a/utils/split_struct_field.go b/utils/split_struct_field.go
index 92675d6..2c522a0 100644
--- a/utils/split_struct_field.go
+++ b/utils/split_struct_field.go
@@ -53,7 +53,7 @@ func SplitStructField(field string) (*entities.Field, error) {
name := data[0]
dataType := data[1]
return &entities.Field{
- Medatada: metadata,
+ Metadata: metadata,
Type: dataType,
Name: name,
}, nil