hiling_go/util/cursor.go

55 lines
1.1 KiB
Go
Raw Normal View History

2024-08-19 07:40:01 +07:00
package util
import (
"encoding/base64"
"encoding/json"
"time"
)
type PaginationInfo struct {
NextCursor string `json:"next_cursor"`
PrevCursor string `json:"prev_cursor"`
}
type Cursor map[string]interface{}
func CreateCursor(id string, createdAt time.Time, pointsNext bool) Cursor {
return Cursor{
"id": id,
"created_at": createdAt,
"points_next": pointsNext,
}
}
func GeneratePager(next Cursor, prev Cursor) PaginationInfo {
return PaginationInfo{
NextCursor: encodeCursor(next),
PrevCursor: encodeCursor(prev),
}
}
func encodeCursor(cursor Cursor) string {
if len(cursor) == 0 {
return ""
}
serializedCursor, err := json.Marshal(cursor)
if err != nil {
return ""
}
encodedCursor := base64.StdEncoding.EncodeToString(serializedCursor)
return encodedCursor
}
func DecodeCursor(cursor string) (Cursor, error) {
decodedCursor, err := base64.StdEncoding.DecodeString(cursor)
if err != nil {
return nil, err
}
var cur Cursor
if err := json.Unmarshal(decodedCursor, &cur); err != nil {
return nil, err
}
return cur, nil
}