bilibili-backup/app/service/main/usersuit/model/invite.go
2019-04-22 02:59:20 +00:00

82 lines
1.7 KiB
Go

package model
import (
xtime "go-common/library/time"
)
const (
// StatusOk ok
StatusOk = 0
// StatusUsed used
StatusUsed = 1
// StatusExpires expire
StatusExpires = 2
)
// Invite invaite
type Invite struct {
Status int64 `json:"status"`
Mid int64 `json:"mid"`
Code string `json:"invite_code"`
IP uint32 `json:"-"` // legacy IP field
IPng []byte `json:"-"`
Ctime xtime.Time `json:"buy_time"`
Expires int64 `json:"expires"`
Imid int64 `json:"invited_mid,omitempty"`
UsedAt int64 `json:"used_at,omitempty"`
Mtime xtime.Time `json:"-"`
}
// FillStatus fill status
func (inv *Invite) FillStatus(now int64) {
if inv.Used() {
inv.Status = StatusUsed
return
}
if inv.Expired(now) {
inv.Status = StatusExpires
return
}
inv.Status = StatusOk
}
// Used use
func (inv *Invite) Used() bool {
return inv.UsedAt > 0 && inv.Imid > 0
}
// Expired expire
func (inv *Invite) Expired(now int64) bool {
return now > inv.Expires
}
// SortInvitesByCtimeDesc sort
type SortInvitesByCtimeDesc []*Invite
// Len len
func (invs SortInvitesByCtimeDesc) Len() int {
return len(invs)
}
// Less less
func (invs SortInvitesByCtimeDesc) Less(i, j int) bool {
return int64(invs[i].Ctime) > int64(invs[j].Ctime)
}
// Swap swap
func (invs SortInvitesByCtimeDesc) Swap(i, j int) {
tmp := invs[i]
invs[i] = invs[j]
invs[j] = tmp
}
// InviteStat stat
type InviteStat struct {
Mid int64 `json:"mid"`
CurrentLimit int64 `json:"current_limit"`
CurrentBought int64 `json:"current_bought"`
TotalBought int64 `json:"total_bought"`
TotalUsed int64 `json:"total_used"`
InviteCodes []*Invite `json:"invite_codes"`
}