#ifndef DATABASE_H #define DATABASE_H #include #include #include #include #include #include #include "../objects/profession.h" #include "../objects/user.h" typedef std::function UserPredicat; //< Тип функции-предиката для фильтров и удаления /** * @brief Класс базы данных * * Данный класс позволяет получать доступ к данным системы (пользователям, профессиям) */ class Database { private: //! Статический объект класса static Database *mInstance; //! Статическая константа, содержащая путь до файла сохранения данных static const QString mFilename; /** * @brief Стандартный конструктор класс * * Сделан приватным, чтобы никто снаружи не мог создавать объекты данного класса */ Database() = default; //! Список всех профессий системы QVector mProfessions; //! Список всех пользователей системы QVector mUsers; /** * @brief Функция поиска пользователя с использованием предиката * * @param predicat функция-предикат * @return QVector список указателей на пользователей, соответствующих предикату */ QVector findUserByPredicat(UserPredicat predicat); public: /** * @brief Возвращает статический объекта класса * * @return Database* указатель на статический объект класса */ static Database* instance(); /** * @brief Возвращает список профессий системы * * @return QVector список профессий системы */ QVector professions() const; /** * @brief Возвращает список пользователй системы * * @return QVector список пользователей системы */ QVector users() const; /** * @brief Добавляет пользователя в систему * * @param usr новый пользователь * @return true успех * @return false не успех (пользователь уже есть в системе) */ bool addUser(User usr); /** * @brief Возвращает пользователя по уникальному идентификатору \param uid * * @param uid уникальный идентификатор пользователя * @return User* указатель на объект пользователя */ User* getUser(UID uid); /** * @brief Возвращает пользователя по его логину \param login * * @param login логин пользователя * @return User* указатель на объект пользователя */ User* getUser(QString login); /** * @brief Возвращает список пользователей по типу аккаунта \param type * * @param type тип аккаунта пользователя * @return QVector список указателей на объекты пользователей */ QVector getUsersByType(UserType type); /** * @brief Возвращает список пользователей по принадлежности к профессии * * @param pid уникальный идентификатор профессии * @return QVector список указателей на объекты пользователей */ QVector getUsersByProfession(PID pid); /** * @brief Удалаяет пользователя из системы по уникальному идентификатору \param uid * * @param uid уникальный идентификатор пользователя * @return true успех * @return false не успех (пользователя не существует) */ bool removeUser(UID uid); /** * @brief Добавляет профессию в систему * * @param prof новая профессия * @return true успех * @return false не успех (профессия существует) */ bool addProfession(Profession prof); /** * @brief Возвращает профессию по уникальному идентификатору \param pid * * @param pid уникальный идентификатор профессии * @return Profession* указатель на объект профессий */ Profession* getProfession(PID pid); /** * @brief Удаляет профессию из системы по уникальному идентификатору \param pid * * @param pid уникальынй идентификатор профессии * @return true успех * @return false не успех (профессии не существует или есть зависимые пользователи) */ bool removeProfession(PID pid); /** * @brief Считывает данный с диска в систему * */ void save(); /** * @brief Записывает данные системы на диск * */ void load(); }; #endif // DATABASE_H