all database switched to repository model. some other fixes and features
This commit is contained in:
@@ -25,7 +25,8 @@ type RPUser struct {
|
||||
UserID int64 `db:"user_id"`
|
||||
UserPrompt string `db:"user_prompt"`
|
||||
SelectedPreset string `db:"selected_preset"`
|
||||
UsedTokens int64 `db:"used_tokens"`
|
||||
Preset *RPGeneralPreset
|
||||
UsedTokens int64 `db:"used_tokens"`
|
||||
}
|
||||
|
||||
type RPRepository struct {
|
||||
@@ -51,6 +52,10 @@ func (rep *RPRepository) CreateUser(id int64) (*RPUser, error) {
|
||||
func (rep *RPRepository) GetUser(id int64) (*RPUser, error) {
|
||||
user := new(RPUser)
|
||||
err := rep.db.Get(user, "SELECT * FROM rp_users WHERE user_id=$1", id)
|
||||
if err != nil {
|
||||
return user, err
|
||||
}
|
||||
user.Preset, err = rep.GetPreset(user.SelectedPreset)
|
||||
return user, err
|
||||
}
|
||||
func (rep *RPRepository) UpdateUser(user *RPUser) error {
|
||||
|
||||
@@ -4,7 +4,7 @@ import (
|
||||
"context"
|
||||
"database/sql"
|
||||
"errors"
|
||||
"kurumibot/database"
|
||||
"kurumibot/laniakea"
|
||||
"math"
|
||||
"time"
|
||||
|
||||
@@ -51,42 +51,46 @@ type User struct {
|
||||
Fraction *Fraction
|
||||
}
|
||||
|
||||
func GetOrCreateUser(tgId int, name string) (*User, error) {
|
||||
user, err := GetUser(tgId)
|
||||
type UserRepository struct {
|
||||
db *sqlx.DB
|
||||
}
|
||||
|
||||
func NewUserRepository(db *laniakea.DatabaseContext) *UserRepository {
|
||||
return &UserRepository{db: db.PostgresSQL}
|
||||
}
|
||||
|
||||
func (rep *UserRepository) GetOrCreate(tgId int, name string) (*User, error) {
|
||||
user, err := rep.GetById(tgId)
|
||||
if errors.Is(err, sql.ErrNoRows) {
|
||||
_, err = CreateUser(tgId, name)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
user, err = GetUser(tgId)
|
||||
user, err = rep.Create(tgId, name)
|
||||
}
|
||||
return user, err
|
||||
}
|
||||
|
||||
func CreateUser(id int, name string) (*User, error) {
|
||||
func (rep *UserRepository) Create(id int, name string) (*User, error) {
|
||||
user := new(User)
|
||||
err := database.PostgresDatabase.Get(user, "INSERT INTO users (id, name) VALUES (?, ?) RETURNING *;", id, name)
|
||||
err := rep.db.Get(user, "INSERT INTO users (id, name) VALUES (?, ?) RETURNING *;", id, name)
|
||||
return user, err
|
||||
}
|
||||
|
||||
func GetUser(telegramId int) (*User, error) {
|
||||
func (rep *UserRepository) GetById(telegramId int) (*User, error) {
|
||||
user := new(User)
|
||||
err := sqlx.Transact(database.PostgresDatabase, func(ctx context.Context, db sqlx.Queryable) error {
|
||||
err := database.PostgresDatabase.Get(user, "SELECT * FROM users WHERE id=$1;", telegramId)
|
||||
err := sqlx.Transact(rep.db, func(ctx context.Context, db sqlx.Queryable) error {
|
||||
err := rep.db.Get(user, "SELECT * FROM users WHERE id=$1;", telegramId)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
user.Group = new(Group)
|
||||
err = database.PostgresDatabase.Get(user.Group, "SELECT * FROM groups WHERE id=$1;", user.GroupID)
|
||||
err = rep.db.Get(user.Group, "SELECT * FROM groups WHERE id=$1;", user.GroupID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
user.Work = new(Work)
|
||||
err = database.PostgresDatabase.Get(user.Work, "SELECT * FROM works WHERE id=$1;", user.WorkID)
|
||||
err = rep.db.Get(user.Work, "SELECT * FROM works WHERE id=$1;", user.WorkID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
shopRep := NewShopRepository(database.PostgresDatabase)
|
||||
shopRep := NewShopRepository(rep.db)
|
||||
if user.AutoID.Valid {
|
||||
user.Auto, err = shopRep.GetAuto(user.AutoID.Int32)
|
||||
if err != nil {
|
||||
@@ -112,13 +116,13 @@ func GetUser(telegramId int) (*User, error) {
|
||||
}
|
||||
}
|
||||
if user.PairID.Valid {
|
||||
user.Pair, err = GetUser(int(user.PairID.Int64))
|
||||
user.Pair, err = rep.GetById(int(user.PairID.Int64))
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
if user.FractionID.Valid {
|
||||
fractionRep := NewFractionRepository(database.PostgresDatabase)
|
||||
fractionRep := NewFractionRepository(rep.db)
|
||||
user.Fraction, err = fractionRep.GetById(user.FractionID.Int32)
|
||||
if err != nil {
|
||||
return err
|
||||
@@ -129,8 +133,8 @@ func GetUser(telegramId int) (*User, error) {
|
||||
return user, err
|
||||
}
|
||||
|
||||
func UpdateUser(user *User) (*User, error) {
|
||||
_, err := database.PostgresDatabase.NamedExec(
|
||||
func (rep *UserRepository) Update(user *User) (*User, error) {
|
||||
_, err := rep.db.NamedExec(
|
||||
`UPDATE users SET balance=:balance, name=:name, group_id=:group_id, level=:level, exp=:exp,
|
||||
work_id=:work_id, work_time=:work_time, auto_id=:auto_id, business_id=:business_id,
|
||||
maid_id=:maid_id, miner_id=:miner_id, income_time=:income_time, btc=:btc, invested=:invested,
|
||||
@@ -143,7 +147,7 @@ func UpdateUser(user *User) (*User, error) {
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
return GetUser(user.ID)
|
||||
return rep.GetById(user.ID)
|
||||
}
|
||||
|
||||
func GetAllUsers() ([]*User, error) {
|
||||
|
||||
@@ -2,7 +2,7 @@ package psql
|
||||
|
||||
import (
|
||||
"database/sql"
|
||||
"kurumibot/database"
|
||||
"kurumibot/laniakea"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
"github.com/vinovest/sqlx"
|
||||
@@ -26,15 +26,12 @@ type WaifuRepository struct {
|
||||
db *sqlx.DB
|
||||
}
|
||||
|
||||
func NewWaifuRepository(db *sqlx.DB) *WaifuRepository {
|
||||
return &WaifuRepository{db: db}
|
||||
func NewWaifuRepository(db *laniakea.DatabaseContext) *WaifuRepository {
|
||||
return &WaifuRepository{db: db.PostgresSQL}
|
||||
}
|
||||
|
||||
func GetAllWaifus() ([]*Waifu, error) {
|
||||
waifus, err := sqlx.List[*Waifu](
|
||||
database.PostgresDatabase,
|
||||
"SELECT waifus.* FROM waifus;",
|
||||
)
|
||||
func (rep *WaifuRepository) GetAll() ([]*Waifu, error) {
|
||||
waifus, err := sqlx.List[*Waifu](rep.db, "SELECT waifus.* FROM waifus;")
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
@@ -44,63 +41,53 @@ func GetAllWaifus() ([]*Waifu, error) {
|
||||
continue
|
||||
}
|
||||
waifu.Owner = new(User)
|
||||
err = database.PostgresDatabase.Get(waifu.Owner, "SELECT * FROM users WHERE id=$1;", waifu.OwnerID.Int64)
|
||||
err = rep.db.Get(waifu.Owner, "SELECT * FROM users WHERE id=$1;", waifu.OwnerID.Int64)
|
||||
}
|
||||
return waifus, err
|
||||
}
|
||||
|
||||
func GetUserWaifus(userId int) ([]*Waifu, error) {
|
||||
waifus, err := sqlx.List[*Waifu](
|
||||
database.PostgresDatabase,
|
||||
"SELECT waifus.* FROM waifus WHERE owner_id=$1;",
|
||||
userId,
|
||||
)
|
||||
func (rep *WaifuRepository) GetByUserId(userId int) ([]*Waifu, error) {
|
||||
waifus, err := sqlx.List[*Waifu](rep.db, "SELECT waifus.* FROM waifus WHERE owner_id=$1;", userId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
|
||||
user, err := GetUser(userId)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
for _, waifu := range waifus {
|
||||
waifu.Owner = user
|
||||
waifu.Owner = new(User)
|
||||
err = rep.db.Get(waifu.Owner, "SELECT * FROM users WHERE id=$1;", waifu.OwnerID.Int64)
|
||||
if err != nil {
|
||||
return waifus, err
|
||||
}
|
||||
}
|
||||
return waifus, nil
|
||||
}
|
||||
|
||||
func GetFreeWaifus() ([]*Waifu, error) {
|
||||
waifus, err := sqlx.List[*Waifu](
|
||||
database.PostgresDatabase,
|
||||
"SELECT * FROM waifus WHERE owner_id IS NULL;",
|
||||
)
|
||||
func (rep *WaifuRepository) GetFree() ([]*Waifu, error) {
|
||||
waifus, err := sqlx.List[*Waifu](rep.db, "SELECT * FROM waifus WHERE owner_id IS NULL;")
|
||||
return waifus, err
|
||||
}
|
||||
|
||||
func GetFreeWaifusCount() (int64, error) {
|
||||
func (rep *WaifuRepository) GetFreeCount() (int64, error) {
|
||||
var count int64 = 0
|
||||
err := database.PostgresDatabase.QueryRow("SELECT COUNT(*) FROM waifus WHERE owner_id IS NULL;").Scan(&count)
|
||||
err := rep.db.QueryRow("SELECT COUNT(*) FROM waifus WHERE owner_id IS NULL;").Scan(&count)
|
||||
return count, err
|
||||
}
|
||||
|
||||
func GetFreeWaifusWithRarity(rarity int) ([]*Waifu, error) {
|
||||
waifus, err := sqlx.List[*Waifu](
|
||||
database.PostgresDatabase,
|
||||
"SELECT * FROM waifus WHERE owner_id IS NULL AND rarity=$1;",
|
||||
rarity,
|
||||
)
|
||||
func (rep *WaifuRepository) GetFreeByRarity(rarity int) ([]*Waifu, error) {
|
||||
waifus, err := sqlx.List[*Waifu](rep.db, "SELECT * FROM waifus WHERE owner_id IS NULL AND rarity=$1;", rarity)
|
||||
return waifus, err
|
||||
}
|
||||
|
||||
func GetWaifuById(id int) (*Waifu, error) {
|
||||
func (rep *WaifuRepository) GetById(id int) (*Waifu, error) {
|
||||
waifu := new(Waifu)
|
||||
err := database.PostgresDatabase.Get(waifu, "SELECT * FROM waifus WHERE id=$1;", id)
|
||||
err := rep.db.Get(waifu, "SELECT * FROM waifus WHERE id=$1;", id)
|
||||
if err != nil {
|
||||
return nil, err
|
||||
}
|
||||
if !waifu.OwnerID.Valid {
|
||||
return waifu, err
|
||||
}
|
||||
waifu.Owner, err = GetUser(int(waifu.OwnerID.Int64))
|
||||
waifu.Owner = new(User)
|
||||
err = rep.db.Get(waifu, "SELECT * FROM users WHERE id=$1;", int(waifu.OwnerID.Int64))
|
||||
return waifu, err
|
||||
}
|
||||
|
||||
@@ -2,8 +2,10 @@ package psql
|
||||
|
||||
import (
|
||||
"kurumibot/database"
|
||||
"kurumibot/laniakea"
|
||||
|
||||
"github.com/shopspring/decimal"
|
||||
"github.com/vinovest/sqlx"
|
||||
)
|
||||
|
||||
type Work struct {
|
||||
@@ -15,13 +17,21 @@ type Work struct {
|
||||
MaxExp int `db:"max_exp"`
|
||||
}
|
||||
|
||||
func GetWorkById(id int) (Work, error) {
|
||||
type WorkRepository struct {
|
||||
db *sqlx.DB
|
||||
}
|
||||
|
||||
func NewWorkRepository(db *laniakea.DatabaseContext) *WorkRepository {
|
||||
return &WorkRepository{db: db.PostgresSQL}
|
||||
}
|
||||
|
||||
func (rep *WorkRepository) GetById(id int) (Work, error) {
|
||||
work := Work{}
|
||||
err := database.PostgresDatabase.Get(&work, "SELECT * FROM works WHERE id = $1;", id)
|
||||
return work, err
|
||||
}
|
||||
|
||||
func GetAllWorks() ([]Work, error) {
|
||||
func (rep *WorkRepository) GetAll() ([]Work, error) {
|
||||
works := make([]Work, 0)
|
||||
err := database.PostgresDatabase.Select(&works, "SELECT * FROM works;")
|
||||
return works, err
|
||||
|
||||
Reference in New Issue
Block a user