diff --git a/include/database/UserRepository.h b/include/database/UserRepository.h index 88710a9..a99efb1 100644 --- a/include/database/UserRepository.h +++ b/include/database/UserRepository.h @@ -3,6 +3,7 @@ #include #include +#include #include "database/BaseRepository.h" #include "model/Models.h" @@ -27,30 +28,12 @@ namespace database { unsigned long usernameLength; unsigned long passwordLength; }; - struct UserVals - { - /** - std::shared_ptr firstname; - std::shared_ptr lastname; - std::shared_ptr phone; - std::shared_ptr email; - std::shared_ptr username; - std::shared_ptr password; - */ - char firstname[1024]; - char lastname[1024]; - char phone[1024]; - char email[1024]; - char username[1024]; - char password[1024]; - }; std::shared_ptr insertUserValues(const model::User&, std::shared_ptr); - std::shared_ptr valueBind(model::User&, std::shared_ptr); - std::shared_ptr valueBind(model::User&, UserVals&); - std::shared_ptr valueBind(model::User&); + std::shared_ptr valueBind(model::User&, std::tuple&); std::shared_ptr fetchUserLengths(const model::User&); - std::shared_ptr fetchUserVals(); + + std::tuple fetchUV(); model::User parseRecord(MYSQL_STMT*); }; diff --git a/src/database/UserRepository.cpp b/src/database/UserRepository.cpp index da03b36..6b5574a 100644 --- a/src/database/UserRepository.cpp +++ b/src/database/UserRepository.cpp @@ -2,6 +2,7 @@ #include #include +#include #include namespace database { @@ -28,7 +29,7 @@ model::User UserRepository::retrieveUserRecord(model::User& user, case type::UserFilter::username: qry << "Username = ?"; - params[0].buffer_type = MYSQL_TYPE_LONG; + params[0].buffer_type = MYSQL_TYPE_STRING; params[0].buffer = (char*)user.username.c_str(); params[0].length = &userLength; params[0].is_null = 0; @@ -113,7 +114,8 @@ std::shared_ptr UserRepository::insertUserValues(const model::User& return values; } -std::shared_ptr UserRepository::valueBind(model::User& user, std::shared_ptr userVal) +std::shared_ptr UserRepository::valueBind(model::User& user, + std::tuple& us) { std::shared_ptr values((MYSQL_BIND*) std::calloc(7, sizeof(MYSQL_BIND))); constexpr auto strLen = 1024; @@ -122,97 +124,27 @@ std::shared_ptr UserRepository::valueBind(model::User& user, std::sh values.get()[0].buffer = (char*)&user.id; values.get()[1].buffer_type = MYSQL_TYPE_STRING; - values.get()[1].buffer = (char*)userVal->firstname; + values.get()[1].buffer = (char*)std::get<0>(us); values.get()[1].buffer_length = strLen; values.get()[2].buffer_type = MYSQL_TYPE_STRING; - values.get()[2].buffer = (char*)userVal->lastname; + values.get()[2].buffer = (char*)std::get<1>(us); values.get()[2].buffer_length = strLen; values.get()[3].buffer_type = MYSQL_TYPE_STRING; - values.get()[3].buffer = (char*)userVal->phone; + values.get()[3].buffer = (char*)std::get<2>(us); values.get()[3].buffer_length = strLen; values.get()[4].buffer_type = MYSQL_TYPE_STRING; - values.get()[4].buffer = (char*)userVal->email; + values.get()[4].buffer = (char*)std::get<3>(us); values.get()[4].buffer_length = strLen; values.get()[5].buffer_type = MYSQL_TYPE_STRING; - values.get()[5].buffer = (char*)userVal->username; + values.get()[5].buffer = (char*)std::get<4>(us); values.get()[5].buffer_length = strLen; values.get()[6].buffer_type = MYSQL_TYPE_STRING; - values.get()[6].buffer = (char*)userVal->password; - values.get()[6].buffer_length = strLen; - - return values; -} - -std::shared_ptr UserRepository::valueBind(model::User& user, UserVals& userVal) -{ - std::shared_ptr values((MYSQL_BIND*) std::calloc(7, sizeof(MYSQL_BIND))); - constexpr auto strLen = 1024; - - values.get()[0].buffer_type = MYSQL_TYPE_LONG; - values.get()[0].buffer = (char*)&user.id; - - values.get()[1].buffer_type = MYSQL_TYPE_STRING; - values.get()[1].buffer = (char*)userVal.firstname; - values.get()[1].buffer_length = strLen; - - values.get()[2].buffer_type = MYSQL_TYPE_STRING; - values.get()[2].buffer = (char*)userVal.lastname; - values.get()[2].buffer_length = strLen; - - values.get()[3].buffer_type = MYSQL_TYPE_STRING; - values.get()[3].buffer = (char*)userVal.phone; - values.get()[3].buffer_length = strLen; - - values.get()[4].buffer_type = MYSQL_TYPE_STRING; - values.get()[4].buffer = (char*)userVal.email; - values.get()[4].buffer_length = strLen; - - values.get()[5].buffer_type = MYSQL_TYPE_STRING; - values.get()[5].buffer = (char*)userVal.username; - values.get()[5].buffer_length = strLen; - - values.get()[6].buffer_type = MYSQL_TYPE_STRING; - values.get()[6].buffer = (char*)userVal.password; - values.get()[6].buffer_length = strLen; - - return values; -} - -std::shared_ptr UserRepository::valueBind(model::User& user) -{ - std::shared_ptr values((MYSQL_BIND*) std::calloc(7, sizeof(MYSQL_BIND))); - constexpr auto strLen = 1024; - - values.get()[0].buffer_type = MYSQL_TYPE_LONG; - values.get()[0].buffer = (char*)&user.id; - - values.get()[1].buffer_type = MYSQL_TYPE_STRING; - values.get()[1].buffer = (char*)user.firstname.data(); - values.get()[1].buffer_length = strLen; - - values.get()[2].buffer_type = MYSQL_TYPE_STRING; - values.get()[2].buffer = (char*)user.lastname.data(); - values.get()[2].buffer_length = strLen; - - values.get()[3].buffer_type = MYSQL_TYPE_STRING; - values.get()[3].buffer = (char*)user.phone.data(); - values.get()[3].buffer_length = strLen; - - values.get()[4].buffer_type = MYSQL_TYPE_STRING; - values.get()[4].buffer = (char*)user.email.data(); - values.get()[4].buffer_length = strLen; - - values.get()[5].buffer_type = MYSQL_TYPE_STRING; - values.get()[5].buffer = (char*)user.username.data(); - values.get()[5].buffer_length = strLen; - - values.get()[6].buffer_type = MYSQL_TYPE_STRING; - values.get()[6].buffer = (char*)user.password.data(); + values.get()[6].buffer = (char*)std::get<5>(us); values.get()[6].buffer_length = strLen; return values; @@ -231,46 +163,35 @@ std::shared_ptr UserRepository::fetchUserLengths(co return userLen; } -std::shared_ptr UserRepository::fetchUserVals() -{ - constexpr auto strLen = 1024; - auto userVal = std::make_shared(); - /** - userVal->firstname = std::make_shared(new char[strLen]); - userVal->lastname = std::make_shared(new char[strLen]); - userVal->email = std::make_shared(new char[strLen]); - userVal->phone = std::make_shared(new char[strLen]); - userVal->username = std::make_shared(new char[strLen]); - userVal->password = std::make_shared(new char[strLen]); - */ - return userVal; +std::tuple UserRepository::fetchUV() +{ + char firstname[1024]; + char lastname[1024]; + char phone[1024]; + char email[1024]; + char username[1024]; + char password[1024]; + + return std::make_tuple(firstname, lastname, phone, email, username, password); } model::User UserRepository::parseRecord(MYSQL_STMT *stmt) { - // TODO : parse user record model::User user; - auto userVal = fetchUserVals(); - UserVals uv; - //auto bindedValues = valueBind(user, userVal); - auto bindedValues = valueBind(user, uv); - //auto bindedValues = valueBind(user); + auto usv = fetchUV(); + + auto bindedValues = valueBind(user, usv); auto status = mysql_stmt_bind_result(stmt, bindedValues.get()); status = mysql_stmt_fetch(stmt); - std::cout << user.id << std::endl; - //std::cout << "binded firstname: " << userVal->firstname << std::endl; - //std::cout << "binded lastname: " << uv.lastname << std::endl; - //user.firstname = userVal->firstname; - /** - user.lastname = *userVal->lastname.get(); - user.email = *userVal->email.get(); - user.phone = *userVal->phone.get(); - user.username = *userVal->username.get(); - user.password = *userVal->password.get(); - */ + user.firstname = std::get<0>(usv); + user.lastname = std::get<1>(usv); + user.email = std::get<2>(usv); + user.phone = std::get<3>(usv); + user.username = std::get<4>(usv); + user.password = std::get<5>(usv); return user; }