#include "repository_manager.h" #include "genres_repository.h" #include "halls_repository.h" #include "movies_repository.h" #include "refunds_repository.h" #include "roles_repository.h" #include "schema_metadata.h" #include "sessions_repository.h" #include "sessions_statistics_repository.h" #include "tickets_repository.h" #include "users_repository.h" RepositoryManager::RepositoryManager() { database_ = QSqlDatabase::database(); if (!database_.isOpen()) { qDebug() << "Database is not open. Cannot initialize repositories"; return; } initialize(); } RepositoryManager::~RepositoryManager() { qInfo() << "Repositories manager is being destroyed"; } RepositoryManager &RepositoryManager::instance() { static RepositoryManager instance; return instance; } void RepositoryManager::initialize() { // clang-format off SchemaMetadata metadata = SchemaMetadata::defaultSchema(); // Tables registerRepository( metadata.repositoryTableName("genres")); registerRepository( metadata.repositoryTableName("halls")); registerRepository( metadata.repositoryTableName("movies")); registerRepository( metadata.repositoryTableName("refunds")); registerRepository( metadata.repositoryTableName("sessions")); registerRepository( metadata.repositoryTableName("tickets")); registerRepository( metadata.repositoryTableName("users")); registerRepository( metadata.repositoryTableName("roles")); // Views registerRepository( metadata.repositoryTableName("sessions_statistics")); // clang-format on } RepositoryInterface * RepositoryManager::getRepository(const QString &repositoryTableName) const { RepositoryInterface *repository = repositories_.value(repositoryTableName, nullptr); if (repository == nullptr) { qDebug() << "Repository" << repositoryTableName << "is not registered"; return nullptr; } qDebug() << "Getting model" << repositoryTableName << "with value" << repository; return repository; }