Add documentation for users.h

This commit is contained in:
E. Kozlovskaya 2021-01-05 21:02:31 +07:00
parent c393ffef22
commit f638e1dbc7

View file

@ -9,54 +9,190 @@
#include "profession.h" #include "profession.h"
#include "userprofession.h" #include "userprofession.h"
typedef QUuid UID; typedef QUuid UID; //< Тип для UUID пользователя
typedef QVector<UserProfession> ProfessionsList; typedef QVector<UserProfession> ProfessionsList; //< Тип списка профессий пользователя
//! Набор возможных типов аккаунта пользователя
enum class UserType { enum class UserType {
ADMINISTRATOR = 0, ADMINISTRATOR = 0, //< Указывает, что пользователь является администратором
DISPATCHER = 1, DISPATCHER = 1, //< Указывает, что пользователя является диспетчером
WORKER = 2 WORKER = 2 //< Указывает, что пользователь является рабочим
}; };
/**
* @brief Класс сущности пользователя
*
*/
class User { class User {
private: private:
//! UUID данного пользователя
UID mUID; UID mUID;
//! Логин данного пользователя
QString mLogin; QString mLogin;
//! Пароль данного пользователя
QString mPassword; QString mPassword;
//! Тип аккаунта данного пользователя
UserType mUserType; UserType mUserType;
//! Имя данного пользователя
QString mFirstName; QString mFirstName;
//! Фамилия данного пользователя
QString mSecondName; QString mSecondName;
//! Отчество данного пользователя
QString mPatronymic; QString mPatronymic;
//! Список профессий пользователя
ProfessionsList mProfessions; ProfessionsList mProfessions;
//! UUID текущей профессии пользователя
PID mCurrentProfession = 0; PID mCurrentProfession = 0;
//! Объявляем, что класс \see RegistrationDialog является дружественным данному
friend class RegistrationDialog; friend class RegistrationDialog;
public: public:
/**
* @brief Стандартный конструктор объекта класса
*
*/
User() = default; User() = default;
/**
* @brief Возвращает уникальный идентификатор пользователя
*
* @return UID уникальный идентификатор пользователя
*/
UID uID() const; UID uID() const;
/**
* @brief Возвращает логин пользователя
*
* @return QString логин пользователя
*/
QString getLogin() const; QString getLogin() const;
/**
* @brief Проверяет, совпадает ли \param password с текущим паролем пользователя
*
* @param password проверяемый пароль
* @return true пароли совпадают
* @return false пароли не совпадают
*/
bool checkPassword(const QString &password); bool checkPassword(const QString &password);
/**
* @brief Возвращает тип аккаунта пользователя
*
* @return UserType тип аккаунта пользователя
*/
UserType getUserType() const; UserType getUserType() const;
/**
* @brief Возвращает имя пользователя
*
* @return QString имя пользоваетля
*/
QString firstName() const; QString firstName() const;
/**
* @brief Возвращает фамилию пользователя
*
* @return QString фамилия пользователя
*/
QString secondName() const; QString secondName() const;
/**
* @brief Возвращает отчество пользователя
*
* @return QString отчество пользователя
*/
QString patronymic() const; QString patronymic() const;
/**
* @brief Возвращает полное имя пользователя (Фамилия Имя Отчество)
*
* @return QString полное имя пользователя
*/
QString getFullName() const; QString getFullName() const;
/**
* @brief Возвращает краткую форму полного имени пользователя (Фамилия И.О.)
*
* @return QString краткая форма полного имени пользователя
*/
QString getFullNameShortForm() const; QString getFullNameShortForm() const;
/**
* @brief Возвращает список профессий пользователя
*
* @return ProfessionsList список профессий пользователя
*/
ProfessionsList getProfessions() const; ProfessionsList getProfessions() const;
/**
* @brief Возвращает уникальный идентификатор текущей профессии пользователя
*
* @return PID уникальный идентификатор профессии
*/
PID getCurrentProfession() const; PID getCurrentProfession() const;
/**
* @brief Функция создания объекта пользователя
*
* @param login логин пользователя
* @param password пароль пользователя
* @param userType тип аккаунта пользователя
* @param firstName имя пользователя
* @param secondName фамилия пользователя
* @param patronymic отчество пользователя
* @return User* указатель на объект нового пользователя
*/
static User* createUser(QString login, QString password, UserType userType, static User* createUser(QString login, QString password, UserType userType,
QString firstName, QString secondName, QString patronymic); QString firstName, QString secondName, QString patronymic);
/**
* @brief Проверка, имеется и у пользователя профессия с данным \param pid
*
* @param pid уникальный идентификатор интересующей профессии
* @return true пользователь имеет данную профессию
* @return false данная профессия у пользователя отсутствует
*/
bool hasProfession(PID pid); bool hasProfession(PID pid);
/**
* @brief Добавляет профессию в список пользователя, вытесняя самую старую
*
* @param pid уникальный идентификатор профессии
* @param rank разряд рабочего в данной профессии
* @return true успех
* @return false не успех (данная профессия уже есть или будет вытеснена текущая профессия)
*/
bool addProfession(PID pid, ProfRank rank); bool addProfession(PID pid, ProfRank rank);
/**
* @brief Устанавливает текущую профессию пользователя по \param pid
*
* @param pid уникальный идентификатор профессии
* @return true успех
* @return false не успех (не владеет данной профессией)
*/
bool setCurrentProfession(PID pid); bool setCurrentProfession(PID pid);
/**
* @brief Убирает профессию с \param pid из списка профессий пользователя
*
* @param pid
*/
void removeProfession(PID pid); void removeProfession(PID pid);
/**
* @brief Определения оператора сравнения для класса
*
* @param l левый операнд
* @param r правый операнд
* @return true объекты идентичны
* @return false объекты отличаются
*/
friend bool operator==(const User &l, const User &r); friend bool operator==(const User &l, const User &r);
/**
* @brief Определение оператора ввода в поток
*
* @param stream поток
* @param prof объект класса
* @return QDataStream& ссылка на поток
*/
friend QDataStream& operator<<(QDataStream &stream, const User &usr); friend QDataStream& operator<<(QDataStream &stream, const User &usr);
/**
* @brief Определение оператора ввода из потока
*
* @param stream поток
* @param prof объект класса
* @return QDataStream& ссылка на поток
*/
friend QDataStream& operator>>(QDataStream &stream, User &usr); friend QDataStream& operator>>(QDataStream &stream, User &usr);
}; };