94 lines
2.4 KiB
Go
94 lines
2.4 KiB
Go
package psql
|
|
|
|
import (
|
|
"database/sql"
|
|
"kurumibot/laniakea"
|
|
|
|
"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 *laniakea.DatabaseContext) *WaifuRepository {
|
|
return &WaifuRepository{db: db.PostgresSQL}
|
|
}
|
|
|
|
func (rep *WaifuRepository) GetAll() ([]*Waifu, error) {
|
|
waifus, err := sqlx.List[*Waifu](rep.db, "SELECT waifus.* FROM waifus;")
|
|
if err != nil {
|
|
return nil, err
|
|
}
|
|
|
|
for _, waifu := range waifus {
|
|
if !waifu.OwnerID.Valid {
|
|
continue
|
|
}
|
|
waifu.Owner = new(User)
|
|
err = rep.db.Get(waifu.Owner, "SELECT * FROM users WHERE id=$1;", waifu.OwnerID.Int64)
|
|
}
|
|
return waifus, err
|
|
}
|
|
|
|
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
|
|
}
|
|
|
|
for _, waifu := range waifus {
|
|
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 (rep *WaifuRepository) GetFree() ([]*Waifu, error) {
|
|
waifus, err := sqlx.List[*Waifu](rep.db, "SELECT * FROM waifus WHERE owner_id IS NULL;")
|
|
return waifus, err
|
|
}
|
|
|
|
func (rep *WaifuRepository) GetFreeCount() (int64, error) {
|
|
var count int64 = 0
|
|
err := rep.db.QueryRow("SELECT COUNT(*) FROM waifus WHERE owner_id IS NULL;").Scan(&count)
|
|
return count, err
|
|
}
|
|
|
|
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 (rep *WaifuRepository) GetById(id int) (*Waifu, error) {
|
|
waifu := new(Waifu)
|
|
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 = new(User)
|
|
err = rep.db.Get(waifu.Owner, "SELECT * FROM users WHERE id=$1;", int(waifu.OwnerID.Int64))
|
|
return waifu, err
|
|
}
|