123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306 |
- package model
- import (
- "crypto/hmac"
- "crypto/sha1"
- "encoding/base64"
- "fmt"
- "math/rand"
- "net/url"
- "path/filepath"
- "strconv"
- "strings"
- "time"
- xtime "go-common/library/time"
- )
- const (
- _expMulti = 100
- level1 = 1
- level2 = 200
- level3 = 1500
- level4 = 4500
- level5 = 10800
- level6 = 28800
- levelMax = -1
- _URLNoFace = "http://static.hdslb.com/images/member/noface.gif"
- // ManagerLogID manager log id.
- ManagerLogID = 121
- //FaceCheckLogID is.
- FaceCheckLogID = 161
- // bfs facepri bucket
- _facepriKeyID = "8923aff2e1124bb2"
- _facepriKeySecret = "b237e8927823cc2984aee980123cb0"
- )
- // base audit type const.
- const (
- BaseAuditType = iota
- BaseAuditTypeFace
- BaseAuditTypeSign
- BaseAuditTypeName
- )
- // Base is.
- type Base struct {
- Mid int64 `json:"mid" gorm:"column:mid"`
- Name string `json:"name" gorm:"column:name"`
- Sex int64 `json:"sex" gorm:"column:sex"`
- Face string `json:"face" gorm:"column:face"`
- Sign string `json:"sign" gorm:"column:sign"`
- Rank int64 `json:"rank" gorm:"column:rank"`
- Birthday xtime.Time `json:"birthday" gorm:"column:birthday"`
- CTime xtime.Time `json:"ctime" gorm:"column:ctime"`
- MTime xtime.Time `json:"mtime" gorm:"column:mtime"`
- }
- // RandFaceURL get face URL
- func (b *Base) RandFaceURL() {
- if b.Face == "" {
- b.Face = _URLNoFace
- return
- }
- b.Face = fmt.Sprintf("http://i%d.hdslb.com%s", rand.Int63n(3), b.Face)
- }
- // Detail is.
- type Detail struct {
- Mid int64 `json:"mid" gorm:"column:mid"`
- Birthday xtime.Time `json:"birthday" gorm:"column:birthday"`
- Place int64 `json:"place" gorm:"column:place"`
- Marital int64 `json:"marital" gorm:"column:marital"`
- Dating int64 `json:"dating" gorm:"column:dating"`
- Tags string `json:"tags" gorm:"column:tags"`
- CTime xtime.Time `json:"ctime" gorm:"column:ctime"`
- MTime xtime.Time `json:"mtime" gorm:"column:mtime"`
- }
- // Exp is.
- type Exp struct {
- Mid int64 `json:"mid" gorm:"column:mid"`
- Exp int64 `json:"exp" gorm:"column:exp"`
- Flag uint32 `json:"flag" gorm:"column:flag"`
- AddTime xtime.Time `json:"addtime" gorm:"column:addtime"`
- CTime xtime.Time `json:"ctime" gorm:"column:ctime"`
- MTime xtime.Time `json:"mtime" gorm:"column:mtime"`
- }
- // Moral is.
- type Moral struct {
- Mid int64 `json:"mid" gorm:"column:mid"`
- Moral int64 `json:"moral" gorm:"column:moral"`
- Added int64 `json:"added" gorm:"column:added"`
- Deducted int64 `json:"deducted" gorm:"column:deducted"`
- LastRecoverDate xtime.Time `json:"last_recover_date" gorm:"colum:last_recover_date"`
- CTime xtime.Time `json:"ctime" gorm:"column:ctime"`
- MTime xtime.Time `json:"mtime" gorm:"column:mtime"`
- }
- // UserAddit is.
- type UserAddit struct {
- ID int64 `json:"id" gorm:"column:id"`
- Mid int64 `json:"mid" gorm:"column:mid"`
- FaceReject int64 `json:"face_reject" gorm:"colum:face_reject"`
- ViolationCount int64 `json:"violation_count" gorm:"colum:violation_count"`
- CTime xtime.Time `json:"ctime" gorm:"column:ctime"`
- MTime xtime.Time `json:"mtime" gorm:"column:mtime"`
- Remark string `json:"remark" gorm:"column:remark"`
- }
- // Level is.
- type Level struct {
- CurrentLevel int32 `json:"current_level"`
- CurrentMin int32 `json:"current_min"`
- CurrentExp int32 `json:"current_exp"`
- NextExp int32 `json:"next_exp"`
- }
- // Profile is.
- type Profile struct {
- Base Base `json:"base"`
- Detail Detail `json:"detail"`
- Exp Exp `json:"exp"`
- Level Level `json:"level"`
- Moral Moral `json:"moral"`
- Official Official `json:"official"`
- Coin Coin `json:"coin"`
- Addit UserAddit `json:"addit"`
- Realanme Realname `json:"realname"`
- }
- // Coin is.
- type Coin struct {
- Coins float64 `json:"coins"`
- }
- // UserLog is.
- type UserLog struct {
- Mid int64 `json:"mid"`
- IP string `json:"ip"`
- TS int64 `json:"ts"`
- Content map[string]string `json:"content"`
- }
- // FaceRecord is.
- type FaceRecord struct {
- ID int64 `json:"id"`
- Mid int64 `json:"mid"`
- ModifyTime xtime.Time `json:"modify_time"`
- ApplyTime xtime.Time `json:"apply_time"`
- NewFace string `json:"new_face"`
- OldFace string `json:"old_face"`
- Operator string `json:"operator"`
- Status int8 `json:"status"`
- }
- // BaseReview is.
- type BaseReview struct {
- Base
- Addit UserAddit `json:"addit"`
- Logs []AuditLog `json:"logs"`
- }
- // AddExpMsg is.
- type AddExpMsg struct {
- Event string `json:"event,omitempty"`
- Mid int64 `json:"mid,omitempty"`
- IP string `json:"ip,omitempty"`
- Ts int64 `json:"ts,omitempty"`
- }
- // BuildFaceURL is.
- func BuildFaceURL(raw string) string {
- if raw == "" {
- return _URLNoFace
- }
- ori, err := url.Parse(raw)
- if err != nil {
- return raw
- }
- if ori.Path == "/images/member/noface.gif" {
- return _URLNoFace
- }
- if strings.HasPrefix(ori.Path, "/bfs/facepri") {
- token := authorize(_facepriKeyID, _facepriKeySecret, "GET", "facepri", filepath.Base(ori.Path), time.Now().Unix())
- p := url.Values{}
- p.Set("token", token)
- ori.RawQuery = p.Encode()
- }
- if ori.Hostname() == "" {
- ori.Host = fmt.Sprintf("i%d.hdslb.com", rand.Int63n(3))
- ori.Scheme = "http"
- }
- return ori.String()
- }
- // authorize returns authorization for upload file to bfs
- func authorize(key, secret, method, bucket, filename string, expire int64) string {
- content := fmt.Sprintf("%s\n%s\n%s\n%d\n", method, bucket, filename, expire)
- mac := hmac.New(sha1.New, []byte(secret))
- mac.Write([]byte(content))
- signature := base64.StdEncoding.EncodeToString(mac.Sum(nil))
- return fmt.Sprintf("%s:%s:%d", key, signature, expire)
- }
- // BuildFaceURL is.
- func (fr *FaceRecord) BuildFaceURL() {
- fr.NewFace = BuildFaceURL(fr.NewFace)
- fr.OldFace = BuildFaceURL(fr.OldFace)
- }
- // ParseStatus is.
- func ParseStatus(s string) int8 {
- st, _ := strconv.ParseInt(s, 10, 8)
- return int8(st)
- }
- // ParseLogTime is.
- func ParseLogTime(ts string) (xt xtime.Time, err error) {
- var (
- t time.Time
- )
- if t, err = time.ParseInLocation("2006-01-02 15:04:05", ts, time.Local); err != nil {
- return
- }
- xt.Scan(t)
- return
- }
- // ParseApplyTime is.
- func ParseApplyTime(ts string) xtime.Time {
- ti, _ := strconv.ParseInt(ts, 10, 64)
- return xtime.Time(ti)
- }
- // NewProfile is.
- func NewProfile() *Profile {
- return &Profile{}
- }
- // FaceRecordList is
- type FaceRecordList []*FaceRecord
- // Filter is
- func (frl FaceRecordList) Filter(con func(*FaceRecord) bool) FaceRecordList {
- res := make(FaceRecordList, 0)
- for _, fr := range frl {
- if con(fr) {
- res = append(res, fr)
- }
- }
- return res
- }
- // Paginate is
- func (frl FaceRecordList) Paginate(skip int, size int) FaceRecordList {
- if skip > len(frl) {
- skip = len(frl)
- }
- end := skip + size
- if end > len(frl) {
- end = len(frl)
- }
- return frl[skip:end]
- }
- // FromExp is.
- func (lv *Level) FromExp(e *Exp) {
- exp := e.Exp / _expMulti
- switch {
- case exp < level1:
- lv.CurrentLevel = 0
- lv.CurrentMin = 0
- lv.NextExp = level1
- case exp < level2:
- lv.CurrentLevel = 1
- lv.CurrentMin = level1
- lv.NextExp = level2
- case exp < level3:
- lv.CurrentLevel = 2
- lv.CurrentMin = level2
- lv.NextExp = level3
- case exp < level4:
- lv.CurrentLevel = 3
- lv.CurrentMin = level3
- lv.NextExp = level4
- case exp < level5:
- lv.CurrentLevel = 4
- lv.CurrentMin = level4
- lv.NextExp = level5
- case exp < level6:
- lv.CurrentLevel = 5
- lv.CurrentMin = level5
- lv.NextExp = level6
- default:
- lv.CurrentLevel = 6
- lv.CurrentMin = level6
- lv.NextExp = levelMax
- }
- lv.CurrentExp = int32(exp)
- }
|