genservicecontext.go 1.3 KB

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