TheMathemagicians/sevenkeys/database/locate.go

100 lines
2.5 KiB
Go
Raw Normal View History

package database
2024-09-07 23:24:24 +00:00
import (
"database/sql"
"github.com/jmoiron/sqlx"
)
type LocateCardResult struct {
2024-09-13 11:32:18 +00:00
CardLocationId int
CardName string
SetCode string
IsFoil bool
IsPromo bool
CollectorNumber string
Language string
2024-09-13 11:32:18 +00:00
StorageAreaId int
StorageAreaType string
StorageAreaName string
Position int
}
2024-09-07 23:24:24 +00:00
func GetLocateResults(db *sql.DB, cardNames []string) ([]LocateCardResult, error) {
var results []LocateCardResult
2024-09-13 11:32:18 +00:00
query := `SELECT CardLocation.Id,
CardPrinting.Name,
CardPrinting.SetCode,
CardPrinting.IsFoil,
CardPrinting.IsPromo,
CardPrinting.CollectorNumber,
CardPrinting.Language,
StorageArea.Id,
StorageArea.StorageType,
StorageArea.Name,
CardLocation.Position
FROM CardLocation
JOIN CardPrinting ON CardLocation.CardPrintingId = CardPrinting.Id
JOIN StorageArea ON CardLocation.StorageAreaId = StorageArea.Id
WHERE CardPrinting.Name IN (?);`
2024-09-07 23:24:24 +00:00
query, args, err := sqlx.In(query, cardNames)
if err != nil {
return results, err
}
rows, err := db.Query(query, args...)
defer rows.Close()
if err != nil {
return results, err
}
var result LocateCardResult
for rows.Next() {
2024-09-13 11:32:18 +00:00
err := rows.Scan(&result.CardLocationId, &result.CardName, &result.SetCode, &result.IsFoil, &result.IsPromo, &result.CollectorNumber, &result.Language, &result.StorageAreaId, &result.StorageAreaType, &result.StorageAreaName, &result.Position)
if err != nil {
return results, err
}
results = append(results, result)
}
return results, nil
}
2024-10-04 12:44:22 +00:00
func GetAllStoredCards(db *sql.DB) ([]LocateCardResult, error) {
var results []LocateCardResult
query := `SELECT CardLocation.Id,
CardPrinting.Name,
CardPrinting.SetCode,
CardPrinting.IsFoil,
CardPrinting.IsPromo,
CardPrinting.CollectorNumber,
CardPrinting.Language,
StorageArea.Id,
StorageArea.StorageType,
StorageArea.Name,
CardLocation.Position
FROM CardLocation
JOIN CardPrinting ON CardLocation.CardPrintingId = CardPrinting.Id
JOIN StorageArea ON CardLocation.StorageAreaId = StorageArea.Id`
rows, err := db.Query(query)
defer rows.Close()
if err != nil {
return results, err
}
var result LocateCardResult
for rows.Next() {
err := rows.Scan(&result.CardLocationId, &result.CardName, &result.SetCode, &result.IsFoil, &result.IsPromo, &result.CollectorNumber, &result.Language, &result.StorageAreaId, &result.StorageAreaType, &result.StorageAreaName, &result.Position)
if err != nil {
return results, err
}
results = append(results, result)
}
return results, nil
}