209 lines
5.2 KiB
Go
209 lines
5.2 KiB
Go
|
package model
|
||
|
|
||
|
import (
|
||
|
"encoding/json"
|
||
|
"errors"
|
||
|
xtime "go-common/library/time"
|
||
|
"strconv"
|
||
|
"strings"
|
||
|
)
|
||
|
|
||
|
// EmbedMid is
|
||
|
type EmbedMid struct {
|
||
|
Mid int64 `json:"mid"`
|
||
|
}
|
||
|
|
||
|
// PassportSummary is
|
||
|
type PassportSummary struct {
|
||
|
EmbedMid
|
||
|
TelStatus int64 `json:"tel_status"`
|
||
|
CountryID int64 `json:"country_id"`
|
||
|
JoinIP string `json:"join_ip"`
|
||
|
JoinTime string `json:"join_time"`
|
||
|
EmailSuffix string `json:"email_suffix"`
|
||
|
OriginType int64 `json:"origin_type"`
|
||
|
RegType int64 `json:"reg_type"`
|
||
|
}
|
||
|
|
||
|
// RelationStat is
|
||
|
type RelationStat struct {
|
||
|
EmbedMid
|
||
|
Following int64 `json:"following"`
|
||
|
Whisper int64 `json:"whisper"`
|
||
|
Black int64 `json:"black"`
|
||
|
Follower int64 `json:"follower"`
|
||
|
}
|
||
|
|
||
|
// BlockSummary is
|
||
|
type BlockSummary struct {
|
||
|
EmbedMid
|
||
|
BlockStatus int64 `json:"block_status"`
|
||
|
StartTime string `json:"start_time"`
|
||
|
EndTime string `json:"end_time"`
|
||
|
}
|
||
|
|
||
|
// MemberBase is
|
||
|
type MemberBase struct {
|
||
|
EmbedMid
|
||
|
Birthday string `json:"birthday"`
|
||
|
Face string `json:"face"`
|
||
|
Name string `json:"name"`
|
||
|
Rank int64 `json:"rank"`
|
||
|
Sex int64 `json:"sex"`
|
||
|
Sign string `json:"sign"`
|
||
|
}
|
||
|
|
||
|
// MemberOfficial is
|
||
|
type MemberOfficial struct {
|
||
|
EmbedMid
|
||
|
Role int64 `json:"role"`
|
||
|
Title string `json:"title"`
|
||
|
Description string `json:"description"`
|
||
|
}
|
||
|
|
||
|
// MemberExp is
|
||
|
type MemberExp struct {
|
||
|
EmbedMid
|
||
|
Exp int64 `json:"exp"`
|
||
|
}
|
||
|
|
||
|
// AccountSummary is
|
||
|
type AccountSummary struct {
|
||
|
MemberBase
|
||
|
|
||
|
Exp *MemberExp `json:"exp"`
|
||
|
Official *MemberOfficial `json:"official"`
|
||
|
RelationStat *RelationStat `json:"relation_stat"`
|
||
|
Block *BlockSummary `json:"block"`
|
||
|
Passport *PassportSummary `json:"passport"`
|
||
|
}
|
||
|
|
||
|
// NewAccountSummary is
|
||
|
func NewAccountSummary() *AccountSummary {
|
||
|
return &AccountSummary{
|
||
|
Exp: &MemberExp{},
|
||
|
Official: &MemberOfficial{},
|
||
|
Passport: &PassportSummary{},
|
||
|
RelationStat: &RelationStat{},
|
||
|
Block: &BlockSummary{},
|
||
|
}
|
||
|
}
|
||
|
|
||
|
func (sum *AccountSummary) String() string {
|
||
|
b, _ := json.Marshal(sum)
|
||
|
return string(b)
|
||
|
}
|
||
|
|
||
|
// Key is
|
||
|
func (e *EmbedMid) Key() (string, error) {
|
||
|
if e.Mid == 0 {
|
||
|
return "", errors.New("Empty mid")
|
||
|
}
|
||
|
return MidKey(e.Mid), nil
|
||
|
}
|
||
|
|
||
|
// Marshal is
|
||
|
func (b *MemberBase) Marshal() (map[string][]byte, error) {
|
||
|
data := map[string][]byte{
|
||
|
"birthday": []byte(b.Birthday),
|
||
|
"face": []byte(b.Face),
|
||
|
"mid": []byte(strconv.FormatInt(b.Mid, 10)),
|
||
|
"name": []byte(b.Name),
|
||
|
"rank": []byte(strconv.FormatInt(b.Rank, 10)),
|
||
|
"sex": []byte(strconv.FormatInt(b.Sex, 10)),
|
||
|
"sign": []byte(b.Sign),
|
||
|
}
|
||
|
return data, nil
|
||
|
}
|
||
|
|
||
|
// Marshal is
|
||
|
func (o *MemberOfficial) Marshal() (map[string][]byte, error) {
|
||
|
data := map[string][]byte{
|
||
|
"official.mid": []byte(strconv.FormatInt(o.Mid, 10)),
|
||
|
"official.role": []byte(strconv.FormatInt(o.Role, 10)),
|
||
|
"official.title": []byte(o.Title),
|
||
|
"official.description": []byte(o.Description),
|
||
|
}
|
||
|
return data, nil
|
||
|
}
|
||
|
|
||
|
// Marshal is
|
||
|
func (e *MemberExp) Marshal() (map[string][]byte, error) {
|
||
|
data := map[string][]byte{
|
||
|
"exp.mid": []byte(strconv.FormatInt(e.Mid, 10)),
|
||
|
"exp.exp": []byte(strconv.FormatInt(e.Exp, 10)),
|
||
|
}
|
||
|
return data, nil
|
||
|
}
|
||
|
|
||
|
// reverse returns its argument string reversed rune-wise left to right.
|
||
|
func reverse(s string) string {
|
||
|
r := []rune(s)
|
||
|
for i, j := 0, len(r)-1; i < len(r)/2; i, j = i+1, j-1 {
|
||
|
r[i], r[j] = r[j], r[i]
|
||
|
}
|
||
|
return string(r)
|
||
|
}
|
||
|
|
||
|
func rpad(s string, c string, l int) string {
|
||
|
dt := l - len(s)
|
||
|
if dt <= 0 {
|
||
|
return s
|
||
|
}
|
||
|
return s + strings.Repeat(c, dt)
|
||
|
}
|
||
|
|
||
|
// MidKey is
|
||
|
func MidKey(mid int64) string {
|
||
|
ms := strconv.FormatInt(mid, 10)
|
||
|
return rpad(reverse(ms), "0", 16)
|
||
|
}
|
||
|
|
||
|
// Marshal is
|
||
|
func (r *RelationStat) Marshal() (map[string][]byte, error) {
|
||
|
data := map[string][]byte{
|
||
|
"relation.mid": []byte(strconv.FormatInt(r.Mid, 10)),
|
||
|
"relation.following": []byte(strconv.FormatInt(r.Following, 10)),
|
||
|
"relation.whisper": []byte(strconv.FormatInt(r.Whisper, 10)),
|
||
|
"relation.black": []byte(strconv.FormatInt(r.Black, 10)),
|
||
|
"relation.follower": []byte(strconv.FormatInt(r.Follower, 10)),
|
||
|
}
|
||
|
return data, nil
|
||
|
}
|
||
|
|
||
|
// Marshal is
|
||
|
func (b *BlockSummary) Marshal() (map[string][]byte, error) {
|
||
|
data := map[string][]byte{
|
||
|
"block.mid": []byte(strconv.FormatInt(b.Mid, 10)),
|
||
|
"block.block_status": []byte(strconv.FormatInt(b.BlockStatus, 10)),
|
||
|
"block.start_time": []byte(b.StartTime),
|
||
|
"block.end_time": []byte(b.EndTime),
|
||
|
}
|
||
|
return data, nil
|
||
|
}
|
||
|
|
||
|
// Marshal is
|
||
|
func (p *PassportSummary) Marshal() (map[string][]byte, error) {
|
||
|
data := map[string][]byte{
|
||
|
"passport.mid": []byte(strconv.FormatInt(p.Mid, 10)),
|
||
|
"passport.tel_status": []byte(strconv.FormatInt(p.TelStatus, 10)),
|
||
|
"passport.country_id": []byte(strconv.FormatInt(p.CountryID, 10)),
|
||
|
"passport.join_ip": []byte(p.JoinIP),
|
||
|
"passport.join_time": []byte(p.JoinTime),
|
||
|
"passport.email_suffix": []byte(p.EmailSuffix),
|
||
|
"passport.reg_type": []byte(strconv.FormatInt(p.RegType, 10)),
|
||
|
"passport.origin_type": []byte(strconv.FormatInt(p.OriginType, 10)),
|
||
|
}
|
||
|
return data, nil
|
||
|
}
|
||
|
|
||
|
// Date convert timestamp to date
|
||
|
func Date(in xtime.Time) string {
|
||
|
return in.Time().Format("2006-01-02")
|
||
|
}
|
||
|
|
||
|
// Datetime convert timestamp to date time
|
||
|
func Datetime(in xtime.Time) string {
|
||
|
return in.Time().Format("2006-01-02 15:04:05")
|
||
|
}
|