123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- package dao
- import (
- "context"
- "crypto/md5"
- "encoding/binary"
- "encoding/json"
- "fmt"
- "strconv"
- "time"
- "go-common/app/interface/main/history/model"
- "go-common/library/log"
- )
- var (
- tableInfo = "ugc:history"
- family = "info"
- )
- // hashRowKey create rowkey(md5(mid)[:2]+mid) for histroy by mid .
- func hashRowKey(mid int64) string {
- var bs = make([]byte, 8)
- binary.LittleEndian.PutUint64(bs, uint64(mid))
- rk := md5.Sum(bs)
- return fmt.Sprintf("%x%d", rk[:2], mid)
- }
- func (d *Dao) column(aid int64, typ int8) string {
- if typ < model.TypeArticle {
- return strconv.FormatInt(aid, 10)
- }
- return fmt.Sprintf("%d_%d", aid, typ)
- }
- // Add add history list.
- func (d *Dao) Add(ctx context.Context, h *model.History) error {
- valueByte, err := json.Marshal(h)
- if err != nil {
- log.Error("json.Marshal(%v) error(%v)", h, err)
- return err
- }
- fValues := make(map[string][]byte)
- column := d.column(h.Aid, h.TP)
- fValues[column] = valueByte
- key := hashRowKey(h.Mid)
- values := map[string]map[string][]byte{family: fValues}
- ctx, cancel := context.WithTimeout(ctx, time.Duration(d.conf.Info.WriteTimeout))
- defer cancel()
- if _, err = d.info.PutStr(ctx, tableInfo, key, values); err != nil {
- log.Error("info.PutStr error(%v)", err)
- }
- return nil
- }
|