| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990 |
- package mod
- import (
- pb "git.wanbits.io/joe/franklin/protos"
- "git.wanbits.io/joe/kettle/utl"
- "github.com/go-redis/redis"
- "github.com/mitchellh/mapstructure"
- "reflect"
- "strings"
- "time"
- )
- var (
- rds *redis.Client
- )
- // convert ANY struct( or its pointer) to map[string]interface{}
- // opt: bool. if true convert keys of struct to their lowercase
- func StructToMap(stru interface{}, lowerCase ...bool) (map[string]interface{}, error) {
- conf := func(v string) string {
- return v
- }
- if len(lowerCase) > 0 && lowerCase[0] {
- conf = strings.ToLower
- }
- t := reflect.TypeOf(stru)
- vals := reflect.ValueOf(stru)
- switch t.Kind() {
- case reflect.Ptr:
- t = t.Elem()
- vals = vals.Elem()
- if t.Kind() != reflect.Struct {
- return nil, utl.ErrParameters
- }
- case reflect.Struct:
- default:
- return nil, utl.ErrParameters
- }
- rt := make(map[string]interface{})
- for i := 0; i < t.NumField(); i++ {
- fn := conf(t.Field(i).Name)
- val := vals.Field(i).Interface()
- rt[fn] = val
- }
- return rt, nil
- }
- func Install(client *redis.Client) {
- rds = client
- }
- func ExistUser(userId uint64) bool {
- ival, err := rds.Exists(kh_user(userId)).Result()
- return err == nil && ival != 0
- }
- func LoadUser(userId uint64) (*pb.User, error) {
- mp, err := rds.HGetAll(kh_user(userId)).Result()
- if err != nil {
- return nil, err
- }
- //mpsi := make(map[string]interface{})
- //for k, v := range mp {
- // mpsi[k] = v
- //}
- user := &pb.User{}
- err = mapstructure.Decode(mp, user)
- return user, err
- }
- func UpdateUserAttr(userId uint64, field string, val interface{}) error {
- _, err := rds.HSet(kh_user(userId), field, val).Result()
- return err
- }
- func UpdateUserAttrs(userId uint64, fields map[string]interface{}) error {
- _, err := rds.HMSet(kh_user(userId), fields).Result()
- return err
- }
- func SaveKick(userId uint64, secs int) error {
- _, err := rds.Set(ks_kick(userId), 1, time.Duration(secs)*time.Second).Result()
- return err
- }
- func LoadKick(userId uint64) bool {
- _, err := rds.Get(ks_kick(userId)).Result()
- return err == nil
- }
|