diff --git a/database/userdao.h b/database/userdao.h index 20cd271..5500d5a 100644 --- a/database/userdao.h +++ b/database/userdao.h @@ -3,6 +3,7 @@ #include #include #include "../user.h" +#include "queryoption.h" class UserDao { public: @@ -10,6 +11,7 @@ class UserDao virtual bool exists(std::string username) = 0; virtual std::optional find(std::string username) = 0; virtual std::optional find(int id) = 0; + virtual std::vector list(QueryOption o) = 0; virtual void deleteUser(std::string username) = 0; virtual void save(const User &u) = 0; virtual ~UserDao(){}; diff --git a/database/userdaosqlite.cpp b/database/userdaosqlite.cpp index 2ac7719..3691de9 100644 --- a/database/userdaosqlite.cpp +++ b/database/userdaosqlite.cpp @@ -23,6 +23,7 @@ SOFTWARE. #include #include #include "userdaosqlite.h" +#include "sqlitequeryoption.h" UserDaoSqlite::UserDaoSqlite() { @@ -82,6 +83,39 @@ std::optional UserDaoSqlite::find(int id) } } +std::vector UserDaoSqlite::list(QueryOption o) +{ + std::vector result; + + try + { + + std::string queryOption = SqliteQueryOption(o).setOrderByColumn("username").setPrependWhere(true).build(); + std::string query = "SELECT username, password, salt, permissions, enabled FROM user " + queryOption; + + *db << query >> + [&](std::string username, std::vector pw, std::vector salt, int permisisons, bool enabled) + { + User tmp; + tmp.login = username; + tmp.password = pw; + tmp.salt = salt; + tmp.permissions = Permissions{permisisons}; + tmp.enabled = enabled; + result.push_back(tmp); + }; + } + catch(const sqlite::errors::no_rows &e) + { + return result; + } + catch(sqlite::sqlite_exception &e) + { + throwFrom(e); + } + return result; +} + void UserDaoSqlite::deleteUser(std::string username) { // What to do with the contributions of the user? diff --git a/database/userdaosqlite.h b/database/userdaosqlite.h index bcbc2df..f913feb 100644 --- a/database/userdaosqlite.h +++ b/database/userdaosqlite.h @@ -13,6 +13,7 @@ class UserDaoSqlite : public UserDao, protected SqliteDao std::optional find(std::string username); std::optional find(int id); + std::vector list(QueryOption o); void deleteUser(std::string username); void save(const User &u); using SqliteDao::SqliteDao;