You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.4 KiB
53 lines
1.4 KiB
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 |
|
}
|
|
|