summaryrefslogtreecommitdiff
path: root/src/postgresHandler.cpp
diff options
context:
space:
mode:
authorAotrix <[email protected]>2025-07-05 19:32:36 +0200
committerAotrix <[email protected]>2025-07-05 19:32:36 +0200
commit43ef56e2417de30c693df878d1325b076e45ee39 (patch)
treec6bf1c1521aec3a25e7b6074ea93ddb0d5dd27df /src/postgresHandler.cpp
parent4167f92f3d36b7384c4c5f8bf7501bba52e91a0c (diff)
refactoring of card retrieval process
Diffstat (limited to 'src/postgresHandler.cpp')
-rw-r--r--src/postgresHandler.cpp81
1 files changed, 43 insertions, 38 deletions
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;
}
}