From ceceb4722f236a81d330639466893e0e2c25705f Mon Sep 17 00:00:00 2001 From: The Magician Date: Tue, 10 Dec 2024 19:39:25 +0000 Subject: [PATCH] Add Cardtrader data during update --- sevenkeys/database/cardtraderblueprint.go | 66 +++++++++++++++++++ sevenkeys/database/cardtraderexpansion.go | 25 +++++++ .../00008_create_cardtrader_tables.sql | 5 +- sevenkeys/logic/cardtrader.go | 12 ++++ sevenkeys/main.go | 17 ++++- sevenkeys/update/cardtrader.go | 42 ++++++++++++ 6 files changed, 163 insertions(+), 4 deletions(-) create mode 100644 sevenkeys/database/cardtraderblueprint.go create mode 100644 sevenkeys/database/cardtraderexpansion.go create mode 100644 sevenkeys/logic/cardtrader.go create mode 100644 sevenkeys/update/cardtrader.go diff --git a/sevenkeys/database/cardtraderblueprint.go b/sevenkeys/database/cardtraderblueprint.go new file mode 100644 index 0000000..d7ed568 --- /dev/null +++ b/sevenkeys/database/cardtraderblueprint.go @@ -0,0 +1,66 @@ +package database + +import ( + "database/sql" + "fmt" + + "github.com/mtgban/go-mtgban/cardtrader" +) + +func InsertCardtraderBlueprint(db *sql.DB, blueprint cardtrader.Blueprint) error { + query := `INSERT INTO CardtraderBlueprint ( + Id, + CardtraderCategoryId, + CardtraderExpansionId, + Name, + CollectorNumber + ) VALUES ( + ?, ?, ?, ?, ? + ) + ON DUPLICATE KEY UPDATE + Id = ?, + CardtraderCategoryId = ?, + CardtraderExpansionId = ?, + Name = ?, + CollectorNumber = ?;` + + insert, err := db.Prepare(query) + defer insert.Close() + if err != nil { + return err + } + + _, err = insert.Exec(blueprint.Id, + blueprint.CategoryId, + blueprint.ExpansionId, + blueprint.Name, + blueprint.FixedProperties.Number, + blueprint.Id, + blueprint.CategoryId, + blueprint.ExpansionId, + blueprint.Name, + blueprint.FixedProperties.Number) + if err != nil { + fmt.Println(blueprint.FixedProperties.Number) + return err + } + + return nil +} + +/* +func GetAllCardtraderBlueprints(db *sql.DB) ([]cardtrader.Blueprint, error) { + var blueprints []cardtrader.Blueprint + + query := `SELECT * FROM CardtraderBlueprint;` + rows, err := db.Query(query) + defer rows.Close() + if err != nil { + return blueprints, err + } + + var blueprint cardtrader.Blueprint + for rows.Next() { + } +} +*/ diff --git a/sevenkeys/database/cardtraderexpansion.go b/sevenkeys/database/cardtraderexpansion.go new file mode 100644 index 0000000..2b43064 --- /dev/null +++ b/sevenkeys/database/cardtraderexpansion.go @@ -0,0 +1,25 @@ +package database + +import ( + "database/sql" + + "github.com/mtgban/go-mtgban/cardtrader" +) + +func InsertCardtraderExpansion(db *sql.DB, expansion cardtrader.Expansion) error { + query := `INSERT INTO CardtraderExpansion (Id, Code, Name) VALUES (?, ?, ?) + ON DUPLICATE KEY UPDATE Id = ?, Code = ?, Name = ?;` + + insert, err := db.Prepare(query) + defer insert.Close() + if err != nil { + return err + } + + _, err = insert.Exec(expansion.Id, expansion.Code, expansion.Name, expansion.Id, expansion.Code, expansion.Name) + if err != nil { + return err + } + + return nil +} diff --git a/sevenkeys/database/migrations/00008_create_cardtrader_tables.sql b/sevenkeys/database/migrations/00008_create_cardtrader_tables.sql index fd75e03..2d39598 100644 --- a/sevenkeys/database/migrations/00008_create_cardtrader_tables.sql +++ b/sevenkeys/database/migrations/00008_create_cardtrader_tables.sql @@ -2,7 +2,8 @@ -- +goose StatementBegin CREATE TABLE IF NOT EXISTS CardtraderExpansion ( Id INT PRIMARY KEY AUTO_INCREMENT, - ExpansionCode VARCHAR(20) NOT NULL + Code VARCHAR(20) NOT NULL, + Name VARCHAR(255) NOT NULL ); CREATE TABLE IF NOT EXISTS CardtraderBlueprint ( @@ -11,7 +12,7 @@ CREATE TABLE IF NOT EXISTS CardtraderBlueprint ( CardtraderExpansionId INT NOT NULL, FOREIGN KEY (CardtraderExpansionId) REFERENCES CardtraderExpansion(Id), Name VARCHAR(255) NOT NULL, - CollectorNumber VARCHAR(10) NOT NULL + CollectorNumber VARCHAR(50) NOT NULL ); -- +goose StatementEnd diff --git a/sevenkeys/logic/cardtrader.go b/sevenkeys/logic/cardtrader.go new file mode 100644 index 0000000..8c22a37 --- /dev/null +++ b/sevenkeys/logic/cardtrader.go @@ -0,0 +1,12 @@ +package logic + +/* +func GetAllBlueprints(db *sql.DB) ([]cardtrader.Blueprint, error) { + blueprints, err := database.GetAllBlueprints(db) + if err != nil { + return nil, err + } + + return blueprints, nil +} +*/ diff --git a/sevenkeys/main.go b/sevenkeys/main.go index fcb4159..9cfb40d 100644 --- a/sevenkeys/main.go +++ b/sevenkeys/main.go @@ -30,6 +30,7 @@ const ( DeckSubcommand string = "deck" GetProductIdSubcommand string = "products" + MatchSubcommands string = "match" ) func main() { @@ -48,8 +49,11 @@ func main() { switch flag.Args()[0] { case UpdateSubcommand: - update.UpdateScryfallData(db) - //update.UpdateCardtraderData(config.CardtraderToken) + err := update.UpdateScryfallData(db) + logic.Check(err) + + err = update.UpdateCardtraderData(db, config.CardtraderToken) + logic.Check(err) break case CreateStorageAreaSubcommand: createStorageCmd := flag.NewFlagSet(CreateStorageAreaSubcommand, flag.ExitOnError) @@ -248,6 +252,15 @@ func main() { fmt.Printf("x%d\n", product.Quantity) } break + /* + case MatchSubcommands: + cardLocations, err := logic.GetAllStorageSearchOptions(db) + logic.Check(err) + + blueprints, err := logic.GetAllBlueprints(db) + logic.Check(err) + break + */ default: fmt.Fprintf(os.Stderr, "Unrecognized subcommand: %s\n", os.Args[1]) break diff --git a/sevenkeys/update/cardtrader.go b/sevenkeys/update/cardtrader.go new file mode 100644 index 0000000..339ef58 --- /dev/null +++ b/sevenkeys/update/cardtrader.go @@ -0,0 +1,42 @@ +package update + +import ( + "database/sql" + "sevenkeys/database" + + "github.com/mtgban/go-mtgban/cardtrader" +) + +func UpdateCardtraderData(db *sql.DB, token string) error { + client := cardtrader.NewCTAuthClient(token) + + expansions, err := client.Expansions() + if err != nil { + return err + } + + for _, expansion := range expansions { + if expansion.GameId != cardtrader.GameIdMagic { + continue + } + + err = database.InsertCardtraderExpansion(db, expansion) + if err != nil { + return err + } + + blueprints, err := client.Blueprints(expansion.Id) + if err != nil { + return err + } + + for _, blueprint := range blueprints { + err = database.InsertCardtraderBlueprint(db, blueprint) + if err != nil { + return err + } + } + } + + return nil +}