privacy.go 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. package dao
  2. import (
  3. "context"
  4. "fmt"
  5. "go-common/app/interface/main/space/model"
  6. "go-common/library/cache/memcache"
  7. xsql "go-common/library/database/sql"
  8. "go-common/library/log"
  9. )
  10. const (
  11. _privacyKey = "spc_pcy_%d"
  12. _privacySQL = `SELECT privacy,status FROM member_privacy%d WHERE mid = ?`
  13. _privacyModifySQL = `UPDATE member_privacy%d SET status=? WHERE mid = ? AND privacy = ?`
  14. _privacyAddSQL = `INSERT INTO member_privacy%d (mid,privacy,status) VALUES (?,?,?)`
  15. )
  16. func privacyHit(mid int64) int64 {
  17. return mid % 10
  18. }
  19. func privacyKey(mid int64) string {
  20. return fmt.Sprintf(_privacyKey, mid)
  21. }
  22. // Privacy get privacy data.
  23. func (d *Dao) Privacy(c context.Context, mid int64) (data map[string]int, err error) {
  24. var rows *xsql.Rows
  25. if rows, err = d.db.Query(c, fmt.Sprintf(_privacySQL, privacyHit(mid)), mid); err != nil {
  26. log.Error("d.Privacy.Query(%d) error(%v)", mid, err)
  27. return
  28. }
  29. defer rows.Close()
  30. data = make(map[string]int)
  31. for rows.Next() {
  32. r := new(model.Privacy)
  33. if err = rows.Scan(&r.Privacy, &r.Status); err != nil {
  34. log.Error("row.Scan() error(%v)", err)
  35. return
  36. }
  37. data[r.Privacy] = r.Status
  38. }
  39. return
  40. }
  41. // PrivacyModify modify privacy.
  42. func (d *Dao) PrivacyModify(c context.Context, mid int64, field string, value int) (err error) {
  43. var privacy map[string]int
  44. if privacy, err = d.Privacy(c, mid); err != nil {
  45. return
  46. }
  47. if _, ok := privacy[field]; ok {
  48. _, err = d.db.Exec(c, fmt.Sprintf(_privacyModifySQL, privacyHit(mid)), value, mid, field)
  49. if err != nil {
  50. log.Error("Privacy Update error d.db.Exec(%d,%s,%d) error(%v)", mid, field, value, err)
  51. }
  52. } else {
  53. _, err = d.db.Exec(c, fmt.Sprintf(_privacyAddSQL, privacyHit(mid)), mid, field, value)
  54. if err != nil {
  55. log.Error("Privacy Add error d.db.Exec(%d,%s,%d) error(%v)", mid, field, value, err)
  56. }
  57. }
  58. return
  59. }
  60. // PrivacyCache get privacy cache.
  61. func (d *Dao) PrivacyCache(c context.Context, mid int64) (data map[string]int, err error) {
  62. var (
  63. conn = d.mc.Get(c)
  64. key = privacyKey(mid)
  65. )
  66. defer conn.Close()
  67. reply, err := conn.Get(key)
  68. if err != nil {
  69. if err == memcache.ErrNotFound {
  70. err = nil
  71. return
  72. }
  73. log.Error("conn.Get(%v) error(%v)", key, err)
  74. return
  75. }
  76. if err = conn.Scan(reply, &data); err != nil {
  77. log.Error("reply.Scan(%s) error(%v)", reply.Value, err)
  78. }
  79. return
  80. }
  81. // SetPrivacyCache set privacy cache.
  82. func (d *Dao) SetPrivacyCache(c context.Context, mid int64, data map[string]int) (err error) {
  83. conn := d.mc.Get(c)
  84. defer conn.Close()
  85. item := &memcache.Item{Key: privacyKey(mid), Object: data, Flags: memcache.FlagJSON, Expiration: d.mcSettingExpire}
  86. if err = conn.Set(item); err != nil {
  87. log.Error("conn.Store(%s) error(%v)", privacyKey(mid), err)
  88. return
  89. }
  90. return
  91. }
  92. // DelPrivacyCache delete privacy cache.
  93. func (d *Dao) DelPrivacyCache(c context.Context, mid int64) (err error) {
  94. conn := d.mc.Get(c)
  95. defer conn.Close()
  96. key := privacyKey(mid)
  97. if err = conn.Delete(key); err != nil {
  98. if err == memcache.ErrNotFound {
  99. err = nil
  100. return
  101. }
  102. log.Error("DelPrivacyCache conn.Delete(%s) error(%v)", privacyKey(mid), err)
  103. }
  104. return
  105. }