55 lines
1.5 KiB
Go
55 lines
1.5 KiB
Go
package db
|
|
|
|
import (
|
|
"context"
|
|
|
|
"github.com/pkg/errors"
|
|
"github.com/uptrace/bun"
|
|
)
|
|
|
|
type Player struct {
|
|
bun.BaseModel `bun:"table:players,alias:p"`
|
|
|
|
ID int `bun:"id,pk,autoincrement" json:"id"`
|
|
SlapID *string `bun:"slap_id,unique" json:"slap_id"`
|
|
DiscordID string `bun:"discord_id,unique,notnull" json:"discord_id"`
|
|
UserID *int `bun:"user_id,unique" json:"user_id"`
|
|
|
|
User *User `bun:"rel:belongs-to,join:user_id=id" json:"-"`
|
|
}
|
|
|
|
func NewPlayer(ctx context.Context, tx bun.Tx, discordID string, audit *AuditMeta) (*Player, error) {
|
|
player := &Player{DiscordID: discordID}
|
|
user, err := GetUserByDiscordID(ctx, tx, discordID)
|
|
if err != nil && !IsBadRequest(err) {
|
|
return nil, errors.Wrap(err, "GetUserByDiscordID")
|
|
}
|
|
if user != nil {
|
|
player.UserID = &user.ID
|
|
}
|
|
err = Insert(tx, player).
|
|
WithAudit(audit, nil).Exec(ctx)
|
|
if err != nil {
|
|
return nil, errors.Wrap(err, "Insert")
|
|
}
|
|
return player, nil
|
|
}
|
|
|
|
func GetPlayer(ctx context.Context, tx bun.Tx, playerID int) (*Player, error) {
|
|
return GetByID[Player](tx, playerID).Relation("User").Get(ctx)
|
|
}
|
|
|
|
func UpdatePlayerSlapID(ctx context.Context, tx bun.Tx, playerID int, slapID string, audit *AuditMeta) error {
|
|
player, err := GetPlayer(ctx, tx, playerID)
|
|
if err != nil {
|
|
return errors.Wrap(err, "GetPlayer")
|
|
}
|
|
player.SlapID = &slapID
|
|
err = UpdateByID(tx, player.ID, player).Column("slap_id").
|
|
WithAudit(audit, nil).Exec(ctx)
|
|
if err != nil {
|
|
return errors.Wrap(err, "UpdateByID")
|
|
}
|
|
return nil
|
|
}
|