#ifndef DONATIONMANAGER_H #define DONATIONMANAGER_H #include #include #include class uDataBase; struct DonationTrigger { int id = -1; QString name; // Название триггера (например "Малый донат") QString rule; // Строка правила: "=100", ">1000", "100-200" и т.д. int priority = 0; // Вычисляется при парсинге (1 – exact, 2 – range, 3 – greater/ge) double minValue = 0; // Для численных сравнений double maxValue = 0; // Для диапазона (если range) bool isGreaterEqual = false; // true для ">=" }; class DonationManager : public QObject { Q_OBJECT public: explicit DonationManager(uDataBase *db, QObject *parent = nullptr); // Загрузить все триггеры из БД bool loadFromDatabase(); // Сохранить новый триггер в БД и добавить в список bool addTrigger(const QString &name, const QString &rule); // Удалить триггер по ID (и из БД, и из списка) bool deleteTrigger(int id); // Получить все триггеры (для отображения) QList getAllTriggers() const; // Поиск подходящего триггера по сумме доната // Возвращает имя триггера или пустую строку QString matchDonation(double amount) const; signals: void dataChanged(); // для обновления таблицы private: // Парсинг строки правила, заполняет поля min, max, priority, isGreaterEqual bool parseRule(const QString &rule, DonationTrigger &trigger) const; uDataBase *m_db; QList m_triggers; }; #endif // DONATIONMANAGER_H