Added get interesting people method.
[situare] / src / situareservice / database.cpp
1 #include <QDebug>
2 #include <QDir>
3 #include <QSqlQuery>
4 #include <QVariant>
5
6 #include "database.h"
7
8 Database::Database(QObject *parent) :
9     QObject(parent)
10 {
11     qDebug() << __PRETTY_FUNCTION__;
12 }
13
14 Database::~Database()
15 {
16     qDebug() << __PRETTY_FUNCTION__;
17 }
18
19 bool Database::addTag(int userId, const QString &tag)
20 {
21     qDebug() << __PRETTY_FUNCTION__;
22
23     bool ret = false;
24
25     if (m_database.isOpen()) {
26         QSqlQuery tagQuery;
27
28         ret = tagQuery.exec(QString("INSERT INTO tag VALUES(NULL, '%1')")
29                          .arg(tag));
30
31         qWarning() << tagQuery.lastError().number();
32         qWarning() << tagQuery.lastError().driverText();
33         qWarning() << tagQuery.lastError().databaseText();
34
35         if (ret || (tagQuery.lastError().number() == 19)) {
36             int tagId = tagQuery.lastInsertId().toInt();
37
38             QSqlQuery userTagQuery;
39
40             ret = userTagQuery.exec(QString("INSERT INTO usertag VALUES(NULL, '%1', '%2')")
41                                     .arg(userId).arg(tagId));
42         }
43     }
44
45     return ret;
46 }
47
48 bool Database::createTagTable()
49 {
50     qDebug() << __PRETTY_FUNCTION__;
51
52     bool created = false;
53
54     if (m_database.isOpen()) {
55
56         QSqlQuery query;
57         created = query.exec("CREATE TABLE IF NOT EXISTS tag ("
58                              "id INTEGER PRIMARY KEY,"
59                              "name VARCHAR(30) UNIQUE"
60                              ")");
61     }
62
63     return created;
64 }
65
66 bool Database::createUserTagTable()
67 {
68     qDebug() << __PRETTY_FUNCTION__;
69
70     bool created = false;
71
72     if (m_database.isOpen()) {
73
74         QSqlQuery query;
75         created = query.exec("CREATE TABLE IF NOT EXISTS usertag ("
76                              "id INTEGER PRIMARY KEY,"
77                              "userid INTEGER,"
78                              "tagid INTEGER,"
79                              "FOREIGN KEY(tagid) REFERENCES tag(id)"
80                              ")");
81     }
82
83     return created;
84 }
85
86 QStringList Database::getInterestingPeople(int userId)
87 {
88     qDebug() << __PRETTY_FUNCTION__;
89
90     QStringList interestingPeopleId;
91
92     QSqlQuery query(QString("SELECT DISTINCT ut.userid FROM usertag ut WHERE ut.id IN "
93                             "(SELECT ut.id FROM usertag ut WHERE userid = '%1')").arg(userId));
94
95     while (query.next())
96         interestingPeopleId.append(query.value(0).toString());
97
98     return interestingPeopleId;
99 }
100
101 QStringList Database::getTags(int userId)
102 {
103     qDebug() << __PRETTY_FUNCTION__;
104
105     QStringList tags;
106
107     QSqlQuery query(QString("SELECT t.name from usertag ut, tag t WHERE userid = '%1' AND "
108                             "ut.tagid = t.id").arg(userId));
109
110     while (query.next())
111         tags.append(query.value(0).toString());
112
113     return tags;
114 }
115
116 bool Database::openDatabase()
117 {
118     qDebug() << __PRETTY_FUNCTION__;
119
120     m_database = QSqlDatabase::addDatabase("QSQLITE");
121
122     QString path(QDir::home().path());
123     path.append(QDir::separator()).append("my.db.sqlite");
124     path = QDir::toNativeSeparators(path);
125     m_database.setDatabaseName(path);
126
127     return m_database.open();
128 }
129
130 void Database::test()
131 {
132     qDebug() << __PRETTY_FUNCTION__;
133
134     bool ret = false;
135
136     QSqlQuery tagQuery(QString("SELECT * from tag"));
137     qWarning() << tagQuery.lastError().text();
138     qWarning() << "id" << "name";
139     while (tagQuery.next()) {
140          qWarning() << tagQuery.value(0).toString() << tagQuery.value(1).toString();
141      }
142
143     QSqlQuery userTagQuery(QString("SELECT * from usertag"));
144     qWarning() << userTagQuery.lastError().text();
145     qWarning() << "id" << "userid" << "tagid";
146     while (userTagQuery.next()) {
147          qWarning() << userTagQuery.value(0).toString() <<
148                  userTagQuery.value(1).toString() << userTagQuery.value(2).toString();
149      }
150 }