Draft: feat login
This commit is contained in:
83
implements/bunDatabase.go
Normal file
83
implements/bunDatabase.go
Normal file
@@ -0,0 +1,83 @@
|
||||
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) 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) DeleteUserStatus(
|
||||
ctx context.Context,
|
||||
username string,
|
||||
) error {
|
||||
_, err := self.db.NewDelete().
|
||||
Model(&models.UserStatus{Username: username}).
|
||||
WherePK().
|
||||
Exec(ctx)
|
||||
return err
|
||||
}
|
||||
Reference in New Issue
Block a user