Add Cardtrader data during update

This commit is contained in:
The Magician 2024-12-10 19:39:25 +00:00
parent 848754b509
commit ceceb4722f
6 changed files with 163 additions and 4 deletions

View File

@ -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() {
}
}
*/

View File

@ -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
}

View File

@ -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

View File

@ -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
}
*/

View File

@ -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

View File

@ -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
}