add logout time and refactor
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
35
dataBase.go
35
dataBase.go
@ -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
|
||||
}
|
||||
|
||||
|
Reference in New Issue
Block a user