diff options
| author | Aotrix <[email protected]> | 2025-07-05 19:32:36 +0200 |
|---|---|---|
| committer | Aotrix <[email protected]> | 2025-07-05 19:32:36 +0200 |
| commit | 43ef56e2417de30c693df878d1325b076e45ee39 (patch) | |
| tree | c6bf1c1521aec3a25e7b6074ea93ddb0d5dd27df | |
| parent | 4167f92f3d36b7384c4c5f8bf7501bba52e91a0c (diff) | |
refactoring of card retrieval process
| -rw-r--r-- | resources/token_info.txt | 2 | ||||
| -rw-r--r-- | src/postgresHandler.cpp | 81 |
2 files changed, 44 insertions, 39 deletions
diff --git a/resources/token_info.txt b/resources/token_info.txt index 9d6ca3f..bdff31f 100644 --- a/resources/token_info.txt +++ b/resources/token_info.txt @@ -1 +1 @@ -EULtWS7hY7bwOuH6e1emjnS5w44hIrI3ZY 1751240148
\ No newline at end of file +EU4d5jIf75PBeVTHoJc3N7suyOncDi1q8j 1751822431
\ No newline at end of file diff --git a/src/postgresHandler.cpp b/src/postgresHandler.cpp index dc8451d..9241214 100644 --- a/src/postgresHandler.cpp +++ b/src/postgresHandler.cpp @@ -14,7 +14,7 @@ // and fill these info in a single function struct CardTypeHandlerInfo { std::string aCardType; - std::string aCardRegex; + std::string aCardValueRegex; std::function<const std::string(const std::string &)> aJSONToSQLConverter; }; @@ -97,13 +97,13 @@ std::string format_key(const std::string &key) { } static void -add_single_card_to_database(const std::string &t_cards, pqxx::work &t_tx, - const std::regex &key_regex, - const std::string::size_type &id_pos, - const std::string::size_type &closing_bracket_pos) { +add_single_card_to_database(const std::string &kCards, pqxx::work &aTransaction, + const std::regex &kKeyRegex, + const std::string::size_type &kIdPos, + const std::string::size_type &kClosingBracketPos) { auto words_begin = std::sregex_iterator( - std::next(t_cards.begin(), id_pos), - std::next(t_cards.begin(), closing_bracket_pos), key_regex); + std::next(kCards.begin(), kIdPos), + std::next(kCards.begin(), kClosingBracketPos), kKeyRegex); auto words_end = std::sregex_iterator(); if (words_begin != words_end) { std::string insert_columns("INSERT INTO cards ("); @@ -127,7 +127,7 @@ add_single_card_to_database(const std::string &t_cards, pqxx::work &t_tx, insert_columns.append(values); insert_columns.append(" ON CONFLICT (id) DO NOTHING;"); - executeQuery(t_tx, insert_columns); + executeQuery(aTransaction, insert_columns); } } @@ -170,44 +170,49 @@ void addCardsToDatabase(HearthstoneAPIHandler &aAPIIntermediate, } } -void clearCardDatabase(pqxx::work &tx) { - executeQuery(tx, "DELETE FROM cards"); +void clearCardDatabase(pqxx::work &aTransaction) { + executeQuery(aTransaction, "DELETE FROM cards"); +} + +const uint32_t numberOfPagesInSetOfCards(const std::string &cards) { + std::regex key_regex("\"pageCount\":([0-9]+)"); + auto nb_pages_begin = + std::sregex_iterator(cards.begin(), cards.end(), key_regex); + auto nb_pages_end = std::sregex_iterator(); + if (nb_pages_begin != nb_pages_end) { + return std::stoi((*nb_pages_begin)[1].str()); + } + return 0; } void refresh_cards_table() { try { - pqxx::connection cx{ + pqxx::connection aConnection{ "postgresql://aotrix@localhost:5432/hearthstonegameinfo"}; - pqxx::work tx{cx}; - HearthstoneAPIHandler aAPIIntermediate; - std::string cards = - aAPIIntermediate.get_cards("/?locale=fr_FR&gameMode=constructed"); - clearCardDatabase(tx); - addCardsToDatabase(aAPIIntermediate, tx, + pqxx::work aTransaction{aConnection}; + HearthstoneAPIHandler aAPIConnector; + std::string aCards = + aAPIConnector.get_cards("/?locale=fr_FR&gameMode=constructed"); + clearCardDatabase(aTransaction); + addCardsToDatabase(aAPIConnector, aTransaction, "/?locale=fr_FR&gameMode=constructed"); - std::regex key_regex("\"pageCount\":([0-9]+)"); - auto nb_pages_begin = - std::sregex_iterator(cards.begin(), cards.end(), key_regex); - auto nb_pages_end = std::sregex_iterator(); - if (nb_pages_begin != nb_pages_end) { - uint32_t nb_pages = std::stoi((*nb_pages_begin)[1].str()); - std::cout << "number of pages: " << nb_pages << std::endl; - // FIXME: [Process exited 139] - // for (int i = 2; i < nb_pages; i++) { - for (uint32_t i = 2; i < 3; i++) { - const std::string kCardsPageURL{std::format( - "/?locale=fr_FR&gameMode=constructed&page={}", i)}; - addCardsToDatabase(aAPIIntermediate, tx, kCardsPageURL); - } + const uint32_t kNbPages = numberOfPagesInSetOfCards(aCards); + + // FIXME: [Process exited 139] + // for (int i = 2; i < kNbPages; i++) { + for (uint32_t i = 2; i < 3; i++) { + const std::string kCardsPageURL{ + std::format("/?locale=fr_FR&gameMode=constructed&page={}", i)}; + addCardsToDatabase(aAPIConnector, aTransaction, kCardsPageURL); } std::cout << "number of cards in database: " - << executeQuery(tx, "SELECT COUNT(*) FROM cards") + << executeQuery(aTransaction, "SELECT COUNT(*) FROM cards") << std::endl; - tx.commit(); - } catch (pqxx::sql_error const &e) { - std::cerr << "SQL error: " << e.what() << std::endl; - std::cerr << "Query was: " << e.query() << std::endl; - } catch (std::exception const &e) { - std::cerr << "Error: " << e.what() << std::endl; + aTransaction.commit(); + } catch (pqxx::sql_error const &kSqlError) { + std::cerr << "SQL error: " << kSqlError.what() << std::endl; + std::cerr << "Query was: " << kSqlError.query() << std::endl; + } catch (std::exception const &kException) { + std::cerr << "Error: " << kException.what() << std::endl; } } |
