Compare commits

...

5 Commits

6 changed files with 120 additions and 83 deletions

View File

@ -1,8 +1,11 @@
{
"DatabaseConfig": {
"User": "<your username>",
"Passwd": "<your password>",
"Net": "tcp",
"Addr": "127.0.0.1:3306",
"DBName": "<your database name>",
"AllowNativePasswords": true
},
"CardtraderToken": "<your cardtrader token>"
}

View File

@ -0,0 +1,29 @@
package config
import (
"encoding/json"
"log"
"os"
"github.com/go-sql-driver/mysql"
)
type SevenkeysConfig struct {
DatabaseConfig mysql.Config `json:"DatabaseConfig"`
CardtraderToken string `json:"CardtraderToken"`
}
func ReadConfigFromFile(filename string) SevenkeysConfig {
bytes, err := os.ReadFile(filename)
if err != nil {
log.Fatal(err)
}
var config SevenkeysConfig
err = json.Unmarshal(bytes, &config)
if err != nil {
log.Fatal(err)
}
return config
}

View File

@ -2,31 +2,12 @@ package database
import (
"database/sql"
"encoding/json"
"log"
"os"
"github.com/go-sql-driver/mysql"
)
func readConfigFromFile(filename string) mysql.Config {
bytes, err := os.ReadFile(filename)
if err != nil {
log.Fatal(err)
}
var config mysql.Config
err = json.Unmarshal(bytes, &config)
if err != nil {
log.Fatal(err)
}
return config
}
func GetDatabaseFromConfig(filename string) *sql.DB {
config := readConfigFromFile(filename)
func GetDatabaseFromConfig(config mysql.Config) *sql.DB {
db, err := sql.Open("mysql", config.FormatDSN())
if err != nil {

View File

@ -0,0 +1,43 @@
-- +goose Up
-- +goose StatementBegin
CREATE TABLE IF NOT EXISTS CardtraderGame (
Id INT PRIMARY KEY AUTO_INCREMENT,
Name VARCHAR(255) NOT NULL
);
CREATE TABLE IF NOT EXISTS CardtraderCategory (
Id INT PRIMARY KEY AUTO_INCREMENT,
CardtraderGameId INT NOT NULL,
FOREIGN KEY (CardtraderGameId) REFERENCES CardtraderGame(Id),
Name VARCHAR(255) NOT NULL
);
CREATE TABLE IF NOT EXISTS CardtraderExpansion (
Id INT PRIMARY KEY AUTO_INCREMENT,
CardtraderGameId INT NOT NULL,
FOREIGN KEY (CardtraderGameId) REFERENCES CardtraderGame(Id)
);
CREATE TABLE IF NOT EXISTS CardtraderBlueprint (
Id INT PRIMARY KEY AUTO_INCREMENT,
CardtraderGameId INT NOT NULL,
FOREIGN KEY (CardtraderGameId) REFERENCES CardtraderGame(Id),
CardtraderCategoryId INT NOT NULL,
FOREIGN KEY (CardtraderCategoryId) REFERENCES CardtraderCategory(Id),
CardtraderExpansionId INT NOT NULL,
FOREIGN KEY (CardtraderExpansionId) REFERENCES CardtraderExpansion(Id),
Name VARCHAR(255) NOT NULL,
CollectorNumber VARCHAR(10) NOT NULL
);
-- +goose StatementEnd
-- +goose Down
-- +goose StatementBegin
DROP TABLE IF EXISTS CardtraderBlueprint;
DROP TABLE IF EXISTS CardtraderExpansion;
DROP TABLE IF EXISTS CardtraderCategory;
DROP TABLE IF EXISTS CardtraderGame;
-- +goose StatementEnd

View File

@ -1,7 +1,6 @@
package main
import (
"bufio"
"encoding/json"
"errors"
"flag"
@ -9,31 +8,15 @@ import (
"io/ioutil"
"log"
"os"
"sevenkeys/config"
"sevenkeys/database"
"sevenkeys/delverlens"
"sevenkeys/logic"
"sevenkeys/logic/scryfall"
"strings"
"sevenkeys/update"
"github.com/mtgban/go-mtgban/cardtrader"
)
func GetStringResponse(prompt string) string {
fmt.Print(prompt + " ")
var response string
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
response = scanner.Text()
return response
}
func GetYesNoResponse(prompt string) bool {
response := GetStringResponse(prompt)
return strings.ToUpper(response) == "Y"
}
const (
UpdateSubcommand string = "update"
CreateStorageAreaSubcommand string = "createstorage"
@ -55,17 +38,8 @@ func main() {
flag.Parse()
db := database.GetDatabaseFromConfig("config." + profile + ".json")
/* Sad.
figlet.ReadFigletFonts()
cli.ShowSplashScreen()
*/
// TODO: Decide in what form we need to retain this functionality if any
//cli.MainCliLoop(db)
//searchCmd := flag.NewFlagSet(SearchSubcommand, flag.ExitOnError)
//name := searchCmd.String("name", "", "The card name to search for.")
config := config.ReadConfigFromFile("config." + profile + ".json")
db := database.GetDatabaseFromConfig(config.DatabaseConfig)
if len(flag.Args()) == 0 {
fmt.Fprintln(os.Stderr, "Please specify a subcommand.")
@ -74,33 +48,8 @@ func main() {
switch flag.Args()[0] {
case UpdateSubcommand:
fmt.Println("Checking for updates...")
bulkData, err := scryfall.GetBulkDataByType(scryfall.BulkDataTypeAllCards)
logic.Check(err)
needsUpdate, err := logic.CheckForUpdates(db, bulkData)
logic.Check(err)
if !needsUpdate {
fmt.Println("No update required.")
return
}
fmt.Println("Update required.")
if GetYesNoResponse("Run update? (y/N)") {
fmt.Println("Running update...")
logic.CreateCacheDirectories()
err = logic.UpdateSets(db)
logic.Check(err)
err = logic.UpdateCards(db, bulkData)
logic.Check(err)
fmt.Println("Update finished.")
}
update.UpdateScryfallData(db)
//update.UpdateCardtraderData(config.CardtraderToken)
break
case CreateStorageAreaSubcommand:
createStorageCmd := flag.NewFlagSet(CreateStorageAreaSubcommand, flag.ExitOnError)

View File

@ -0,0 +1,32 @@
package update
import (
"database/sql"
"fmt"
"sevenkeys/logic"
"sevenkeys/logic/scryfall"
)
func UpdateScryfallData(db *sql.DB) {
fmt.Println("Checking for updates...")
bulkData, err := scryfall.GetBulkDataByType(scryfall.BulkDataTypeAllCards)
logic.Check(err)
needsUpdate, err := logic.CheckForUpdates(db, bulkData)
logic.Check(err)
if !needsUpdate {
fmt.Println("No update required.")
return
}
logic.CreateCacheDirectories()
err = logic.UpdateSets(db)
logic.Check(err)
err = logic.UpdateCards(db, bulkData)
logic.Check(err)
fmt.Println("Update finished.")
}