1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162 |
- package gen
- import (
- "fmt"
- "strings"
- "github.com/tal-tech/go-zero/tools/goctl/model/sql/parser"
- "github.com/tal-tech/go-zero/tools/goctl/util/stringx"
- )
- // Key defines cache key variable for generating code
- type Key struct {
- // VarExpression likes cacheUserIdPrefix = "cache#User#id#"
- VarExpression string
- // Left likes cacheUserIdPrefix
- Left string
- // Right likes cache#user#id#
- Right string
- // Variable likes userIdKey
- Variable string
- // KeyExpression likes userIdKey: = fmt.Sprintf("cache#user#id#%v", userId)
- KeyExpression string
- // DataKeyExpression likes userIdKey: = fmt.Sprintf("cache#user#id#%v", data.userId)
- DataKeyExpression string
- // RespKeyExpression likes userIdKey: = fmt.Sprintf("cache#user#id#%v", resp.userId)
- RespKeyExpression string
- }
- // key-数据库原始字段名,value-缓存key相关数据
- func genCacheKeys(table parser.Table) (map[string]Key, error) {
- fields := table.Fields
- m := make(map[string]Key)
- camelTableName := table.Name.ToCamel()
- lowerStartCamelTableName := stringx.From(camelTableName).Untitle()
- for _, field := range fields {
- if field.IsUniqueKey || field.IsPrimaryKey {
- camelFieldName := field.Name.ToCamel()
- lowerStartCamelFieldName := stringx.From(camelFieldName).Untitle()
- left := fmt.Sprintf("cache%s%sPrefix", camelTableName, camelFieldName)
- if strings.ToLower(camelFieldName) == strings.ToLower(camelTableName) {
- left = fmt.Sprintf("cache%sPrefix", camelTableName)
- }
- right := fmt.Sprintf("cache#%s#%s#", camelTableName, lowerStartCamelFieldName)
- variable := fmt.Sprintf("%s%sKey", lowerStartCamelTableName, camelFieldName)
- if strings.ToLower(lowerStartCamelTableName) == strings.ToLower(camelFieldName) {
- variable = fmt.Sprintf("%sKey", lowerStartCamelTableName)
- }
- m[field.Name.Source()] = Key{
- VarExpression: fmt.Sprintf(`%s = "%s"`, left, right),
- Left: left,
- Right: right,
- Variable: variable,
- KeyExpression: fmt.Sprintf(`%s := fmt.Sprintf("%s%s", %s,%s)`, variable, "%s", "%v", left, lowerStartCamelFieldName),
- DataKeyExpression: fmt.Sprintf(`%s := fmt.Sprintf("%s%s",%s, data.%s)`, variable, "%s", "%v", left, camelFieldName),
- RespKeyExpression: fmt.Sprintf(`%s := fmt.Sprintf("%s%s", %s,resp.%s)`, variable, "%s", "%v", left, camelFieldName),
- }
- }
- }
- return m, nil
- }
|