DelayNoMore/battle_srv/models/player_login.go
2022-09-20 23:52:55 +08:00

111 lines
2.7 KiB
Go

package models
import (
"database/sql"
. "server/common"
"server/common/utils"
"server/storage"
sq "github.com/Masterminds/squirrel"
)
type PlayerLogin struct {
CreatedAt int64 `db:"created_at"`
DeletedAt NullInt64 `db:"deleted_at"`
DisplayName NullString `db:"display_name"`
Avatar string `db:"avatar"`
FromPublicIP NullString `db:"from_public_ip"`
ID int `db:"id"`
IntAuthToken string `db:"int_auth_token"`
PlayerID int `db:"player_id"`
UpdatedAt int64 `db:"updated_at"`
}
func (p *PlayerLogin) Insert() error {
result, err := insert("player_login", []string{"created_at", "display_name",
"from_public_ip", "int_auth_token", "player_id", "updated_at", "avatar"},
[]interface{}{p.CreatedAt, p.DisplayName, p.FromPublicIP, p.IntAuthToken,
p.PlayerID, p.UpdatedAt, p.Avatar})
if err != nil {
return err
}
id, err := result.LastInsertId()
if err != nil {
return err
}
p.ID = int(id)
return nil
}
func GetPlayerLoginByToken(token string) (*PlayerLogin, error) {
var p PlayerLogin
err := getObj("player_login",
sq.Eq{"int_auth_token": token, "deleted_at": nil},
&p)
if err == sql.ErrNoRows {
return nil, nil
}
return &p, nil
}
func GetPlayerLoginByPlayerId(playerId int) (*PlayerLogin, error) {
var p PlayerLogin
err := getObj("player_login",
sq.Eq{"player_id": playerId, "deleted_at": nil},
&p)
if err == sql.ErrNoRows {
return nil, nil
}
return &p, nil
}
func GetPlayerIdByToken(token string) (int, error) {
var p PlayerLogin
err := getFields("player_login", []string{"player_id"},
sq.Eq{"int_auth_token": token, "deleted_at": nil},
&p)
if err == sql.ErrNoRows {
return 0, nil
}
return p.PlayerID, nil
}
// TODO 封装到helper
func DelPlayerLoginByToken(token string) error {
query, args, err := sq.Update("player_login").Set("deleted_at", utils.UnixtimeMilli()).
Where(sq.Eq{"int_auth_token": token}).ToSql()
if err != nil {
return err
}
//Logger.Debug(query, args)
_, err = storage.MySQLManagerIns.Exec(query, args...)
if err == sql.ErrNoRows {
return nil
}
if err != nil {
return err
}
return nil
}
func EnsuredPlayerLoginByToken(id int, token string) (bool, error) {
return exist("player_login", sq.Eq{"int_auth_token": token, "deleted_at": nil, "player_id": id})
}
func EnsuredPlayerLoginById(id int) (bool, error) {
return exist("player_login", sq.Eq{"player_id": id, "deleted_at": nil})
}
func CleanExpiredPlayerLoginToken() error {
now := utils.UnixtimeMilli()
max := now - int64(Constants.Player.IntAuthTokenTTLSeconds*1000)
query, args, err := sq.Update("player_login").Set("deleted_at", now).
Where(sq.LtOrEq{"created_at": max}).ToSql()
if err != nil {
return err
}
_, err = storage.MySQLManagerIns.Exec(query, args...)
return err
}