gensvc.go 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. package gogen
  2. import (
  3. "fmt"
  4. "strings"
  5. "github.com/tal-tech/go-zero/tools/goctl/api/spec"
  6. "github.com/tal-tech/go-zero/tools/goctl/config"
  7. ctlutil "github.com/tal-tech/go-zero/tools/goctl/util"
  8. "github.com/tal-tech/go-zero/tools/goctl/util/format"
  9. "github.com/tal-tech/go-zero/tools/goctl/vars"
  10. )
  11. const (
  12. contextFilename = "service_context"
  13. contextTemplate = `package svc
  14. import (
  15. {{.configImport}}
  16. )
  17. type ServiceContext struct {
  18. Config {{.config}}
  19. {{.middleware}}
  20. }
  21. func NewServiceContext(c {{.config}}) *ServiceContext {
  22. return &ServiceContext{
  23. Config: c,
  24. {{.middlewareAssignment}}
  25. }
  26. }
  27. `
  28. )
  29. func genServiceContext(dir, rootPkg string, cfg *config.Config, api *spec.ApiSpec) error {
  30. filename, err := format.FileNamingFormat(cfg.NamingFormat, contextFilename)
  31. if err != nil {
  32. return err
  33. }
  34. var middlewareStr string
  35. var middlewareAssignment string
  36. middlewares := getMiddleware(api)
  37. for _, item := range middlewares {
  38. middlewareStr += fmt.Sprintf("%s rest.Middleware\n", item)
  39. name := strings.TrimSuffix(item, "Middleware") + "Middleware"
  40. middlewareAssignment += fmt.Sprintf("%s: %s,\n", item,
  41. fmt.Sprintf("middleware.New%s().%s", strings.Title(name), "Handle"))
  42. }
  43. configImport := "\"" + ctlutil.JoinPackages(rootPkg, configDir) + "\""
  44. if len(middlewareStr) > 0 {
  45. configImport += "\n\t\"" + ctlutil.JoinPackages(rootPkg, middlewareDir) + "\""
  46. configImport += fmt.Sprintf("\n\t\"%s/rest\"", vars.ProjectOpenSourceURL)
  47. }
  48. return genFile(fileGenConfig{
  49. dir: dir,
  50. subdir: contextDir,
  51. filename: filename + ".go",
  52. templateName: "contextTemplate",
  53. category: category,
  54. templateFile: contextTemplateFile,
  55. builtinTemplate: contextTemplate,
  56. data: map[string]string{
  57. "configImport": configImport,
  58. "config": "config.Config",
  59. "middleware": middlewareStr,
  60. "middlewareAssignment": middlewareAssignment,
  61. },
  62. })
  63. }