{"record":{"id":"6a48692b147e5c55","repo":"flipped-aurora/gin-vue-admin","slug":"package-router-s-enter-go","errorCode":null,"errorMessage":"package结构异常,缺少router/%s/enter.go","messagePattern":"package结构异常,缺少router/(.+?)/enter\\.go","errorType":"validation","errorClass":null,"httpStatus":null,"severity":"error","filePath":"server/service/system/auto_code_template.go","lineNumber":50,"sourceCode":"}\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}\n\treturn nil\n}\n\n// Create 创建生成自动化代码\nfunc (s *autoCodeTemplate) Create(ctx context.Context, info request.AutoCode) error {\n\tautoCodeCreateMu.Lock()\n\tdefer autoCodeCreateMu.Unlock()\n\n\t// Frontend files are published last, but their Vite refresh may still cancel\n\t// the HTTP request before the handler returns. The accepted create task must finish.","sourceCodeStart":32,"sourceCodeEnd":68,"githubUrl":"https://github.com/flipped-aurora/gin-vue-admin/blob/3136500ef380842b0eb6c4daa87c3f8a47fcf9e0/server/service/system/auto_code_template.go#L32-L68","documentation":"checkPackage validates the router skeleton for package-type generation: router/<Pkg>/enter.go must exist under the configured server root. If os.Stat fails, Create aborts, since generated router code is aggregated through this enter.go.","triggerScenarios":"autoCodeTemplate.Create with template=\"package\" where the api and service enter.go files exist but router/<Pkg>/enter.go is missing.","commonSituations":"Partial manual scaffold (api/service created, router forgotten); router package deleted during refactor; AutoCode config pointing at a stale checkout; typo in Pkg so the directory name does not match.","solutions":["Create server/router/<Pkg>/enter.go with the router aggregation struct/var and register it in server/router/enter.go.","Align directory names across api/v1, service, and router for the same Pkg.","Verify autoCode.root and autoCode.server in config.yaml point at this project's server directory.","Restore the file from git history if it was removed during refactoring."],"exampleFix":"// before\nserver/router/foo/  // missing\n// after\n// server/router/foo/enter.go\ntype Router struct{}\nvar Foo = new(Router)","handlingStrategy":"validation","validationCode":"routerEnter := filepath.Join(cfg.AutoCode.Root, cfg.AutoCode.Server, \"router\", pkg, \"enter.go\")\nif _, err := os.Stat(routerEnter); err != nil {\n    return fmt.Errorf(\"create server/router/%s/enter.go before generating\", pkg)\n}","typeGuard":null,"tryCatchPattern":"if err := s.Create(info); err != nil {\n    if strings.Contains(err.Error(), \"缺少router\") {\n        // scaffold router enter.go then retry\n    }\n    return err\n}","preventionTips":["Never delete router/<Pkg>/enter.go during refactors without regenerating the package","Create api/service/router scaffolds as one atomic step","Confirm config points at the intended checkout"],"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"}