gensvc.go 1.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869
  1. package gogen
  2. import (
  3. "bytes"
  4. "fmt"
  5. "text/template"
  6. "github.com/tal-tech/go-zero/tools/goctl/api/spec"
  7. "github.com/tal-tech/go-zero/tools/goctl/api/util"
  8. "github.com/tal-tech/go-zero/tools/goctl/templatex"
  9. ctlutil "github.com/tal-tech/go-zero/tools/goctl/util"
  10. )
  11. const (
  12. contextFilename = "servicecontext.go"
  13. contextTemplate = `package svc
  14. import {{.configImport}}
  15. type ServiceContext struct {
  16. Config {{.config}}
  17. }
  18. func NewServiceContext(c {{.config}}) *ServiceContext {
  19. return &ServiceContext{Config: c}
  20. }
  21. `
  22. )
  23. func genServiceContext(dir string, api *spec.ApiSpec) error {
  24. fp, created, err := util.MaybeCreateFile(dir, contextDir, contextFilename)
  25. if err != nil {
  26. return err
  27. }
  28. if !created {
  29. return nil
  30. }
  31. defer fp.Close()
  32. var authNames = getAuths(api)
  33. var auths []string
  34. for _, item := range authNames {
  35. auths = append(auths, fmt.Sprintf("%s config.AuthConfig", item))
  36. }
  37. parentPkg, err := getParentPackage(dir)
  38. if err != nil {
  39. return err
  40. }
  41. text, err := templatex.LoadTemplate(category, contextTemplateFile, contextTemplate)
  42. if err != nil {
  43. return err
  44. }
  45. var configImport = "\"" + ctlutil.JoinPackages(parentPkg, configDir) + "\""
  46. t := template.Must(template.New("contextTemplate").Parse(text))
  47. buffer := new(bytes.Buffer)
  48. err = t.Execute(buffer, map[string]string{
  49. "configImport": configImport,
  50. "config": "config.Config",
  51. })
  52. if err != nil {
  53. return nil
  54. }
  55. formatCode := formatCode(buffer.String())
  56. _, err = fp.WriteString(formatCode)
  57. return err
  58. }