Files
inp2025/implements/bunDatabase.go
2025-09-10 11:35:31 +08:00

115 lines
2.0 KiB
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) GetUserStatuses(
ctx context.Context,
) ([]models.UserStatus, error) {
var ret []models.UserStatus
err := self.db.NewSelect().
Model(&ret).
Scan(ctx)
return ret, err
}
func (self *BunDatabase) GetRooms(
ctx context.Context,
) ([]models.Room, error) {
var ret []models.Room
err := self.db.NewSelect().
Model(&ret).
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)
return err
}
func (self *BunDatabase) InsertRoom(
ctx context.Context,
room models.Room,
) error {
_, err := self.db.NewInsert().
Model(&room).
Exec(ctx)
return err
}
func (self *BunDatabase) DeleteUserStatus(
ctx context.Context,
username string,
) error {
_, err := self.db.NewDelete().
Model(&models.UserStatus{Username: username}).
WherePK().
Exec(ctx)
return err
}
func (self *BunDatabase) DeleteRoom(
ctx context.Context,
roomId int,
) error {
_, err := self.db.NewDelete().
Model(&models.Room{Id: roomId}).
WherePK().
Exec(ctx)
return err
}