diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/main.cpp | 18 | ||||
| -rw-r--r-- | src/postgresHandler.cpp | 32 |
2 files changed, 27 insertions, 23 deletions
diff --git a/src/main.cpp b/src/main.cpp index 780883f..de64d9e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -5,20 +5,16 @@ int main() { HearthstoneAPIHandler hs_handler; - // TODO: use a parser on get_cards returned value - // 642; 678 - const unsigned int card_id = 678; - std::cout << hs_handler.get_cards(std::format("{}?locale=fr_FR", card_id)) - << std::endl; - pqxx::connection cx{ "postgresql://aotrix@localhost:5432/hearthstonegameinfo"}; pqxx::work tx{cx}; - display_query_result(execute_query(tx, "SELECT * FROM cards")); - // TODO: for test purposes - // use get_cards output instead? - add_cards_to_database( - hs_handler.get_cards(std::format("{}?locale=fr_FR", card_id)), tx); + const unsigned int card_id = 217; + std::string card = + hs_handler.get_cards(std::format("{}?locale=fr_FR", card_id)); + std::cout << card << std::endl; + add_cards_to_database(card, tx); + + tx.commit(); return 0; } diff --git a/src/postgresHandler.cpp b/src/postgresHandler.cpp index cdbea28..d80157e 100644 --- a/src/postgresHandler.cpp +++ b/src/postgresHandler.cpp @@ -1,4 +1,6 @@ #include "postgresHandler.h" +#include <cctype> +#include <cstddef> #include <iostream> #include <regex> #include <stdexcept> @@ -50,12 +52,9 @@ const std::string format_json_value_to_sql(const unsigned int &t_type_index, case NULL_INDEX: return "NULL"; case LIST_OF_INT_INDEX: { - if (t_json_value.size() == 2) { - return "NULL"; - } std::string json_copy = t_json_value; - *json_copy.begin() = '('; - *std::prev(json_copy.end()) = ')'; + json_copy.append("\'"); + json_copy.insert(json_copy.begin(), '\''); return json_copy; } default: @@ -64,13 +63,23 @@ const std::string format_json_value_to_sql(const unsigned int &t_type_index, } std::string format_key(const std::string &key) { - // FIXME: add _ before an uppercase char, and set all chars to lowercase - // ones - return key; + std::string key_copy(key); + std::stack<size_t> uppercase_indexes; + for (size_t i = 0; i < key.length(); i++) { + if (std::isupper(key[i])) { + uppercase_indexes.push(i); + } + } + while (!uppercase_indexes.empty()) { + size_t top_index = uppercase_indexes.top(); + uppercase_indexes.pop(); + key_copy[top_index] = std::tolower(key_copy[top_index]); + key_copy.insert(std::next(key_copy.begin(), top_index), '_'); + } + return key_copy; } void add_cards_to_database(const std::string &t_cards, pqxx::work &t_tx) { - // TODO: to complete std::regex key_regex( "\"([^\"?]+)\":(([0-9]+)|(\"[^\"?]*\")|(\\[[0-9,]*\\])|(null))"); @@ -78,7 +87,6 @@ void add_cards_to_database(const std::string &t_cards, pqxx::work &t_tx) { std::sregex_iterator(t_cards.begin(), t_cards.end(), key_regex); auto words_end = std::sregex_iterator(); if (words_begin != words_end) { - // FIXME: add parent_id:int and copy_of_card_id:list_of_ints columns std::string insert_columns("INSERT INTO cards ("); std::string values(" VALUES ("); for (auto it = words_begin; it != words_end; ++it) { @@ -89,10 +97,10 @@ void add_cards_to_database(const std::string &t_cards, pqxx::work &t_tx) { format_json_value_to_sql(type_index, (*it)[type_index].str()) + ","); } - // TODO: may be modified *std::prev(insert_columns.end()) = ')'; *std::prev(values.end()) = ')'; - values.append(";"); + values.append(" ON CONFLICT (id) DO NOTHING;"); + execute_query(t_tx, insert_columns + values); } } |
