keys.go 1.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051
  1. package gen
  2. import (
  3. "fmt"
  4. "github.com/tal-tech/go-zero/tools/goctl/model/sql/parser"
  5. "github.com/tal-tech/go-zero/tools/goctl/util/stringx"
  6. )
  7. type (
  8. // tableName:user
  9. // {{prefix}}=cache
  10. // key:id
  11. Key struct {
  12. VarExpression string // cacheUserIdPrefix="cache#user#id#"
  13. Left string // cacheUserIdPrefix
  14. Right string // cache#user#id#
  15. Variable string // userIdKey
  16. KeyExpression string // userIdKey: = fmt.Sprintf("cache#user#id#%v", userId)
  17. DataKeyExpression string // userIdKey: = fmt.Sprintf("cache#user#id#%v", data.userId)
  18. RespKeyExpression string // userIdKey: = fmt.Sprintf("cache#user#id#%v", resp.userId)
  19. }
  20. )
  21. // key-数据库原始字段名,value-缓存key相关数据
  22. func genCacheKeys(table parser.Table) (map[string]Key, error) {
  23. fields := table.Fields
  24. m := make(map[string]Key)
  25. camelTableName := table.Name.Snake2Camel()
  26. lowerStartCamelTableName := stringx.From(camelTableName).LowerStart()
  27. for _, field := range fields {
  28. if !field.IsKey {
  29. continue
  30. }
  31. camelFieldName := field.Name.Snake2Camel()
  32. lowerStartCamelFieldName := stringx.From(camelFieldName).LowerStart()
  33. left := fmt.Sprintf("cache%s%sPrefix", camelTableName, camelFieldName)
  34. right := fmt.Sprintf("cache#%s#%s#", camelTableName, lowerStartCamelFieldName)
  35. variable := fmt.Sprintf("%s%sKey", lowerStartCamelTableName, camelFieldName)
  36. m[field.Name.Source()] = Key{
  37. VarExpression: fmt.Sprintf(`%s = "%s"`, left, right),
  38. Left: left,
  39. Right: right,
  40. Variable: variable,
  41. KeyExpression: fmt.Sprintf(`%s := fmt.Sprintf("%s%s", %s,%s)`, variable, "%s", "%v", left, lowerStartCamelFieldName),
  42. DataKeyExpression: fmt.Sprintf(`%s := fmt.Sprintf("%s%s",%s, data.%s)`, variable, "%s", "%v", left, camelFieldName),
  43. RespKeyExpression: fmt.Sprintf(`%s := fmt.Sprintf("%s%s", %s,resp.%s)`, variable, "%s", "%v", left, camelFieldName),
  44. }
  45. }
  46. return m, nil
  47. }