keys.go 2.3 KB

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