ai work
This commit is contained in:
@@ -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
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user