#include "databaselms.h" #include #include #include DataBaseLMS::DataBaseLMS(): db(nullptr) { createConnection(); } DataBaseLMS::~DataBaseLMS() { deleteConnection(); } bool DataBaseLMS::createConnection() { db = new QSqlDatabase(QSqlDatabase::addDatabase(dbType)); db->setDatabaseName(dbName); db->setUserName(dbUserName); db->setPassword(dbPassword); if(!db->open()) { QMessageBox::critical(nullptr, dbName, "Connection error: " + db->lastError().text()); return false; } else { QMessageBox::information(nullptr, dbName, "Connection is successful!"); return true; } } void DataBaseLMS::deleteConnection() { if(db != nullptr) { if(db->isOpen()) db->close(); delete db; } } QList DataBaseLMS::selectAllInstructors() { QList listInstructors; QString queryStr = QString("SELECT instructor_id, name, login, password, is_admin, archived " "FROM public.instructors " "ORDER BY instructor_id ASC"); QSqlQuery query(*db); if(!query.exec(queryStr)) { messageWarningErrorQuery(queryStr); } else { while (query.next()) {//Инструктор Instructor instructor; instructor.setID(query.value(0).toInt()); instructor.setName(query.value(1).toString()); instructor.setLogin(query.value(2).toString()); instructor.setPassword(query.value(3).toString()); instructor.setIsAdmin(query.value(4).toBool()); instructor.setArchived(query.value(5).toBool()); instructor.setLoggedIn(false); listInstructors.append(instructor); } } return listInstructors; } QList DataBaseLMS::selectAllTrainees() { QList listTrainees; QString queryStr = QString("SELECT trainees.trainee_id, trainees.name, trainees.login, trainees.password, trainees.archived, " "groups_of_trainees.name " "FROM public.trainees JOIN public.groups_of_trainees ON groups_of_trainees.group_id = trainees.group_trainees " "ORDER BY groups_of_trainees.name ASC"); QSqlQuery query(*db); if(!query.exec(queryStr)) { messageWarningErrorQuery(queryStr); } else { while (query.next()) {//Обучаемый Trainee trainee; trainee.setID(query.value(0).toInt()); trainee.setName(query.value(1).toString()); trainee.setLogin(query.value(2).toString()); trainee.setPassword(query.value(3).toString()); trainee.setArchived(query.value(4).toBool()); trainee.setGroup(query.value(5).toString()); trainee.setWhatItDoes(QStringLiteral("")); trainee.setLoggedIn(false); trainee.setLearnClass(QStringLiteral("")); trainee.setComputer(QStringLiteral("")); listTrainees.append(trainee); } } return listTrainees; } QList DataBaseLMS::selectAllGroups() { QList listGroups; QString queryStr = QString("SELECT group_id, name, color " "FROM public.groups_of_trainees " "ORDER BY group_id ASC"); QSqlQuery query(*db); if(!query.exec(queryStr)) { messageWarningErrorQuery(queryStr); } else { while (query.next()) {//Группа Group group; group.setID(query.value(0).toInt()); group.setName(query.value(1).toString()); group.setColor((Group::ColorGroup)query.value(2).toInt()); listGroups.append(group); } } return listGroups; } bool DataBaseLMS::insertInstructor(Instructor instructor) { QString queryStr = QString("INSERT INTO public.instructors (name, login, password, is_admin, archived) " "VALUES ('%1', '%2', '%3', %4, %5)").arg( instructor.getName(), instructor.getLogin(), instructor.getPassword(), instructor.getIsAdmin() ? "true" : "false", instructor.getArchived() ? "true" : "false"); return queryExec(queryStr); } bool DataBaseLMS::deleteInstructor(int instructor_id) { QString queryStr = QString("DELETE FROM public.instructors WHERE instructor_id = %1").arg(QString::number(instructor_id)); return queryExec(queryStr); } bool DataBaseLMS::updateInstructor(Instructor instructor) { QString queryStr = QString("UPDATE public.instructors " "SET name = '%1', login = '%2', password = '%3', is_admin = %4, archived = %5 " "WHERE instructor_id = %6").arg( instructor.getName(), instructor.getLogin(), instructor.getPassword(), instructor.getIsAdmin() ? "true" : "false", instructor.getArchived() ? "true" : "false", QString::number(instructor.getID()) ); return queryExec(queryStr); } bool DataBaseLMS::insertGroup(Group group) { QString queryStr = QString("INSERT INTO public.groups_of_trainees (name, color) " "VALUES ('%1', %2)").arg( group.getName(), QString::number((int)group.getColor())); return queryExec(queryStr); } bool DataBaseLMS::deleteGroup(int group_id) { QString queryStr = QString("DELETE FROM public.groups_of_trainees WHERE group_id = %1").arg(QString::number(group_id)); return queryExec(queryStr); } bool DataBaseLMS::updateGroup(Group group) { QString queryStr = QString("UPDATE public.groups_of_trainees SET name = '%1', color = %2 WHERE group_id = %3").arg( group.getName(), QString::number((int)group.getColor()), QString::number(group.getID()) ); return queryExec(queryStr); } bool DataBaseLMS::insertTrainee(Trainee trainee) { QString queryStr = QString("INSERT INTO public.trainees (name, login, password, archived, group_trainees) " "VALUES ('%1', '%2', '%3', %4, " "(SELECT group_id FROM public.groups_of_trainees WHERE name = '%5') " ")").arg( trainee.getName(), trainee.getLogin(), trainee.getPassword(), trainee.getArchived() ? "true" : "false", trainee.getGroup()); return queryExec(queryStr); } bool DataBaseLMS::deleteTrainee(int trainee_id) { QString queryStr = QString("DELETE FROM public.trainees WHERE trainee_id = %1").arg(QString::number(trainee_id)); return queryExec(queryStr); } bool DataBaseLMS::updateTrainee(Trainee trainee) { QString queryStr = QString("UPDATE public.trainees " "SET name = '%1', login = '%2', password = '%3', archived = %4, group_trainees = " "(SELECT group_id FROM public.groups_of_trainees WHERE name = '%5') " "WHERE trainee_id = %6").arg( trainee.getName(), trainee.getLogin(), trainee.getPassword(), trainee.getArchived() ? "true" : "false", trainee.getGroup(), QString::number(trainee.getID()) ); return queryExec(queryStr); } bool DataBaseLMS::queryExec(QString queryStr) { QSqlQuery query(*db); if(!query.exec(queryStr)) { messageWarningErrorQuery(queryStr); return false; } else return true; } void DataBaseLMS::messageWarningErrorQuery(QString queryStr) { QMessageBox::warning(nullptr, dbName, "Error query: " + queryStr + "\n" + db->lastError().text()); }