{"record":{"id":"0f421afe03a177f7","repo":"flipped-aurora/gin-vue-admin","slug":"package-api-v1-s-enter-go","errorCode":null,"errorMessage":"package结构异常,缺少api/v1/%s/enter.go","messagePattern":"package结构异常,缺少api/v1/(.+?)/enter\\.go","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/service/system/auto_code_template.go","lineNumber":40,"sourceCode":"\t\"github.com/pkg/errors\"\n)\n\nvar AutoCodeTemplate = new(autoCodeTemplate)\nvar autoCodeCreateMu sync.Mutex\n\ntype autoCodeTemplate struct{}\n\nfunc autoCodeCreateContext(ctx context.Context) context.Context {\n\treturn context.WithoutCancel(ctx)\n}\n\nfunc (s *autoCodeTemplate) checkPackage(Pkg string, template string) (err error) {\n\tswitch template {\n\tcase \"package\":\n\t\tapiEnter := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, \"api\", \"v1\", Pkg, \"enter.go\")\n\t\t_, err = os.Stat(apiEnter)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"package结构异常,缺少api/v1/%s/enter.go\", Pkg)\n\t\t}\n\t\tserviceEnter := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, \"service\", Pkg, \"enter.go\")\n\t\t_, err = os.Stat(serviceEnter)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"package结构异常,缺少service/%s/enter.go\", Pkg)\n\t\t}\n\t\trouterEnter := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, \"router\", Pkg, \"enter.go\")\n\t\t_, err = os.Stat(routerEnter)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"package结构异常,缺少router/%s/enter.go\", Pkg)\n\t\t}\n\tcase \"plugin\":\n\t\tpluginEnter := filepath.Join(global.GVA_CONFIG.AutoCode.Root, global.GVA_CONFIG.AutoCode.Server, \"plugin\", Pkg, \"plugin.go\")\n\t\t_, err = os.Stat(pluginEnter)\n\t\tif err != nil {\n\t\t\treturn fmt.Errorf(\"plugin结构异常,缺少plugin/%s/plugin.go\", Pkg)\n\t\t}\n\t}","sourceCodeStart":22,"sourceCodeEnd":58,"githubUrl":"https://github.com/flipped-aurora/gin-vue-admin/blob/3136500ef380842b0eb6c4daa87c3f8a47fcf9e0/server/service/system/auto_code_template.go#L22-L58","documentation":"checkPackage validates that a package-type auto-code target already has the manual package skeleton in place before generating code. It stats api/v1/<Pkg>/enter.go under the configured server root; if absent, the Create call is rejected with this error. The skeleton files are the aggregation points new generated code hooks into.","triggerScenarios":"Calling autoCodeTemplate.Create with template=\"package\" and a Pkg whose api/v1/<Pkg>/enter.go does not exist under AutoCode.Root + AutoCode.Server — typically a brand-new package name that was never initialized.","commonSituations":"Typo in the package name in the code generator form; user deleted or renamed the enter.go; AutoCode.Root/Server config points at the wrong tree so the stat misses an existing file; repo checked out without the package scaffold.","solutions":["Create the missing skeleton: server/api/v1/<Pkg>/enter.go (var <Pkg>Router = new(...), aggregated in api/v1/enter.go).","Check for typos between the Pkg field in the generator UI and the actual directory name.","Verify autoCode.root and autoCode.server in config.yaml point at this repo's server directory.","Regenerate the package scaffold via the plugin/package init flow before running Create again."],"exampleFix":"// before\nmkdir server/api/v1/foo  // empty, no enter.go\n// after\n// server/api/v1/foo/enter.go\ntype Router struct{}\nvar Foo = new(Router)","handlingStrategy":"validation","validationCode":"apiEnter := filepath.Join(cfg.AutoCode.Root, cfg.AutoCode.Server, \"api\", \"v1\", pkg, \"enter.go\")\nif _, err := os.Stat(apiEnter); err != nil {\n    return fmt.Errorf(\"create server/api/v1/%s/enter.go before generating\", pkg)\n}","typeGuard":null,"tryCatchPattern":"if err := s.Create(info); err != nil {\n    if strings.Contains(err.Error(), \"缺少api/v1\") {\n        // scaffold the package then retry\n    }\n    return err\n}","preventionTips":["Always initialize the full package scaffold (api/v1, service, router enter.go) before package-type generation","Double-check package name spelling in the generator form","Keep autoCode.root/server config accurate in every environment"],"tags":["autocode","package-scaffold","validation"],"backgroundTag":"missing-enter-go-scaffold","analyzedSha":"3136500ef380842b0eb6c4daa87c3f8a47fcf9e0","analyzedAt":"2026-08-31T13:50:02.721Z","schemaVersion":2},"datasetVersion":"2026-08-31T19:17:28.585Z"}