User Model for database access
This commit is contained in:
50
src/models/User.cpp
Normal file
50
src/models/User.cpp
Normal 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
66
src/models/User.h
Normal 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
|
||||||
Reference in New Issue
Block a user