package database import ( "database/sql" "github.com/jmoiron/sqlx" ) type LocateCardResult struct { CardLocationId int CardName string SetCode string IsFoil bool IsPromo bool CollectorNumber string Language string StorageAreaId int StorageAreaType string StorageAreaName string Position int } func GetLocateResults(db *sql.DB, cardNames []string) ([]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 WHERE CardPrinting.Name IN (?);` 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() { 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 } 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 }