User Model for database access

This commit is contained in:
Krad
2021-11-11 14:09:12 +08:00
parent 2c83a26f06
commit 08e82c008c
2 changed files with 116 additions and 0 deletions

50
src/models/User.cpp Normal file
View File

@@ -0,0 +1,50 @@
//
// Created by Krad on 2021/11/11.
//
#include "User.h"
#include "db/SQLHelper.h"
#include <QMetaProperty>
#include <qdebug.h>
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<QString,QVariant> 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;
}

66
src/models/User.h Normal file
View File

@@ -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 <QObject>
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