Files

77 lines
2.4 KiB
C++
Raw Permalink Normal View History

2026-07-12 14:34:52 +04:00
#ifndef ENTITY_UPDATER_WIDGET_H
#define ENTITY_UPDATER_WIDGET_H
#include "repository_manager.h"
#include "repository_result.h"
#include "schema_metadata.h"
#include "ui_entity_updater_widget.h"
#include <QSqlField>
// Forward declaration
class RepositoryResult;
class TableInfo;
class EntityUpdaterWidget : public QWidget, public Ui::EntityUpdaterWidget {
Q_OBJECT
private:
QSqlField selectedForeignField_;
QSqlRecord selectedPrimaryEntity_;
qint32 primaryKey_;
public:
EntityUpdaterWidget(QWidget *parent = nullptr);
void setupChildEntityFinderWidget();
void setupComboBoxCurrentTable();
void setupConnections();
void setupLabels();
void setupParentEntityFinderWidget();
void configureForeignKeyFinder(const QString &columnName,
const QString &databaseTableName);
void configureForeignKeyFinder(const QString &databaseTableName);
void configurePrimaryKeyFinder(const QString &databaseTableName);
private slots:
void onColumnSelected(int columnIndex);
void onForeignFieldRetrieved(const QSqlField &field);
void onPrimaryEntityRetrieved(const QSqlRecord &entity);
void onPrimaryFieldRetrieved(const QSqlField &field);
void onPushButtonUpdateClicked();
void onTableSelected(int tableIndex);
private:
QModelIndex findIndexByColumn(QAbstractItemModel *model, int column,
const QVariant &value);
bool isColumnsEqual(const QString &column);
qint32 actualForeignKey(const QString &columnName);
void processUpdateResult(const RepositoryResult &result);
void showMessageDialog(const RepositoryResult &result,
const QString &successMessage);
private:
template <const char *DatabaseTableName>
void processEntityUpdate(RepositoryResult &resultOut);
template <typename Repository> Repository *currentRepository();
template <typename Repository> RepositoryResult updateEntity();
template <typename ValueType>
ValueType actualColumnValue(const QString &columnName);
};
template <typename Repository>
Repository *EntityUpdaterWidget::currentRepository() {
SchemaMetadata metadata = SchemaMetadata::defaultSchema();
const QString &databaseTableName =
comboBoxCurrentTable->currentData().toString();
return RepositoryManager::instance().getRepositoryAs<Repository>(
metadata.repositoryTableName(databaseTableName));
}
#endif // ENTITY_UPDATER_WIDGET_H