Skip to content

Commit

Permalink
Added a method to get all users from the UserDB and UserManagers.
Browse files Browse the repository at this point in the history
  • Loading branch information
Relintai committed Nov 20, 2024
1 parent e7e91f7 commit 14100c3
Show file tree
Hide file tree
Showing 10 changed files with 121 additions and 11 deletions.
26 changes: 24 additions & 2 deletions modules/users/managers/user_manager.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -82,8 +82,26 @@ bool UserManager::_is_email_taken(const String &email) {
return false;
}

Vector<Ref<User>> UserManager::get_all() {
return Vector<Ref<User>>();
Vector<Ref<User>> UserManager::get_all_as_vector() {
Vector<Ref<User>> ret;

Array res = call("_get_all");

ret.resize(res.size());

for (int i = 0; i < res.size(); ++i) {
ret.write[i] = Ref<User>(res.get(i));
}

return ret;
}

Array UserManager::get_all_users() {
return call("_get_all_users");
}

Array UserManager::_get_all_users() {
return Array();
}

UserManager::UserManager() {
Expand All @@ -110,6 +128,7 @@ void UserManager::_bind_methods() {

BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "ret"), "_is_username_taken", PropertyInfo(Variant::STRING, "user_name")));
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::BOOL, "ret"), "_is_email_taken", PropertyInfo(Variant::STRING, "email")));
BIND_VMETHOD(MethodInfo(PropertyInfo(Variant::ARRAY, "ret"), "_get_all_users"));

