Implement search command
This commit is contained in:
parent
c0c290916a
commit
f7e0a713f6
|
@ -61,3 +61,39 @@ func GetLocateResults(db *sql.DB, cardNames []string) ([]LocateCardResult, error
|
|||
|
||||
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
|
||||
}
|
||||
|
|
|
@ -30,7 +30,7 @@ type SearchCriteria struct {
|
|||
type InsertSearchOptions map[string]string
|
||||
|
||||
func GetAllSearchOptions(db *sql.DB, searchCriteria SearchCriteria) (InsertSearchOptions, error) {
|
||||
var searchOptions InsertSearchOptions = make(map[string]string)
|
||||
var searchOptions InsertSearchOptions = make(InsertSearchOptions)
|
||||
|
||||
cardPrintings, err := database.GetAllCardPrintings(db)
|
||||
if err != nil {
|
||||
|
@ -61,6 +61,33 @@ func GetAllSearchOptions(db *sql.DB, searchCriteria SearchCriteria) (InsertSearc
|
|||
return searchOptions, err
|
||||
}
|
||||
|
||||
type StorageSearchOptions map[string]int
|
||||
|
||||
func GetAllStorageSearchOptions(db *sql.DB) (StorageSearchOptions, error) {
|
||||
var searchOptions StorageSearchOptions = make(StorageSearchOptions)
|
||||
|
||||
storedCards, err := database.GetAllStoredCards(db)
|
||||
if err != nil {
|
||||
return searchOptions, nil
|
||||
}
|
||||
|
||||
for _, storedCard := range storedCards {
|
||||
searchString := fmt.Sprintf("%s (%s %s) [%s]", storedCard.CardName, storedCard.SetCode, storedCard.CollectorNumber, storedCard.Language)
|
||||
|
||||
if storedCard.IsFoil {
|
||||
searchString += " FOIL"
|
||||
}
|
||||
|
||||
if storedCard.IsPromo {
|
||||
searchString += " PROMO"
|
||||
}
|
||||
|
||||
searchOptions[searchString] = storedCard.CardLocationId
|
||||
}
|
||||
|
||||
return searchOptions, nil
|
||||
}
|
||||
|
||||
func GenericSearch[pk string | int](options map[string]pk) (pk, string, error) {
|
||||
var value pk
|
||||
|
||||
|
|
|
@ -14,6 +14,7 @@ import (
|
|||
const (
|
||||
UpdateSubcommand string = "update"
|
||||
ImportSubcommand string = "import"
|
||||
SearchSubcommand string = "search"
|
||||
)
|
||||
|
||||
func main() {
|
||||
|
@ -29,15 +30,21 @@ func main() {
|
|||
// TODO: Decide in what form we need to retain this functionality if any
|
||||
//cli.MainCliLoop(db)
|
||||
|
||||
importCmd := flag.NewFlagSet("import", flag.ExitOnError)
|
||||
importCmd := flag.NewFlagSet(ImportSubcommand, flag.ExitOnError)
|
||||
storageArea := importCmd.String("storagearea", "", "The name of the StorageArea where cards should be imported.")
|
||||
|
||||
//searchCmd := flag.NewFlagSet(SearchSubcommand, flag.ExitOnError)
|
||||
//name := searchCmd.String("name", "", "The card name to search for.")
|
||||
|
||||
if len(flag.Args()) == 0 {
|
||||
fmt.Fprintln(os.Stderr, "Please specify a subcommand.")
|
||||
os.Exit(1)
|
||||
}
|
||||
|
||||
switch flag.Args()[0] {
|
||||
case UpdateSubcommand:
|
||||
cli.RunUpdateCheck(db)
|
||||
break
|
||||
case ImportSubcommand:
|
||||
importCmd.Parse(flag.Args()[1:])
|
||||
|
||||
|
@ -54,8 +61,10 @@ func main() {
|
|||
err = logic.ImportDelverLensCards(db, delverLensCards, storageAreaId)
|
||||
logic.Check(err)
|
||||
break
|
||||
case UpdateSubcommand:
|
||||
cli.RunUpdateCheck(db)
|
||||
case SearchSubcommand:
|
||||
searchOptions, err := logic.GetAllStorageSearchOptions(db)
|
||||
logic.Check(err)
|
||||
logic.GenericSearch(searchOptions)
|
||||
break
|
||||
default:
|
||||
fmt.Fprintf(os.Stderr, "Unrecognized subcommand: %s\n", os.Args[1])
|
||||
|
|
Loading…
Reference in New Issue