add logout time and refactor
All checks were successful
continuous-integration/drone/push Build is passing

This commit is contained in:
Timofey.Kovalev
2021-06-22 20:20:09 +03:00
parent f3b56bb7b7
commit 34c5271a62
3 changed files with 31 additions and 16 deletions

View File

@ -62,7 +62,8 @@ func (db *dbLayer) execInTransaction(ctx context.Context, query string, args ...
type Player struct {
id string
name string
lastOnline time.Time
lastLogin time.Time
lastLogout time.Time
onlineDuration time.Duration
deaths int
level int
@ -75,18 +76,26 @@ type scannable interface {
func fetchPlayer(r scannable, p *Player) error {
var (
err error
lastOnline string
lastLogin string
lastLogout *string
onlineDuration int
)
err = r.Scan(&p.id, &p.name, &lastOnline, &onlineDuration, &p.deaths, &p.level)
err = r.Scan(&p.id, &p.name, &lastLogin, &onlineDuration, &p.deaths, &p.level, &lastLogout)
if err != nil {
return errors.Wrap(err, "Failed to fetch data base")
}
p.lastOnline, err = time.Parse(time.RFC3339, lastOnline)
p.lastLogin, err = time.Parse(time.RFC3339, lastLogin)
if err != nil {
return errors.Wrapf(err, "Failed to parse date [%s]", lastOnline)
return errors.Wrapf(err, "Failed to parse date [%s]", lastLogin)
}
if lastLogout != nil {
p.lastLogout, err = time.Parse(time.RFC3339, lastLogin)
if err != nil {
return errors.Wrapf(err, "Failed to parse date [%s]", lastLogout)
}
}
p.onlineDuration = time.Second * time.Duration(onlineDuration)
@ -97,7 +106,7 @@ func fetchPlayer(r scannable, p *Player) error {
func (db *dbLayer) getPlayers(ctx context.Context) ([]Player, error) {
var players []Player
query := "SELECT id, name, last_login, online_duration, deaths, level FROM players"
query := "SELECT id, name, last_login, online_duration, deaths, level, last_logout FROM players"
rows, err := db.db.QueryContext(ctx, query)
if err != nil {
@ -121,7 +130,7 @@ func (db *dbLayer) getPlayers(ctx context.Context) ([]Player, error) {
}
func (db *dbLayer) getPlayerByID(ctx context.Context, id string) (*Player, error) {
query := "SELECT id, name, last_login, online_duration, deaths, level FROM players WHERE id = $1"
query := "SELECT id, name, last_login, online_duration, deaths, level, last_logout FROM players WHERE id = $1"
row := db.db.QueryRowContext(ctx, query, id)
if err := row.Err(); err != nil {
@ -140,7 +149,7 @@ func (db *dbLayer) getPlayerByID(ctx context.Context, id string) (*Player, error
}
func (db *dbLayer) getPlayerByName(ctx context.Context, name string) (*Player, error) {
query := "SELECT id, name, last_login, online_duration, deaths, level FROM players WHERE name = $1 LIMIT 1"
query := "SELECT id, name, last_login, online_duration, deaths, level, last_logout FROM players WHERE name = $1 LIMIT 1"
row := db.db.QueryRowContext(ctx, query, name)
if err := row.Err(); err != nil {
@ -175,19 +184,19 @@ func (db *dbLayer) getKillsByPlayerID(ctx context.Context, playerID string) (int
return killsNum, nil
}
func (db *dbLayer) createPlayer(ctx context.Context, name string, lastOnline time.Time) (*Player, error) {
func (db *dbLayer) createPlayer(ctx context.Context, name string, lastLogin time.Time) (*Player, error) {
id := uuid()
err := db.execInTransaction(ctx, "INSERT INTO players (id, name, last_login) VALUES ($1, $2, $3)", id, name, lastOnline.Format(time.RFC3339))
err := db.execInTransaction(ctx, "INSERT INTO players (id, name, last_login) VALUES ($1, $2, $3)", id, name, lastLogin.Format(time.RFC3339))
if err != nil {
return nil, err
}
return &Player{
id: id,
name: name,
lastOnline: lastOnline,
id: id,
name: name,
lastLogin: lastLogin,
}, nil
}