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 } func (self *BunDatabase) InsertUserStatus( ctx context.Context, userStatus models.UserStatus, ) error { _, err := self.db.NewInsert(). Model(&userStatus). On("CONFLICT (username) DO NOTHING"). Exec(ctx) if err != nil { return err } return nil }