54 lines
1.4 KiB
Go
54 lines
1.4 KiB
Go
|
package model
|
|||
|
|
|||
|
import (
|
|||
|
"encoding/json"
|
|||
|
"go-common/library/ecode"
|
|||
|
xtime "go-common/library/time"
|
|||
|
"time"
|
|||
|
)
|
|||
|
|
|||
|
const (
|
|||
|
// MaxInt64 用于最大int64
|
|||
|
MaxInt64 = int64(^uint64(0) >> 1)
|
|||
|
// UserListLen 空间长度
|
|||
|
UserListLen = 20
|
|||
|
)
|
|||
|
|
|||
|
// Cache
|
|||
|
const (
|
|||
|
CacheKeyUserBase = "user_base:%d" //用户基本信息缓存key
|
|||
|
CacheExpireUserBase = 600
|
|||
|
)
|
|||
|
|
|||
|
// CursorValue 用于cursor的定位,这里可以当做通用结构使用,使用者自己根据需求定义cursor_id的含义
|
|||
|
type CursorValue struct {
|
|||
|
CursorID int64 `json:"cursor_id"`
|
|||
|
CursorTime xtime.Time `json:"cursor_time"`
|
|||
|
}
|
|||
|
|
|||
|
// ParseCursor 从cursor_prev和cursor_next,判断请求的方向,以及生成cursor
|
|||
|
func ParseCursor(cursorPrev string, cursorNext string) (cursor CursorValue, directionNext bool, err error) {
|
|||
|
// 判断是向前还是向后查询
|
|||
|
directionNext = true
|
|||
|
cursorStr := cursorNext
|
|||
|
if len(cursorNext) == 0 && len(cursorPrev) > 0 {
|
|||
|
directionNext = false
|
|||
|
cursorStr = cursorPrev
|
|||
|
}
|
|||
|
// 解析cursor中的cursor_id
|
|||
|
if len(cursorStr) != 0 {
|
|||
|
var cursorData = []byte(cursorStr)
|
|||
|
err = json.Unmarshal(cursorData, &cursor)
|
|||
|
if err != nil {
|
|||
|
err = ecode.ReqParamErr
|
|||
|
return
|
|||
|
}
|
|||
|
}
|
|||
|
// 第一次请求的时候,携带的svid=0,需要转成max传给dao层
|
|||
|
if directionNext && cursor.CursorID == 0 {
|
|||
|
cursor.CursorID = MaxInt64
|
|||
|
cursor.CursorTime = xtime.Time(time.Now().Unix())
|
|||
|
}
|
|||
|
return
|
|||
|
}
|