52 lines
917 B
Go
52 lines
917 B
Go
package implements
|
|
|
|
import (
|
|
"context"
|
|
|
|
"gitea.konchin.com/ytshih/inp2025/game/models"
|
|
"gitea.konchin.com/ytshih/inp2025/game/types"
|
|
"github.com/uptrace/bun"
|
|
)
|
|
|
|
type BunDatabase struct {
|
|
db *bun.DB
|
|
}
|
|
|
|
func NewBunDatabase(bunDB *bun.DB) *BunDatabase {
|
|
return &BunDatabase{db: bunDB}
|
|
}
|
|
|
|
func (self *BunDatabase) GetUser(
|
|
ctx context.Context,
|
|
username string,
|
|
) (models.User, error) {
|
|
var ret models.User
|
|
err := self.db.NewSelect().
|
|
Model(&ret).
|
|
Where("username = ?", username).
|
|
Scan(ctx)
|
|
return ret, err
|
|
}
|
|
|
|
func (self *BunDatabase) InsertUser(
|
|
ctx context.Context,
|
|
user models.User,
|
|
) error {
|
|
res, err := self.db.NewInsert().
|
|
Model(&user).
|
|
On("CONFLICT (username) DO NOTHING").
|
|
Exec(ctx)
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if cnt, err := res.RowsAffected(); err != nil || cnt == 0 {
|
|
if err != nil {
|
|
return err
|
|
}
|
|
if cnt == 0 {
|
|
return types.UsernameConflictError
|
|
}
|
|
}
|
|
return nil
|
|
}
|