96 lines
2.6 KiB
C++
96 lines
2.6 KiB
C++
|
|
#include "model_manager.h"
|
||
|
|
|
||
|
|
#include "genres_model.h"
|
||
|
|
#include "halls_model.h"
|
||
|
|
#include "movies_model.h"
|
||
|
|
#include "refunds_model.h"
|
||
|
|
#include "schema_metadata.h"
|
||
|
|
#include "sessions_model.h"
|
||
|
|
#include "tickets_model.h"
|
||
|
|
|
||
|
|
ModelManager::ModelManager() {
|
||
|
|
// Get connection to the database
|
||
|
|
database_ = QSqlDatabase::database();
|
||
|
|
|
||
|
|
if (!database_.isOpen()) {
|
||
|
|
qDebug() << "Database is not open. Cannot initialize models";
|
||
|
|
return;
|
||
|
|
}
|
||
|
|
|
||
|
|
initialize();
|
||
|
|
}
|
||
|
|
|
||
|
|
ModelManager::~ModelManager() {
|
||
|
|
qInfo() << "Models manager is being destroyed";
|
||
|
|
}
|
||
|
|
|
||
|
|
ModelManager &ModelManager::instance() {
|
||
|
|
static ModelManager instance;
|
||
|
|
return instance;
|
||
|
|
}
|
||
|
|
|
||
|
|
QStringList ModelManager::registeredModelTableNames() const {
|
||
|
|
return models_.keys();
|
||
|
|
}
|
||
|
|
|
||
|
|
QStringList
|
||
|
|
ModelManager::registeredModelTableNames(QString databaseTableName) const {
|
||
|
|
QStringList registeredModelTableNames;
|
||
|
|
for (const auto &modelTableName : models_.keys()) {
|
||
|
|
QSqlTableModel *currentModel = getModelAs<QSqlTableModel>(modelTableName);
|
||
|
|
QString currentDatabaseTableName = currentModel->tableName();
|
||
|
|
if (currentDatabaseTableName == databaseTableName) {
|
||
|
|
registeredModelTableNames.append(modelTableName);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
return registeredModelTableNames;
|
||
|
|
}
|
||
|
|
|
||
|
|
void ModelManager::initialize() {
|
||
|
|
// clang-format off
|
||
|
|
|
||
|
|
SchemaMetadata metadata = SchemaMetadata::defaultSchema();
|
||
|
|
|
||
|
|
registerModel<GenresModel>(
|
||
|
|
metadata.modelTableName("genres"), database_);
|
||
|
|
|
||
|
|
registerModel<HallsModel>(
|
||
|
|
metadata.modelTableName("halls"), database_);
|
||
|
|
|
||
|
|
registerModel<MoviesModel>(
|
||
|
|
metadata.modelTableName("movies"), database_);
|
||
|
|
|
||
|
|
registerModel<RefundsModel>(
|
||
|
|
metadata.modelTableName("refunds"), database_);
|
||
|
|
|
||
|
|
registerModel<SessionsModel>(
|
||
|
|
metadata.modelTableName("sessions"), database_);
|
||
|
|
|
||
|
|
registerModel<TicketsModel>(
|
||
|
|
metadata.modelTableName("tickets"), database_);
|
||
|
|
|
||
|
|
// clang-format on
|
||
|
|
}
|
||
|
|
|
||
|
|
QSqlTableModel *ModelManager::getModel(const QString &modelTableName) const {
|
||
|
|
QSqlTableModel *model = models_.value(modelTableName, nullptr);
|
||
|
|
if (model == nullptr) {
|
||
|
|
qDebug() << "Model" << modelTableName << "is not registered";
|
||
|
|
return nullptr;
|
||
|
|
}
|
||
|
|
qDebug() << "Getting model" << modelTableName << "with value" << model;
|
||
|
|
|
||
|
|
return model;
|
||
|
|
}
|
||
|
|
|
||
|
|
void ModelManager::resetFilter(const QString &modelTableName) {
|
||
|
|
BaseSqlTableModel *model = getModelAs<BaseSqlTableModel>(modelTableName);
|
||
|
|
model->resetFilter();
|
||
|
|
}
|
||
|
|
|
||
|
|
void ModelManager::setMultiColumnFilter(const QString &modelTableName,
|
||
|
|
const QString &filter) {
|
||
|
|
BaseSqlTableModel *model = getModelAs<BaseSqlTableModel>(modelTableName);
|
||
|
|
model->setMultiColumnFilter(filter);
|
||
|
|
}
|