#include "users_repository.h" #include "create_user_request.h" #include "repository_result.h" #include "update_user_request.h" #include "user_dto.h" #include #include UsersRepository::UsersRepository(QSqlDatabase &database, QObject *parent) : BaseSqlTableRepository(database, parent) {} RepositoryResult UsersRepository::createUser(const CreateUserRequest &request) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("INSERT INTO users (username, password_hash, salt, role_id) " "VALUES (:username, :password_hash, :salt, :role_id)"); query.bindValue(":password_hash", request.passwordHash()); query.bindValue(":role_id", request.roleId()); query.bindValue(":salt", request.salt()); query.bindValue(":username", request.username()); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataCreated(); return RepositoryResult::successResult(); } RepositoryResult UsersRepository::getUserById(qint32 id, UserDTO &user) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare("SELECT user_id, username, password_hash, salt, role_id FROM " "users WHERE " "user_id = :user_id"); query.bindValue(":user_id", id); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } if (!query.next()) { return RepositoryResult::failureResult("User not found"); } user = mapQueryToDTO(query); emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult UsersRepository::getUserByUsername(const QString &username, UserDTO &user) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare("SELECT user_id, username, password_hash, salt, role_id FROM " "users WHERE " "username = :username"); query.bindValue(":username", username); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } if (!query.next()) { return RepositoryResult::failureResult("User not found"); } user = mapQueryToDTO(query); emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult UsersRepository::getAllUsers(QVector &users) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare( "SELECT user_id, username, password_hash, salt, role_id FROM users"); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } while (query.next()) { users.append(mapQueryToDTO(query)); } emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult UsersRepository::updateUser(const UpdateUserRequest &request) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("UPDATE users SET username = :username, password_hash = " ":password_hash, " "salt = :salt, role_id = :role_id WHERE user_id = :user_id"); query.bindValue(":username", request.username()); query.bindValue(":password_hash", request.passwordHash()); query.bindValue(":salt", request.salt()); query.bindValue(":role_id", request.roleId()); query.bindValue(":user_id", request.userId()); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataUpdated(); return RepositoryResult::successResult(); } RepositoryResult UsersRepository::deleteUserById(qint32 userId) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("DELETE FROM users WHERE user_id = :user_id"); query.bindValue(":user_id", userId); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataDeleted(); return RepositoryResult::successResult(); } UserDTO UsersRepository::mapQueryToDTO(const QSqlQuery &query) const { UserDTO userDTO; userDTO.setPasswordHash(query.value("password_hash").toString()); userDTO.setRoleId(query.value("role_id").toInt()); userDTO.setSalt(query.value("salt").toString()); userDTO.setUserId(query.value("user_id").toInt()); userDTO.setUsername(query.value("username").toString()); return userDTO; }