mod.go 2.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990
  1. package mod
  2. import (
  3. pb "git.wanbits.io/joe/franklin/protos"
  4. "git.wanbits.io/joe/kettle/utl"
  5. "github.com/go-redis/redis"
  6. "github.com/mitchellh/mapstructure"
  7. "reflect"
  8. "strings"
  9. "time"
  10. )
  11. var (
  12. rds *redis.Client
  13. )
  14. // convert ANY struct( or its pointer) to map[string]interface{}
  15. // opt: bool. if true convert keys of struct to their lowercase
  16. func StructToMap(stru interface{}, lowerCase ...bool) (map[string]interface{}, error) {
  17. conf := func(v string) string {
  18. return v
  19. }
  20. if len(lowerCase) > 0 && lowerCase[0] {
  21. conf = strings.ToLower
  22. }
  23. t := reflect.TypeOf(stru)
  24. vals := reflect.ValueOf(stru)
  25. switch t.Kind() {
  26. case reflect.Ptr:
  27. t = t.Elem()
  28. vals = vals.Elem()
  29. if t.Kind() != reflect.Struct {
  30. return nil, utl.ErrParameters
  31. }
  32. case reflect.Struct:
  33. default:
  34. return nil, utl.ErrParameters
  35. }
  36. rt := make(map[string]interface{})
  37. for i := 0; i < t.NumField(); i++ {
  38. fn := conf(t.Field(i).Name)
  39. val := vals.Field(i).Interface()
  40. rt[fn] = val
  41. }
  42. return rt, nil
  43. }
  44. func Install(client *redis.Client) {
  45. rds = client
  46. }
  47. func ExistUser(userId uint64) bool {
  48. ival, err := rds.Exists(kh_user(userId)).Result()
  49. return err == nil && ival != 0
  50. }
  51. func LoadUser(userId uint64) (*pb.User, error) {
  52. mp, err := rds.HGetAll(kh_user(userId)).Result()
  53. if err != nil {
  54. return nil, err
  55. }
  56. //mpsi := make(map[string]interface{})
  57. //for k, v := range mp {
  58. // mpsi[k] = v
  59. //}
  60. user := &pb.User{}
  61. err = mapstructure.Decode(mp, user)
  62. return user, err
  63. }
  64. func UpdateUserAttr(userId uint64, field string, val interface{}) error {
  65. _, err := rds.HSet(kh_user(userId), field, val).Result()
  66. return err
  67. }
  68. func UpdateUserAttrs(userId uint64, fields map[string]interface{}) error {
  69. _, err := rds.HMSet(kh_user(userId), fields).Result()
  70. return err
  71. }
  72. func SaveKick(userId uint64, secs int) error {
  73. _, err := rds.Set(ks_kick(userId), 1, time.Duration(secs)*time.Second).Result()
  74. return err
  75. }
  76. func LoadKick(userId uint64) bool {
  77. _, err := rds.Get(ks_kick(userId)).Result()
  78. return err == nil
  79. }