ClassDB::bind_method(D_METHOD("get_user", "id"), &UserManager::get_user);
ClassDB::bind_method(D_METHOD("get_user_name", "user_name"), &UserManager::get_user_name);
Expand All @@ -131,4 +150,7 @@ void UserManager::_bind_methods() {

ClassDB::bind_method(D_METHOD("_is_username_taken", "user_name"), &UserManager::_is_username_taken);
ClassDB::bind_method(D_METHOD("_is_email_taken", "email"), &UserManager::_is_email_taken);

ClassDB::bind_method(D_METHOD("get_all_users"), &UserManager::get_all_users);
ClassDB::bind_method(D_METHOD("_get_all_users"), &UserManager::_get_all_users);
}
5 changes: 4 additions & 1 deletion modules/users/managers/user_manager.h
Original file line number Diff line number Diff line change
Expand Up @@ -66,7 +66,10 @@ class UserManager : public Node {
virtual bool _is_username_taken(const String &user_name);
virtual bool _is_email_taken(const String &email);

virtual Vector<Ref<User>> get_all();
virtual Vector<Ref<User>> get_all_as_vector();

Array get_all_users();
virtual Array _get_all_users();

UserManager();
~UserManager();
Expand Down
34 changes: 33 additions & 1 deletion modules/users/managers/user_manager_db.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -274,7 +274,7 @@ bool UserManagerDB::_is_email_taken(const String &email) {
return r->next_row();
}

Vector<Ref<User>> UserManagerDB::get_all() {
Vector<Ref<User>> UserManagerDB::get_all_as_vector() {
Ref<QueryBuilder> b = get_query_builder();

b->select("id, username, email, rank, pre_salt, post_salt, password_hash, banned, password_reset_token, locked");
Expand Down Expand Up @@ -306,6 +306,38 @@ Vector<Ref<User>> UserManagerDB::get_all() {
return users;
}

Array UserManagerDB::_get_all_users() {
Ref<QueryBuilder> b = get_query_builder();

b->select("id, username, email, rank, pre_salt, post_salt, password_hash, banned, password_reset_token, locked");
b->from(_database_table_name);
b->end_command();
// b->print();

Array users;

Ref<QueryResult> r = b->run();

while (r->next_row()) {
Ref<User> user = create_user();

user->set_user_id(r->get_cell_int(0));
user->set_user_name(r->get_cell(1));
user->set_email(r->get_cell(2));
user->set_rank(r->get_cell_int(3));
user->set_pre_salt(r->get_cell(4));
user->set_post_salt(r->get_cell(5));
user->set_password_hash(r->get_cell(6));
user->set_banned(r->get_cell_bool(7));
user->set_password_reset_token(r->get_cell(8));
user->set_locked(r->get_cell_bool(9));

users.push_back(user.get_ref_ptr());
}

return users;
}

void UserManagerDB::create_table() {
call("_create_table");
}
Expand Down
3 changes: 2 additions & 1 deletion modules/users/managers/user_manager_db.h
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,8 @@ class UserManagerDB : public UserManager {
bool _is_username_taken(const String &user_name);
bool _is_email_taken(const String &email);

Vector<Ref<User>> get_all();
Vector<Ref<User>> get_all_as_vector();
Array _get_all_users();

void create_table();
void drop_table();
Expand Down
18 changes: 17 additions & 1 deletion modules/users/managers/user_manager_file.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -152,10 +152,26 @@ bool UserManagerFile::_is_email_taken(const String &email) {
return false;
}

Vector<Ref<User>> UserManagerFile::get_all() {
Vector<Ref<User>> UserManagerFile::get_all_as_vector() {
return _users;
}

Array UserManagerFile::_get_all_users() {
Array ret;

_rw_lock.read_lock();

ret.resize(_users.size());

for (int i = 0; i < _users.size(); ++i) {
ret[i] = Variant(_users[i].get_ref_ptr());
}

_rw_lock.read_unlock();

return ret;
}

UserManagerFile::UserManagerFile() {
set_process_internal(true);
_save_folder_path = "users";
Expand Down
3 changes: 2 additions & 1 deletion modules/users/managers/user_manager_file.h
Original file line number Diff line number Diff line change
Expand Up @@ -59,7 +59,8 @@ class UserManagerFile : public UserManager {
bool _is_username_taken(const String &user_name);
bool _is_email_taken(const String &email);

Vector<Ref<User>> get_all();
Vector<Ref<User>> get_all_as_vector();
Array _get_all_users();

UserManagerFile();
~UserManagerFile();
Expand Down
14 changes: 13 additions & 1 deletion modules/users/managers/user_manager_static.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -105,10 +105,22 @@ bool UserManagerStatic::_is_email_taken(const String &email) {
return false;
}

Vector<Ref<User>> UserManagerStatic::get_all() {
Vector<Ref<User>> UserManagerStatic::get_all_as_vector() {
return _users;
}

Array UserManagerStatic::_get_all_users() {
Array ret;

ret.resize(_users.size());

for (int i = 0; i < _users.size(); ++i) {
ret[i] = Variant(_users[i].get_ref_ptr());
}

return ret;
}

Vector<Variant> UserManagerStatic::get_users() {
Vector<Variant> r;
for (int i = 0; i < _users.size(); i++) {
Expand Down
3 changes: 2 additions & 1 deletion modules/users/managers/user_manager_static.h
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,8 @@ class UserManagerStatic : public UserManager {
bool _is_username_taken(const String &user_name);
bool _is_email_taken(const String &email);

Vector<Ref<User>> get_all();
Vector<Ref<User>> get_all_as_vector();
Array _get_all_users();

Vector<Variant> get_users();
void set_users(const Vector<Variant> &users);
Expand Down
22 changes: 22 additions & 0 deletions modules/users/singleton/user_db.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -158,6 +158,26 @@ bool UserDB::is_email_taken(const String &email) {
return false;
}

Array UserDB::get_all_users() {
if (_user_manager) {
return _user_manager->get_all_users();
}

Array ret;

_lock.read_lock();

ret.resize(_users.size());

for (int i = 0; i < _users.size(); ++i) {
ret[i] = Variant(_users[i].get_ref_ptr());
}

_lock.read_unlock();

return ret;
}

UserManager *UserDB::get_user_manager() {
return _user_manager;
}
Expand Down Expand Up @@ -193,6 +213,8 @@ void UserDB::_bind_methods() {
ClassDB::bind_method(D_METHOD("is_username_taken", "user_name"), &UserDB::is_username_taken);
ClassDB::bind_method(D_METHOD("is_email_taken", "email"), &UserDB::is_email_taken);

ClassDB::bind_method(D_METHOD("get_all_users"), &UserDB::get_all_users);

ClassDB::bind_method(D_METHOD("get_user_manager"), &UserDB::get_user_manager_bind);
}

Expand Down
4 changes: 2 additions & 2 deletions modules/users/singleton/user_db.h
Original file line number Diff line number Diff line change
Expand Up @@ -50,8 +50,6 @@ class UserDB : public Object {
//get_user_id
//get_user_index
//get_user_count
//get_users
//get_users_bind
//delete_user_id
//delete_user_index
//delete_user_name
Expand All @@ -69,6 +67,8 @@ class UserDB : public Object {
bool is_username_taken(const String &user_name);
bool is_email_taken(const String &email);

Array get_all_users();

UserManager *get_user_manager();
void set_user_manager(UserManager *um);

Expand Down

0 comments on commit 14100c3

Please sign in to comment.