mirror of
https://github.com/genxium/DelayNoMore
synced 2025-04-04 06:01:24 +00:00
111 lines
2.7 KiB
Go
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
|
|
}
|