go-common/app/job/main/figure-timer/dao/dao.go
2019-04-22 18:49:16 +08:00

95 lines
2.5 KiB
Go

package dao
import (
"context"
"time"
"go-common/app/job/main/figure-timer/conf"
"go-common/app/job/main/figure-timer/model"
"go-common/library/cache/redis"
"go-common/library/database/hbase.v2"
"go-common/library/database/sql"
)
// Int is dao interface
type Int interface {
HBase
Mysql
Redis
Close()
Ping(c context.Context) error
}
// HBase dao hbase interface
type HBase interface {
UserInfo(c context.Context, mid int64, weekVer int64) (userInfo *model.UserInfo, err error)
PutCalcRecord(c context.Context, record *model.FigureRecord, weekTS int64) (err error)
CalcRecords(c context.Context, mid int64, weekTSFrom, weekTSTo int64) (figureRecords []*model.FigureRecord, err error)
ActionCounter(c context.Context, mid int64, ts int64) (counter *model.ActionCounter, err error)
}
// Mysql dao mysql interface
type Mysql interface {
Figure(c context.Context, mid int64) (figure *model.Figure, err error)
Figures(c context.Context, fromMid int64, limit int) (figures []*model.Figure, end bool, err error)
UpsertFigure(c context.Context, figure *model.Figure) (id int64, err error)
InsertRankHistory(c context.Context, rank *model.Rank) (id int64, err error)
UpsertRank(c context.Context, rank *model.Rank) (id int64, err error)
}
// Redis dao redis interface
type Redis interface {
FigureCache(c context.Context, mid int64) (figure *model.Figure, err error)
SetFigureCache(c context.Context, figure *model.Figure) (err error)
PendingMidsCache(c context.Context, version int64, shard int64) (mids []int64, err error)
RemoveCache(c context.Context, mid int64) (err error)
}
// Dao struct info of Dao.
type Dao struct {
c *conf.Config
mysql *sql.DB
hbase *hbase.Client
redis *redis.Pool
redisExpire int32
}
// New new a Dao and return.
func New(c *conf.Config) (d *Dao) {
d = &Dao{
c: c,
mysql: sql.NewMySQL(c.Mysql),
hbase: hbase.NewClient(c.Hbase.Config),
redis: redis.NewPool(c.Redis.Config),
redisExpire: int32(time.Duration(c.Redis.Expire) / time.Second),
}
return
}
// Close close connections of mc, redis, db.
func (d *Dao) Close() {
if d.mysql != nil {
d.mysql.Close()
}
if d.redis != nil {
d.redis.Close()
}
if d.hbase != nil {
d.hbase.Close()
}
}
// Ping ping health of db.
func (d *Dao) Ping(c context.Context) (err error) {
if err = d.mysql.Ping(c); err != nil {
return
}
// if err = d.hbase.Ping(c); err != nil {
// return
// }
if err = d.PingRedis(c); err != nil {
return
}
return
}