123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106 |
- package gen
- import (
- "bytes"
- "strings"
- "text/template"
- )
- var (
- cacheKeyExpressionTemplate = `cache{{.upperCamelTable}}{{.upperCamelField}}Prefix = "cache#{{.lowerCamelTable}}#{{.lowerCamelField}}#"`
- keyTemplate = `{{.lowerCamelField}}Key := fmt.Sprintf("%s%v", {{.define}}, {{.lowerCamelField}})`
- keyRespTemplate = `{{.lowerCamelField}}Key := fmt.Sprintf("%s%v", {{.define}}, resp.{{.upperCamelField}})`
- keyDataTemplate = `{{.lowerCamelField}}Key := fmt.Sprintf("%s%v", {{.define}}, data.{{.upperCamelField}})`
- )
- type (
- Key struct {
- Define string // cacheKey define,如:cacheUserUserIdPrefix
- Value string // cacheKey value expression,如:cache#user#userId#
- Expression string // cacheKey expression,如:cacheUserUserIdPrefix="cache#user#userId#"
- KeyVariable string // cacheKey 声明变量,如:userIdKey
- Key string // 缓存key的代码,如 userIdKey:=fmt.Sprintf("%s%v", cacheUserUserIdPrefix, userId)
- DataKey string // 缓存key的代码,如 userIdKey:=fmt.Sprintf("%s%v", cacheUserUserIdPrefix, data.userId)
- RespKey string // 缓存key的代码,如 userIdKey:=fmt.Sprintf("%s%v", cacheUserUserIdPrefix, resp.userId)
- }
- )
- // key-数据库原始字段名,value-缓存key对象
- func genCacheKeys(table *InnerTable) (map[string]Key, error) {
- fields := table.Fields
- var m = make(map[string]Key)
- if !table.ContainsCache {
- return m, nil
- }
- for _, field := range fields {
- if !field.Cache && !field.IsPrimaryKey {
- continue
- }
- t, err := template.New("keyExpression").Parse(cacheKeyExpressionTemplate)
- if err != nil {
- return nil, err
- }
- var expressionBuffer = new(bytes.Buffer)
- err = t.Execute(expressionBuffer, map[string]string{
- "upperCamelTable": table.UpperCamelCase,
- "lowerCamelTable": table.LowerCamelCase,
- "upperCamelField": field.UpperCamelCase,
- "lowerCamelField": field.LowerCamelCase,
- })
- if err != nil {
- return nil, err
- }
- expression := expressionBuffer.String()
- expressionAr := strings.Split(expression, "=")
- define := strings.TrimSpace(expressionAr[0])
- value := strings.TrimSpace(expressionAr[1])
- t, err = template.New("key").Parse(keyTemplate)
- if err != nil {
- return nil, err
- }
- var keyBuffer = new(bytes.Buffer)
- err = t.Execute(keyBuffer, map[string]string{
- "lowerCamelField": field.LowerCamelCase,
- "define": define,
- })
- if err != nil {
- return nil, err
- }
- t, err = template.New("keyData").Parse(keyDataTemplate)
- if err != nil {
- return nil, err
- }
- var keyDataBuffer = new(bytes.Buffer)
- err = t.Execute(keyDataBuffer, map[string]string{
- "lowerCamelField": field.LowerCamelCase,
- "upperCamelField": field.UpperCamelCase,
- "define": define,
- })
- if err != nil {
- return nil, err
- }
- t, err = template.New("keyResp").Parse(keyRespTemplate)
- if err != nil {
- return nil, err
- }
- var keyRespBuffer = new(bytes.Buffer)
- err = t.Execute(keyRespBuffer, map[string]string{
- "lowerCamelField": field.LowerCamelCase,
- "upperCamelField": field.UpperCamelCase,
- "define": define,
- })
- if err != nil {
- return nil, err
- }
- m[field.SnakeCase] = Key{
- Define: define,
- Value: value,
- Expression: expression,
- KeyVariable: field.LowerCamelCase + "Key",
- Key: keyBuffer.String(),
- DataKey: keyDataBuffer.String(),
- RespKey: keyRespBuffer.String(),
- }
- }
- return m, nil
- }
|