123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115 |
- package dao
- import (
- "context"
- "fmt"
- "go-common/app/interface/main/space/model"
- "go-common/library/cache/memcache"
- xsql "go-common/library/database/sql"
- "go-common/library/log"
- )
- const (
- _privacyKey = "spc_pcy_%d"
- _privacySQL = `SELECT privacy,status FROM member_privacy%d WHERE mid = ?`
- _privacyModifySQL = `UPDATE member_privacy%d SET status=? WHERE mid = ? AND privacy = ?`
- _privacyAddSQL = `INSERT INTO member_privacy%d (mid,privacy,status) VALUES (?,?,?)`
- )
- func privacyHit(mid int64) int64 {
- return mid % 10
- }
- func privacyKey(mid int64) string {
- return fmt.Sprintf(_privacyKey, mid)
- }
- // Privacy get privacy data.
- func (d *Dao) Privacy(c context.Context, mid int64) (data map[string]int, err error) {
- var rows *xsql.Rows
- if rows, err = d.db.Query(c, fmt.Sprintf(_privacySQL, privacyHit(mid)), mid); err != nil {
- log.Error("d.Privacy.Query(%d) error(%v)", mid, err)
- return
- }
- defer rows.Close()
- data = make(map[string]int)
- for rows.Next() {
- r := new(model.Privacy)
- if err = rows.Scan(&r.Privacy, &r.Status); err != nil {
- log.Error("row.Scan() error(%v)", err)
- return
- }
- data[r.Privacy] = r.Status
- }
- return
- }
- // PrivacyModify modify privacy.
- func (d *Dao) PrivacyModify(c context.Context, mid int64, field string, value int) (err error) {
- var privacy map[string]int
- if privacy, err = d.Privacy(c, mid); err != nil {
- return
- }
- if _, ok := privacy[field]; ok {
- _, err = d.db.Exec(c, fmt.Sprintf(_privacyModifySQL, privacyHit(mid)), value, mid, field)
- if err != nil {
- log.Error("Privacy Update error d.db.Exec(%d,%s,%d) error(%v)", mid, field, value, err)
- }
- } else {
- _, err = d.db.Exec(c, fmt.Sprintf(_privacyAddSQL, privacyHit(mid)), mid, field, value)
- if err != nil {
- log.Error("Privacy Add error d.db.Exec(%d,%s,%d) error(%v)", mid, field, value, err)
- }
- }
- return
- }
- // PrivacyCache get privacy cache.
- func (d *Dao) PrivacyCache(c context.Context, mid int64) (data map[string]int, err error) {
- var (
- conn = d.mc.Get(c)
- key = privacyKey(mid)
- )
- defer conn.Close()
- reply, err := conn.Get(key)
- if err != nil {
- if err == memcache.ErrNotFound {
- err = nil
- return
- }
- log.Error("conn.Get(%v) error(%v)", key, err)
- return
- }
- if err = conn.Scan(reply, &data); err != nil {
- log.Error("reply.Scan(%s) error(%v)", reply.Value, err)
- }
- return
- }
- // SetPrivacyCache set privacy cache.
- func (d *Dao) SetPrivacyCache(c context.Context, mid int64, data map[string]int) (err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- item := &memcache.Item{Key: privacyKey(mid), Object: data, Flags: memcache.FlagJSON, Expiration: d.mcSettingExpire}
- if err = conn.Set(item); err != nil {
- log.Error("conn.Store(%s) error(%v)", privacyKey(mid), err)
- return
- }
- return
- }
- // DelPrivacyCache delete privacy cache.
- func (d *Dao) DelPrivacyCache(c context.Context, mid int64) (err error) {
- conn := d.mc.Get(c)
- defer conn.Close()
- key := privacyKey(mid)
- if err = conn.Delete(key); err != nil {
- if err == memcache.ErrNotFound {
- err = nil
- return
- }
- log.Error("DelPrivacyCache conn.Delete(%s) error(%v)", privacyKey(mid), err)
- }
- return
- }
|