This commit is contained in:
2026-01-14 14:29:03 +03:00
parent 7d540962a1
commit 4dd87ddecc
17 changed files with 513 additions and 226 deletions

View File

@@ -1,57 +1,106 @@
package psql
import (
"database/sql"
"kurumibot/database"
"github.com/shopspring/decimal"
"github.com/vinovest/sqlx"
)
type Waifu struct {
ID int
OwnerID int
Owner *User
OwnerID sql.NullInt64 `db:"owner_id"`
Name string
Rarity int
ExpBonus decimal.Decimal
MoneyBonus decimal.Decimal
MarketPrice decimal.Decimal
ExpBonus decimal.Decimal `db:"exp_bonus"`
MoneyBonus decimal.Decimal `db:"money_bonus"`
MarketPrice decimal.Decimal `db:"market_price"`
Fandom string
Image string
RpPrompt string
RpPrompt string `db:"rp_prompt"`
Owner *User
}
type WaifuRepository struct {
db *sqlx.DB
}
func NewWaifuRepository(db *sqlx.DB) *WaifuRepository {
return &WaifuRepository{db: db}
}
func GetAllWaifus() ([]*Waifu, error) {
waifus := make([]*Waifu, 0)
tx := database.PostgresDatabase.Joins("Owner").Find(&waifus).Order("id")
return waifus, tx.Error
waifus, err := sqlx.List[*Waifu](
database.PostgresDatabase,
"SELECT waifus.* FROM waifus;",
)
if err != nil {
return nil, err
}
for _, waifu := range waifus {
if !waifu.OwnerID.Valid {
continue
}
waifu.Owner = new(User)
err = database.PostgresDatabase.Get(waifu.Owner, "SELECT * FROM users WHERE id=$1;", waifu.OwnerID.Int64)
}
return waifus, err
}
func GetUserWaifus(userId int) ([]*Waifu, error) {
waifus := make([]*Waifu, 0)
tx := database.PostgresDatabase.Find(&waifus, "owner_id = ?", userId).Order("id")
return waifus, tx.Error
waifus, err := sqlx.List[*Waifu](
database.PostgresDatabase,
"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
}
return waifus, nil
}
func GetFreeWaifus() ([]*Waifu, error) {
waifus := make([]*Waifu, 0)
tx := database.PostgresDatabase.Find(&waifus, "owner_id is null").Order("id")
return waifus, tx.Error
waifus, err := sqlx.List[*Waifu](
database.PostgresDatabase,
"SELECT * FROM waifus WHERE owner_id IS NULL;",
)
return waifus, err
}
func GetFreeWaifusCount() (int64, error) {
var count int64 = 0
tx := database.PostgresDatabase.Model(&Waifu{}).Where("owner_id is null").Count(&count)
return count, tx.Error
err := database.PostgresDatabase.QueryRow("SELECT COUNT(*) FROM waifus WHERE owner_id IS NULL;").Scan(&count)
return count, err
}
func GetFreeWaifusWithRarity(rarity int) ([]*Waifu, error) {
waifus := make([]*Waifu, 0)
tx := database.PostgresDatabase.Find(&waifus, "owner_id is null and rarity = ?", rarity)
return waifus, tx.Error
waifus, err := sqlx.List[*Waifu](
database.PostgresDatabase,
"SELECT * FROM waifus WHERE owner_id IS NULL AND rarity=$1;",
rarity,
)
return waifus, err
}
func GetWaifuById(id int) (*Waifu, error) {
waifu := new(Waifu)
tx := database.PostgresDatabase.Joins("Owner").Find(waifu, id)
return waifu, tx.Error
err := database.PostgresDatabase.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))
return waifu, err
}