Files
cinema-ticket-management-sy…/core/services/model_manager.cpp
T
2026-07-12 14:34:52 +04:00

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);
}