#include "schema_metadata.h" #include QMap SchemaMetadata::databaseTableNameToConfigMap_; std::once_flag SchemaMetadata::initFlag; void SchemaMetadata::initialize() { qInfo() << "Initializing schema metadata..."; RelationIdConfig genreConfig; genreConfig.setPrimaryIdColumnName("genre_id"); genreConfig.setTranslatedTableName(tr("Genres")); genreConfig.setModelTableName("GenresModel"); genreConfig.setRepositoryTableName("GenresRepository"); databaseTableNameToConfigMap_.insert("genres", genreConfig); RelationIdConfig hallConfig; hallConfig.setPrimaryIdColumnName("hall_id"); hallConfig.setTranslatedTableName(tr("Halls")); hallConfig.setModelTableName("HallsModel"); hallConfig.setRepositoryTableName("HallsRepository"); databaseTableNameToConfigMap_.insert("halls", hallConfig); RelationIdConfig movieConfig; movieConfig.setPrimaryIdColumnName("movie_id"); movieConfig.setTranslatedTableName(tr("Movies")); movieConfig.setModelTableName("MoviesModel"); movieConfig.setRepositoryTableName("MoviesRepository"); databaseTableNameToConfigMap_.insert("movies", movieConfig); RelationIdConfig refundConfig; refundConfig.setPrimaryIdColumnName("refund_id"); refundConfig.setTranslatedTableName(tr("Refunds")); refundConfig.setModelTableName("RefundsModel"); refundConfig.setRepositoryTableName("RefundsRepository"); databaseTableNameToConfigMap_.insert("refunds", refundConfig); RelationIdConfig sessionConfig; sessionConfig.setPrimaryIdColumnName("session_id"); sessionConfig.setTranslatedTableName(tr("Sessions")); sessionConfig.setModelTableName("SessionsModel"); sessionConfig.setRepositoryTableName("SessionsRepository"); databaseTableNameToConfigMap_.insert("sessions", sessionConfig); RelationIdConfig ticketConfig; ticketConfig.setPrimaryIdColumnName("ticket_id"); ticketConfig.setTranslatedTableName(tr("Tickets")); ticketConfig.setModelTableName("TicketsModel"); ticketConfig.setRepositoryTableName("TicketsRepository"); databaseTableNameToConfigMap_.insert("tickets", ticketConfig); RelationIdConfig userConfig; userConfig.setPrimaryIdColumnName("user_id"); userConfig.setTranslatedTableName(tr("Users")); userConfig.setRepositoryTableName("UsersRepository"); databaseTableNameToConfigMap_.insert("users", userConfig); RelationIdConfig roleConfig; roleConfig.setPrimaryIdColumnName("role_id"); roleConfig.setTranslatedTableName(tr("Roles")); roleConfig.setRepositoryTableName("RolesRepository"); databaseTableNameToConfigMap_.insert("roles", roleConfig); RelationIdConfig tableInfoConfig; tableInfoConfig.setTranslatedTableName(tr("Sessions statistics")); tableInfoConfig.setRepositoryTableName("SessionsStatisticsRepository"); databaseTableNameToConfigMap_.insert("sessions_statistics", tableInfoConfig); qInfo() << "Schema metadata initialized successfully"; } SchemaMetadata::SchemaMetadata() noexcept { std::call_once(initFlag, &SchemaMetadata::initialize); } SchemaMetadata::SchemaMetadata(const SchemaMetadata &) {} SchemaMetadata &SchemaMetadata::operator=(const SchemaMetadata &) { return *this; } SchemaMetadata SchemaMetadata::defaultSchema() { return SchemaMetadata(); } QString SchemaMetadata::modelTableName(const QString &databaseTableName) { QString modelTableName = relationIdConfig(databaseTableName).modelTableName(); if (modelTableName.isEmpty()) { qFatal() << "Model table name is empty: Database table name:" << databaseTableName; } return modelTableName; } QString SchemaMetadata::primaryIdColumnName(const QString &databaseTableName) { QString primaryIdColumnName = relationIdConfig(databaseTableName).primaryIdColumnName(); if (primaryIdColumnName.isEmpty()) { qFatal() << "Primary id column name is empty: Database table name:" << databaseTableName; } return primaryIdColumnName; } QString SchemaMetadata::repositoryTableName(const QString &databaseTableName) { QString repositoryTableName = relationIdConfig(databaseTableName).repositoryTableName(); if (repositoryTableName.isEmpty()) { qFatal() << "Repository table name is empty: Database table name:" << databaseTableName; } return repositoryTableName; } QString SchemaMetadata::translatedTableName(const QString &databaseTableName) { QString translatedTableName = relationIdConfig(databaseTableName).translatedTableName(); if (translatedTableName.isEmpty()) { qFatal() << "Translated table name is empty: Database table name:" << databaseTableName; } return translatedTableName; } RelationIdConfig SchemaMetadata::relationIdConfig(const QString &databaseTableName) { RelationIdConfig config = databaseTableNameToConfigMap_.value(databaseTableName); return config; }