package psql import ( "database/sql" "kurumibot/database" "github.com/shopspring/decimal" "github.com/vinovest/sqlx" ) type Waifu struct { ID int OwnerID sql.NullInt64 `db:"owner_id"` Name string Rarity int ExpBonus decimal.Decimal `db:"exp_bonus"` MoneyBonus decimal.Decimal `db:"money_bonus"` MarketPrice decimal.Decimal `db:"market_price"` Fandom string Image 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, 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, 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, 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 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, 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) 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 }