8 Database::Database(QObject *parent) :
11 qDebug() << __PRETTY_FUNCTION__;
16 qDebug() << __PRETTY_FUNCTION__;
19 bool Database::addTag(qulonglong userId, const QString &tag)
21 qDebug() << __PRETTY_FUNCTION__;
26 if (m_database.isOpen()) {
28 ret = tagQuery.exec(QString("SELECT id FROM tag WHERE name = '%1'")
32 if (ret && tagQuery.next()) {
33 tagId = tagQuery.value(0).toULongLong();
36 QSqlQuery tagInsertQuery;
37 ret = tagInsertQuery.exec(QString("INSERT INTO tag VALUES(NULL, '%1')")
41 tagId = tagInsertQuery.lastInsertId().toULongLong();
45 if (ret && (tagId != 0)) {
46 QSqlQuery userTagQuery;
48 ret = userTagQuery.exec(QString("INSERT INTO usertag VALUES('%1', '%2')")
49 .arg(userId).arg(tagId));
56 bool Database::createNotificationTable()
58 qDebug() << __PRETTY_FUNCTION__;
62 if (m_database.isOpen()) {
65 created = query.exec("CREATE TABLE IF NOT EXISTS notification ("
66 "id INTEGER PRIMARY KEY,"
70 "timestamp VARCHAR(20),"
72 "FOREIGN KEY(senderid) REFERENCES user(id),"
73 "FOREIGN KEY(receiverid) REFERENCES user(id)"
80 bool Database::createTagTable()
82 qDebug() << __PRETTY_FUNCTION__;
86 if (m_database.isOpen()) {
89 created = query.exec("CREATE TABLE IF NOT EXISTS tag ("
90 "id INTEGER PRIMARY KEY,"
91 "name VARCHAR(30) UNIQUE"
98 bool Database::createUserTable()
100 qDebug() << __PRETTY_FUNCTION__;
102 bool created = false;
104 if (m_database.isOpen()) {
107 created = query.exec("CREATE TABLE IF NOT EXISTS user ("
108 "id INTEGER PRIMARY KEY,"
119 bool Database::createUserTagTable()
121 qDebug() << __PRETTY_FUNCTION__;
123 bool created = false;
125 if (m_database.isOpen()) {
128 created = query.exec("CREATE TABLE IF NOT EXISTS usertag ("
131 "PRIMARY KEY(userid, tagid),"
132 "FOREIGN KEY(userid) REFERENCES user(id),"
133 "FOREIGN KEY(tagid) REFERENCES tag(id)"
140 QByteArray Database::getInterestingPeople(qulonglong userId,
141 const GeoCoordinate &southWestCoordinates,
142 const GeoCoordinate &northEastCoordinates)
144 qDebug() << __PRETTY_FUNCTION__;
146 QSqlQuery query(QString("SELECT user.id, user.name, user.image_url FROM user WHERE "
147 "user.latitude >= '%1' AND user.latitude <= '%2' AND "
148 "user.longitude >= '%3' AND user.longitude <= '%4' AND user.id IN "
149 "(SELECT DISTINCT usertag.userid FROM usertag WHERE usertag.tagid IN "
150 "(SELECT usertag.tagid FROM usertag WHERE usertag.userid = '%5') AND "
151 "usertag.userid != '%6')")
152 .arg(southWestCoordinates.latitude()).arg(northEastCoordinates.latitude())
153 .arg(southWestCoordinates.longitude()).arg(northEastCoordinates.longitude())
154 .arg(userId).arg(userId));
157 result.append("{\"people\": [");
159 while (query.next()) {
161 result.append("\"uid\": \"" + query.value(0).toString() + "\",");
162 result.append("\"name\": \"" + query.value(1).toString() + "\",");
163 result.append("\"image_url\": \"" + query.value(2).toString() + "\"");
167 int lastComma = result.lastIndexOf(",");
169 result.remove(result.lastIndexOf(","), 1);
173 return result.toUtf8();
176 QList<Notification*> &Database::getNotifications(qulonglong userId)
178 qDebug() << __PRETTY_FUNCTION__;
180 m_notifications.clear();
182 QSqlQuery query(QString("SELECT message.id, message.senderid, user.name, message.text FROM "
183 "message, user WHERE message.receiverid = '%1' AND "
184 "message.senderid = user.id").arg(userId));
186 while (query.next()) {
187 Notification *notification = new Notification();
188 notification->setId(query.value(0).toString());
189 notification->setSenderId(query.value(1).toString());
190 notification->setTitle(query.value(2).toString());
191 notification->setText(query.value(3).toString());
192 m_notifications.append(notification);
195 return m_notifications;
198 QStringList Database::getTags(qulonglong userId)
200 qDebug() << __PRETTY_FUNCTION__;
204 QSqlQuery query(QString("SELECT tag.name FROM usertag, tag WHERE usertag.userid = '%1' "
205 "AND usertag.tagid = tag.id").arg(userId));
208 tags.append(query.value(0).toString());
213 bool Database::openDatabase()
215 qDebug() << __PRETTY_FUNCTION__;
217 m_database = QSqlDatabase::addDatabase("QSQLITE");
219 QString path(QDir::home().path());
220 path.append(QDir::separator()).append("my.db.sqlite");
221 path = QDir::toNativeSeparators(path);
222 m_database.setDatabaseName(path);
224 return m_database.open();