From 08e82c008c0e2d837daad3c0673cf73cbabfebc1 Mon Sep 17 00:00:00 2001 From: Krad Date: Thu, 11 Nov 2021 14:09:12 +0800 Subject: [PATCH] User Model for database access --- src/models/User.cpp | 50 ++++++++++++++++++++++++++++++++++ src/models/User.h | 66 +++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 116 insertions(+) create mode 100644 src/models/User.cpp create mode 100644 src/models/User.h diff --git a/src/models/User.cpp b/src/models/User.cpp new file mode 100644 index 0000000..d654666 --- /dev/null +++ b/src/models/User.cpp @@ -0,0 +1,50 @@ +// +// Created by Krad on 2021/11/11. +// + +#include "User.h" +#include "db/SQLHelper.h" +#include +#include +User* User::currentUser = nullptr; + +User::User(QObject *parent) : QObject(parent) { + +} + +User::~User() { + +} + +bool User::submitChange() { + static QString updateSQL = "update Account %1 %2"; + QString setString = ""; + #define USER_READONLY_PROPERTY(name) + #define USER_PROPERTY(name)\ + USER_READONLY_PROPERTY(name)\ + setString += QString((!setString.isEmpty()&&mf_##name)?", ":"") + QString(mf_##name?QString("set %1='%2'").arg(#name, m_##name):""); + USER_PROPERTIES_MACRO() + #undef USER_PROPERTY + #undef USER_READONLY_PROPERTY + QString whereString = " where "+getIndexName()+" = '"+getIndexValue()+"'"; + return 1 == SQLHelper::ExecuteNoQuery(updateSQL.arg(setString,whereString)); +} + +bool User::QueryUser(QString userID, QString Pwd) { + QString sql = QString("select * from Account where UserCode='%1' and Password='%2'") + .arg(userID).arg(Pwd); + QMap map; + SQLHelper::Query(sql, map); + if(!map.isEmpty()) + { + if (!currentUser) currentUser = new User; + #define USER_READONLY_PROPERTY(name) currentUser->m_##name = map[#name].toString(); + #define USER_PROPERTY(name)\ + USER_READONLY_PROPERTY(name) + USER_PROPERTIES_MACRO() + #undef USER_PROPERTY + #undef USER_READONLY_PROPERTY + return true; + } + return false; +} diff --git a/src/models/User.h b/src/models/User.h new file mode 100644 index 0000000..8bf64fd --- /dev/null +++ b/src/models/User.h @@ -0,0 +1,66 @@ +// +// Created by Krad on 2021/11/11. +// + +#ifndef GUI_USER_H +#define GUI_USER_H + +#define USER_PROPERTIES_MACRO()\ +USER_READONLY_PROPERTY(UserID)\ +USER_READONLY_PROPERTY(UserCode)\ +USER_PROPERTY(UserName)\ +USER_PROPERTY(Password)\ +USER_PROPERTY(RoleID)\ +USER_PROPERTY(Comment) + + +#include +class User:public QObject { + Q_OBJECT +public: + static bool QueryUser(QString userID, QString Pwd); + static User* Current(){ + return currentUser; + } + explicit User(QObject *parent=nullptr); + ~User(); + QString getIndexName(){ + return "UserID"; + } + QString getIndexValue(){ + return m_UserID; + } + // add properties setter and getter + #define USER_READONLY_PROPERTY(name)\ + QString get##name(){\ + return m_##name;\ + } + #define USER_PROPERTY(name)\ + USER_READONLY_PROPERTY(name)\ + void set##name(const QString & v)\ + {\ + if (m_##name == v) return;\ + m_##name = v;\ + mf_##name = true;\ + } + USER_PROPERTIES_MACRO() + #undef USER_PROPERTY + #undef USER_READONLY_PROPERTY + + bool submitChange(); +private: + static User* currentUser; + + // add properties store and modify flag + #define USER_READONLY_PROPERTY(name) QString m_##name; + #define USER_PROPERTY(name)\ + USER_READONLY_PROPERTY(name)\ + bool mf_##name = false; + USER_PROPERTIES_MACRO() + #undef USER_PROPERTY + #undef USER_READONLY_PROPERTY + +}; + + +#endif //GUI_USER_H