From d107a92b54d2b0459af265a8ab5896dbfb0dea03 Mon Sep 17 00:00:00 2001 From: The Magician Date: Fri, 13 Dec 2024 18:09:15 +0000 Subject: [PATCH] Update CardPrinting to ScryfallCard --- sevenkeys/database/card.go | 65 ------------------------- sevenkeys/database/scryfallcard.go | 78 ++++++++++++++++++++++++++++++ sevenkeys/logic/filter.go | 19 +++----- sevenkeys/logic/locate.go | 14 ++---- sevenkeys/logic/search.go | 21 ++++---- sevenkeys/main.go | 18 ++++--- sevenkeys/update/scryfall.go | 8 +-- 7 files changed, 114 insertions(+), 109 deletions(-) delete mode 100644 sevenkeys/database/card.go create mode 100644 sevenkeys/database/scryfallcard.go diff --git a/sevenkeys/database/card.go b/sevenkeys/database/card.go deleted file mode 100644 index b5d8a2c..0000000 --- a/sevenkeys/database/card.go +++ /dev/null @@ -1,65 +0,0 @@ -package database - -import ( - "database/sql" -) - -type CardPrinting struct { - Id string - Name string - SetCode string - IsFoil bool - IsPromo bool - CollectorNumber string - ImageUrl string - Language string -} - -func InsertCardPrinting(db *sql.DB, cardPrinting CardPrinting) error { - query := `INSERT INTO CardPrinting ( - Id, - Name, - SetCode, - IsFoil, - IsPromo, - CollectorNumber, - ImageUrl, - Language) - VALUES (?, ?, ?, ?, ?, ?, ?, ?);` - - insert, err := db.Prepare(query) - defer insert.Close() - if err != nil { - return err - } - - _, err = insert.Exec(cardPrinting.Id, cardPrinting.Name, cardPrinting.SetCode, cardPrinting.IsFoil, cardPrinting.IsPromo, cardPrinting.CollectorNumber, cardPrinting.ImageUrl, cardPrinting.Language) - if err != nil { - return err - } - - return nil -} - -func GetAllCardPrintings(db *sql.DB) ([]CardPrinting, error) { - var cardPrintings []CardPrinting - - query := `SELECT Id, Name, SetCode, IsFoil, IsPromo, CollectorNumber, Language FROM CardPrinting;` - rows, err := db.Query(query) - defer rows.Close() - if err != nil { - return cardPrintings, err - } - - var printing CardPrinting - for rows.Next() { - err := rows.Scan(&printing.Id, &printing.Name, &printing.SetCode, &printing.IsFoil, &printing.IsPromo, &printing.CollectorNumber, &printing.Language) - if err != nil { - return cardPrintings, err - } - - cardPrintings = append(cardPrintings, printing) - } - - return cardPrintings, nil -} diff --git a/sevenkeys/database/scryfallcard.go b/sevenkeys/database/scryfallcard.go new file mode 100644 index 0000000..b95a4d4 --- /dev/null +++ b/sevenkeys/database/scryfallcard.go @@ -0,0 +1,78 @@ +package database + +import ( + "database/sql" +) + +type ScryfallCard struct { + Id string + Name string + ScryfallSetCode string + HasFoilPrinting bool + IsPromo bool + CollectorNumber string + ImageUrl string + Language string +} + +func InsertScryfallCard(db *sql.DB, scryfallCard ScryfallCard) error { + query := `INSERT INTO ScryfallCard ( + Id, + Name, + ScryfallSetCode, + HasFoilPrinting, + IsPromo, + CollectorNumber, + ImageUrl, + Language) + VALUES (?, ?, ?, ?, ?, ?, ?, ?);` + + insert, err := db.Prepare(query) + defer insert.Close() + if err != nil { + return err + } + + _, err = insert.Exec(scryfallCard.Id, + scryfallCard.Name, + scryfallCard.ScryfallSetCode, + scryfallCard.HasFoilPrinting, + scryfallCard.IsPromo, + scryfallCard.CollectorNumber, + scryfallCard.ImageUrl, + scryfallCard.Language) + if err != nil { + return err + } + + return nil +} + +func GetAllScryfallCards(db *sql.DB) ([]ScryfallCard, error) { + var scryfallCards []ScryfallCard + + query := `SELECT Id, Name, ScryfallSetCode, HasFoilPrinting, IsPromo, CollectorNumber, Language FROM CardPrinting;` + rows, err := db.Query(query) + defer rows.Close() + if err != nil { + return scryfallCards, err + } + + var scryfallCard ScryfallCard + for rows.Next() { + err := rows.Scan(&scryfallCard.Id, + &scryfallCard.Name, + &scryfallCard.ScryfallSetCode, + &scryfallCard.HasFoilPrinting, + &scryfallCard.IsPromo, + &scryfallCard.CollectorNumber, + &scryfallCard.Language) + if err != nil { + return scryfallCards, err + } + + scryfallCards = append(scryfallCards, scryfallCard) + } + + return scryfallCards, nil +} diff --git a/sevenkeys/logic/filter.go b/sevenkeys/logic/filter.go index 34f1877..6052037 100644 --- a/sevenkeys/logic/filter.go +++ b/sevenkeys/logic/filter.go @@ -5,30 +5,23 @@ import ( "strings" ) -func filterPrinting(printing database.CardPrinting, searchCriteria SearchCriteria) bool { - if searchCriteria.SetCode != "" && !strings.Contains(printing.SetCode, searchCriteria.SetCode) { +func filterPrinting(scryfallCard database.ScryfallCard, searchCriteria SearchCriteria) bool { + if searchCriteria.SetCode != "" && !strings.Contains(scryfallCard.ScryfallSetCode, searchCriteria.SetCode) { return true } - if searchCriteria.CollectorNumber != "" && !strings.Contains(printing.CollectorNumber, searchCriteria.CollectorNumber) { + if searchCriteria.CollectorNumber != "" && !strings.Contains(scryfallCard.CollectorNumber, searchCriteria.CollectorNumber) { return true } - if searchCriteria.Foil == False && printing.IsFoil { + if searchCriteria.Promo == False && scryfallCard.IsPromo { return true } - if searchCriteria.Foil == True && !printing.IsFoil { + if searchCriteria.Promo == True && !scryfallCard.IsPromo { return true } - if searchCriteria.Promo == False && printing.IsPromo { - return true - } - if searchCriteria.Promo == True && !printing.IsPromo { - return true - } - - if searchCriteria.Language != "" && printing.Language != searchCriteria.Language { + if searchCriteria.Language != "" && scryfallCard.Language != searchCriteria.Language { return true } diff --git a/sevenkeys/logic/locate.go b/sevenkeys/logic/locate.go index ccacda2..ab88edd 100644 --- a/sevenkeys/logic/locate.go +++ b/sevenkeys/logic/locate.go @@ -50,14 +50,13 @@ func LocateCards(db *sql.DB, cardNames []string, criteria SearchCriteria) ([]dat var filteredResults []database.LocateCardResult for _, result := range results { - printing := database.CardPrinting{ - SetCode: result.SetCode, - IsFoil: result.IsFoil, - IsPromo: result.IsPromo, - Language: result.Language, + scryfallCard := database.ScryfallCard{ + ScryfallSetCode: result.SetCode, + IsPromo: result.IsPromo, + Language: result.Language, } - filter := filterPrinting(printing, criteria) + filter := filterPrinting(scryfallCard, criteria) if filter { continue } @@ -77,9 +76,6 @@ func GetLocationDescription(location database.LocateCardResult) string { location.CollectorNumber, location.Language) - if location.IsFoil { - description += " FOIL" - } if location.IsPromo { description += " PROMO" } diff --git a/sevenkeys/logic/search.go b/sevenkeys/logic/search.go index ff7d002..4ab5019 100644 --- a/sevenkeys/logic/search.go +++ b/sevenkeys/logic/search.go @@ -21,7 +21,6 @@ const ( type SearchCriteria struct { SetCode string CollectorNumber string - Foil Triadic Promo Triadic Language string } @@ -31,30 +30,30 @@ type CardPrintingSearchOptions map[string]string func GetAllCardPrintingSearchOptions(db *sql.DB, searchCriteria SearchCriteria) (CardPrintingSearchOptions, error) { var searchOptions CardPrintingSearchOptions = make(CardPrintingSearchOptions) - cardPrintings, err := database.GetAllCardPrintings(db) + scryfallCards, err := database.GetAllScryfallCards(db) if err != nil { return searchOptions, err } - for _, printing := range cardPrintings { + for _, scryfallCard := range scryfallCards { // Filter based on search criteria - filter := filterPrinting(printing, searchCriteria) + filter := filterPrinting(scryfallCard, searchCriteria) if filter { continue } // Construct search option string - searchString := fmt.Sprintf("%s (%s %s) [%s]", printing.Name, printing.SetCode, printing.CollectorNumber, printing.Language) + searchString := fmt.Sprintf("%s (%s %s) [%s]", + scryfallCard.Name, + scryfallCard.ScryfallSetCode, + scryfallCard.CollectorNumber, + scryfallCard.Language) - if printing.IsFoil { - searchString += " FOIL" - } - - if printing.IsPromo { + if scryfallCard.IsPromo { searchString += " PROMO" } - searchOptions[searchString] = printing.Id + searchOptions[searchString] = scryfallCard.Id } return searchOptions, err diff --git a/sevenkeys/main.go b/sevenkeys/main.go index 4be35c9..4965787 100644 --- a/sevenkeys/main.go +++ b/sevenkeys/main.go @@ -108,7 +108,7 @@ func main() { setCode := searchPrintingsCmd.String("set-code", "", "The code for the set the card we're searching for belongs to.") collectorNumber := searchPrintingsCmd.String("collector-number", "", "The collector number of the card we're searching for.") - foil := searchPrintingsCmd.String("foil", "E", "Whether the card we're searching for is foil.") + //foil := searchPrintingsCmd.String("foil", "E", "Whether the card we're searching for is foil.") searchPrintingsCmd.Parse(flag.Args()[1:]) @@ -119,13 +119,15 @@ func main() { Language: "en", } - if *foil == "Y" { - searchCriteria.Foil = logic.True - } else if *foil == "N" { - searchCriteria.Foil = logic.False - } else { - searchCriteria.Foil = logic.Either - } + /* + if *foil == "Y" { + searchCriteria.Foil = logic.True + } else if *foil == "N" { + searchCriteria.Foil = logic.False + } else { + searchCriteria.Foil = logic.Either + } + */ searchOptions, err := logic.GetAllCardPrintingSearchOptions(db, searchCriteria) logic.Check(err) diff --git a/sevenkeys/update/scryfall.go b/sevenkeys/update/scryfall.go index 0c0c68b..9a0a585 100644 --- a/sevenkeys/update/scryfall.go +++ b/sevenkeys/update/scryfall.go @@ -12,6 +12,8 @@ import ( "sevenkeys/logic" "sevenkeys/logic/scryfall" "time" + + sqlerr "github.com/go-mysql/errors" ) func scryfallLog(msg string) { @@ -130,8 +132,8 @@ func isPaper(card scryfall.Card) bool { return paper } -func getScryfallCard(card scryfall.Card) []database.CardPrinting { - return database.CardPrinting{ +func getScryfallCard(card scryfall.Card) database.ScryfallCard { + return database.ScryfallCard{ Id: card.Id, Name: card.Name, ScryfallSetCode: card.Set, @@ -175,7 +177,7 @@ func updateCards(db *sql.DB, bulkData scryfall.BulkData) error { } scryfallCard := getScryfallCard(card) - err := database.InsertCardPrinting(db, scryfallCard) + err := database.InsertScryfallCard(db, scryfallCard) // If we already have this card in the database, then we can just skip it if ok, insertErr := sqlerr.Error(err); ok { if insertErr == sqlerr.ErrDupeKey {