vyvanse/internal/dao/users.go

82 lines
1.9 KiB
Go
Raw Normal View History

2017-08-29 16:49:27 +00:00
package dao
import (
"context"
"git.xeserv.us/xena/gorqlite"
"github.com/opentracing/opentracing-go"
splog "github.com/opentracing/opentracing-go/log"
)
type Users struct {
conn gorqlite.Connection
}
func NewUsers(conn gorqlite.Connection) *Users {
return &Users{conn: conn}
}
func (u *Users) Migrate(ctx context.Context) error {
sp, ctx := opentracing.StartSpanFromContext(ctx, "users.migrate")
defer sp.Finish()
migrationDDL := []string{
2017-08-29 17:24:23 +00:00
`CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, discord_id TEXT UNIQUE, score INTEGER)`,
2017-08-29 16:49:27 +00:00
}
res, err := u.conn.Write(migrationDDL)
if err != nil {
sp.LogFields(splog.Error(err))
return err
}
for i, re := range res {
if re.Err != nil {
sp.LogFields(splog.Error(err))
return err
}
sp.LogFields(splog.Int("migration.step", i), splog.Float64("timing", re.Timing), splog.Int64("rows.affected", re.RowsAffected))
}
return nil
}
func (u *Users) Insert(ctx context.Context, discordID string) (int64, error) {
sp, ctx := opentracing.StartSpanFromContext(ctx, "users.insert")
defer sp.Finish()
sp.LogFields(splog.String("discord.id", discordID))
2017-08-29 17:24:23 +00:00
re, err := u.conn.WriteOne(gorqlite.NewPreparedStatement("INSERT INTO users (discord_id, score) VALUES (%s, 0)").Bind(discordID))
2017-08-29 16:49:27 +00:00
if err != nil {
sp.LogFields(splog.Error(err))
2017-08-29 17:24:23 +00:00
sp.LogFields(splog.Error(re.Err))
2017-08-29 16:49:27 +00:00
return -1, err
}
if re.Err != nil {
sp.LogFields(splog.Error(re.Err))
return -1, err
}
return re.LastInsertID, nil
}
2017-08-29 17:24:23 +00:00
func (u *Users) IncScore(ctx context.Context, discordID string) error {
sp, ctx := opentracing.StartSpanFromContext(ctx, "users.inc.score")
defer sp.Finish()
sp.LogFields(splog.String("discord.id", discordID))
re, err := u.conn.WriteOne(gorqlite.NewPreparedStatement("UPDATE users SET score = score + 1 WHERE discord_id=%s").Bind(discordID))
if err != nil {
sp.LogFields(splog.Error(err))
}
if re.Err != nil {
sp.LogFields(splog.Error(re.Err))
return re.Err
}
return nil
}