Initial commit
This commit is contained in:
@@ -0,0 +1,130 @@
|
||||
#include "users_repository.h"
|
||||
|
||||
#include "create_user_request.h"
|
||||
#include "repository_result.h"
|
||||
#include "update_user_request.h"
|
||||
#include "user_dto.h"
|
||||
#include <QSqlError>
|
||||
#include <QSqlQuery>
|
||||
|
||||
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<UserDTO> &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;
|
||||
}
|
||||
Reference in New Issue
Block a user