diff --git a/scryfall_deser/src/db.rs b/scryfall_deser/src/db.rs index dc84ed2..5e8b3c2 100644 --- a/scryfall_deser/src/db.rs +++ b/scryfall_deser/src/db.rs @@ -77,6 +77,44 @@ pub fn update_db_with_file(file: PathBuf) -> bool { true } +#[derive(Debug)] +pub struct DbCard { + pub name: String, + pub type_line: String, + pub oracle_text: Option, + pub power_toughness: Option, + pub loyalty: Option, + pub mana_cost: Option, + pub scryfall_uri: String, +} + +pub fn get_card_by_name(name: &str) -> DbCard { + let sqlite_file = get_local_data_sqlite_file(); + let conn = rusqlite::Connection::open(sqlite_file).unwrap(); + let mut stmt = conn + .prepare( + "SELECT name, type_line, oracle_text, power_toughness, loyalty, mana_cost, scryfall_uri + FROM cards WHERE name = (?1)", + ) + .unwrap(); + let mut rows = stmt.query([name]).unwrap(); + let card = match rows.next().unwrap() { + Some(row) => DbCard { + name: row.get(0).unwrap(), + type_line: row.get(1).unwrap(), + oracle_text: row.get(2).unwrap(), + power_toughness: row.get(3).unwrap(), + loyalty: row.get(4).unwrap(), + mana_cost: row.get(5).unwrap(), + scryfall_uri: row.get(6).unwrap(), + }, + None => { + panic!("{} isn't a card that exists", name); + } + }; + card +} + const CREATE_CARDS_TABLE_SQL: &str = " CREATE TABLE cards ( name TEXT NOT NULL UNIQUE, @@ -84,7 +122,7 @@ CREATE TABLE cards ( type_line TEXT, oracle_text TEXT, power_toughness TEXT, - loyalty INTEGER, + loyalty TEXT, mana_cost TEXT, scryfall_uri TEXT NOT NULL UNIQUE )"; diff --git a/scryfall_deser/src/lib.rs b/scryfall_deser/src/lib.rs index 1db549d..7665ce4 100644 --- a/scryfall_deser/src/lib.rs +++ b/scryfall_deser/src/lib.rs @@ -5,7 +5,7 @@ mod deser; pub use crate::deser::ScryfallCard; mod db; -pub use db::{get_all_lowercase_card_names, init_db, update_db_with_file}; +pub use db::{get_all_lowercase_card_names, get_card_by_name, init_db, update_db_with_file}; mod utils; pub use utils::get_local_cache_folder; diff --git a/scryfall_deser/src/main.rs b/scryfall_deser/src/main.rs index 4a44595..8a3541f 100644 --- a/scryfall_deser/src/main.rs +++ b/scryfall_deser/src/main.rs @@ -1,5 +1,6 @@ use clap::Parser; use scryfall_deser::get_all_lowercase_card_names; +use scryfall_deser::get_card_by_name; use scryfall_deser::get_local_cache_folder; use scryfall_deser::init_db; use scryfall_deser::update_db_with_file; @@ -18,7 +19,7 @@ fn main() { if args.update { init_db(); let mut path = get_local_cache_folder(); - // TODO - actually download and update + // TODO - actually download the file - probably do away with TempFile stuff path.push("oracle-cards-20250814210711.json"); update_db_with_file(path); return; @@ -41,4 +42,6 @@ fn main() { // Do some distance checking stuff } //dbg!(matching_cards); + let card = get_card_by_name("Black Lotus"); + dbg!(card); }