55 lines
1.9 KiB
C++
55 lines
1.9 KiB
C++
#ifndef DONATIONMANAGER_H
|
||
#define DONATIONMANAGER_H
|
||
|
||
#include <QObject>
|
||
#include <QList>
|
||
#include <QString>
|
||
|
||
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<DonationTrigger> 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<DonationTrigger> m_triggers;
|
||
};
|
||
|
||
#endif // DONATIONMANAGER_H
|