#include "roles_repository.h" #include "create_role_request.h" #include "repository_result.h" #include "role_dto.h" #include "update_role_request.h" #include #include RolesRepository::RolesRepository(QSqlDatabase &database, QObject *parent) : BaseSqlTableRepository(database, parent) {} RepositoryResult RolesRepository::createRole(const CreateRoleRequest &request) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("INSERT INTO roles (role_name, access_level) VALUES " "(:role_name, :access_level)"); query.bindValue(":role_name", request.roleName()); query.bindValue(":access_level", request.accessLevel()); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataCreated(); return RepositoryResult::successResult(); } RepositoryResult RolesRepository::getRoleById(qint32 id, RoleDTO &role) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare("SELECT role_id, role_name, access_level FROM roles WHERE " "role_id = :role_id"); query.bindValue(":role_id", id); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } if (!query.next()) { return RepositoryResult::failureResult("Role not found"); } role = mapQueryToDTO(query); emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult RolesRepository::getAllRoles(QVector &roles) const { QSqlQuery query = foreignKeysOnQuery(); query.prepare("SELECT role_id, role_name, access_level FROM roles"); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } while (query.next()) { roles.append(mapQueryToDTO(query)); } emit dataRetrieved(); return RepositoryResult::successResult(); } RepositoryResult RolesRepository::updateRole(const UpdateRoleRequest &request) { QSqlQuery query = foreignKeysOnQuery(); query.prepare( "UPDATE roles SET role_name = :role_name WHERE role_id = :role_id"); query.bindValue(":role_name", request.roleName()); query.bindValue(":role_id", request.roleId()); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataUpdated(); return RepositoryResult::successResult(); } RepositoryResult RolesRepository::deleteRoleById(qint32 roleId) { QSqlQuery query = foreignKeysOnQuery(); query.prepare("DELETE FROM roles WHERE role_id = :role_id"); query.bindValue(":role_id", roleId); if (!query.exec()) { return RepositoryResult::failureResult(query.lastError().text()); } emit dataDeleted(); return RepositoryResult::successResult(); } RoleDTO RolesRepository::mapQueryToDTO(const QSqlQuery &query) const { RoleDTO roleDTO; roleDTO.setAccessLevel(query.value("access_level").toInt()); roleDTO.setRoleId(query.value("role_id").toInt()); roleDTO.setRoleName(query.value("role_name").toString()); return roleDTO; }