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 }