diff options
| author | ilotterytea <iltsu@alright.party> | 2024-05-01 00:51:24 +0500 |
|---|---|---|
| committer | ilotterytea <iltsu@alright.party> | 2024-05-01 00:51:24 +0500 |
| commit | cd9d637d362566599081dbd19bc7a025fb40be73 (patch) | |
| tree | caff1d13ead0f7455536f01df0f2b3ebc4f2cdf5 /src | |
| parent | 6251ffbc25e800fd427697bbf91f4f951b0638a2 (diff) | |
feat: get or create user rights for request struct
Diffstat (limited to 'src')
| -rw-r--r-- | src/commands/request.hpp | 1 | ||||
| -rw-r--r-- | src/commands/request_util.cpp | 68 |
2 files changed, 45 insertions, 24 deletions
diff --git a/src/commands/request.hpp b/src/commands/request.hpp index 8538cdc..e2685f1 100644 --- a/src/commands/request.hpp +++ b/src/commands/request.hpp @@ -18,6 +18,7 @@ namespace bot::command { schemas::Channel channel; schemas::ChannelPreferences channel_preferences; schemas::User user; + schemas::UserRights user_rights; pqxx::connection &conn; }; diff --git a/src/commands/request_util.cpp b/src/commands/request_util.cpp index 9424082..fb4ebf4 100644 --- a/src/commands/request_util.cpp +++ b/src/commands/request_util.cpp @@ -42,12 +42,11 @@ namespace bot::command { parts.erase(parts.begin()); - pqxx::result channel_query = - work->exec("SELECT * FROM channels WHERE alias_id = " + - std::to_string(irc_message.source.id)); + pqxx::result query = work->exec("SELECT * FROM channels WHERE alias_id = " + + std::to_string(irc_message.source.id)); // Create new channel data in the database if it didn't exist b4 - if (channel_query.empty()) { + if (query.empty()) { work->exec("INSERT INTO channels (alias_id, alias_name) VALUES (" + std::to_string(irc_message.source.id) + ", '" + irc_message.source.login + "')"); @@ -57,18 +56,17 @@ namespace bot::command { delete work; work = new pqxx::work(conn); - channel_query = work->exec("SELECT * FROM channels WHERE alias_id = " + - std::to_string(irc_message.source.id)); + query = work->exec("SELECT * FROM channels WHERE alias_id = " + + std::to_string(irc_message.source.id)); } - schemas::Channel channel(channel_query[0]); + schemas::Channel channel(query[0]); - pqxx::result channel_pref_query = - work->exec("SELECT * FROM channel_preferences WHERE channel_id = " + - std::to_string(channel.get_id())); + query = work->exec("SELECT * FROM channel_preferences WHERE channel_id = " + + std::to_string(channel.get_id())); // Create new channel preference data in the database if it didn't exist b4 - if (channel_pref_query.empty()) { + if (query.empty()) { work->exec( "INSERT INTO channel_preferences (channel_id, prefix, locale) VALUES " "(" + @@ -80,19 +78,18 @@ namespace bot::command { delete work; work = new pqxx::work(conn); - channel_pref_query = + query = work->exec("SELECT * FROM channel_preferences WHERE channel_id = " + std::to_string(channel.get_id())); } - schemas::ChannelPreferences channel_preferences(channel_pref_query[0]); + schemas::ChannelPreferences channel_preferences(query[0]); - pqxx::result user_query = - work->exec("SELECT * FROM users WHERE alias_id = " + - std::to_string(irc_message.sender.id)); + query = work->exec("SELECT * FROM users WHERE alias_id = " + + std::to_string(irc_message.sender.id)); // Create new user data in the database if it didn't exist before - if (user_query.empty()) { + if (query.empty()) { work->exec("INSERT INTO users (alias_id, alias_name) VALUES (" + std::to_string(irc_message.sender.id) + ", '" + irc_message.sender.login + "')"); @@ -102,17 +99,39 @@ namespace bot::command { delete work; work = new pqxx::work(conn); - user_query = work->exec("SELECT * FROM users WHERE alias_id = " + - std::to_string(irc_message.sender.id)); + query = work->exec("SELECT * FROM users WHERE alias_id = " + + std::to_string(irc_message.sender.id)); } - schemas::User user(user_query[0]); + schemas::User user(query[0]); + + query = work->exec("SELECT * FROM user_rights WHERE user_id = " + + std::to_string(user.get_id()) + + " AND channel_id = " + std::to_string(channel.get_id())); + + if (query.empty()) { + work->exec("INSERT INTO user_rights (user_id, channel_id) VALUES (" + + std::to_string(user.get_id()) + ", " + + std::to_string(channel.get_id()) + ")"); + + work->commit(); + + delete work; + work = new pqxx::work(conn); + + query = work->exec("SELECT * FROM user_rights WHERE user_id = " + + std::to_string(user.get_id()) + " AND channel_id = " + + std::to_string(channel.get_id())); + } + + schemas::UserRights user_rights(query[0]); delete work; if (parts.empty()) { - Request req{command_id, std::nullopt, std::nullopt, irc_message, - channel, channel_preferences, user, conn}; + Request req{command_id, std::nullopt, std::nullopt, + irc_message, channel, channel_preferences, + user, user_rights, conn}; return req; } @@ -129,8 +148,9 @@ namespace bot::command { message = std::nullopt; } - Request req{command_id, subcommand_id, message, irc_message, - channel, channel_preferences, user, conn}; + Request req{command_id, subcommand_id, message, + irc_message, channel, channel_preferences, + user, user_rights, conn}; return req; } } |
