-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathmysesion.cpp
66 lines (55 loc) · 1.68 KB
/
mysesion.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
#include <Wt/Dbo/Session.h>
#include <Wt/Dbo/ptr.h>
#include <Wt/Dbo/backend/Sqlite3.h>
#include <Wt/Dbo/Dbo.h>
#include <Wt/WApplication.h>
#include <Wt/WLogger.h>
#include "user.h"
#include <vector>
using namespace Wt;
namespace dbo = Wt::Dbo;
typedef dbo::ptr<User> User_ptr;
typedef dbo::collection<User_ptr> Users;
class DBSession {
public:
DBSession(){
auto sqlite3 = std::make_unique<Dbo::backend::Sqlite3>
(WApplication::instance()->appRoot() + "hangman.db");
sqlite3->setProperty("show-queries", "true");
session_.setConnection(std::move(sqlite3));
session_.mapClass<User>("user");
dbo::Transaction transaction(session_);
try {
session_.createTables();
log("info") << "Database created";
} catch (...) {
log("info") << "Using existing database";
}
transaction.commit();
}
~DBSession()
{}
std::vector<User*> allUsers() const {
std::vector <User*> result;
dbo::Transaction transaction{session_};
Users users = session_.find<User>();
for (const dbo::ptr<User> &user : users){
result.push_back(new User(user.get()));
}
return result;
}
void removeUser(const User* user){
dbo::Transaction transaction{session_};
User_ptr userToDelete =
session_.find<User>().where("name = ?").bind(user->name());
userToDelete.remove();
}
void addUser(const User* newUser){
dbo::Transaction transaction{session_};
std::unique_ptr<User> user{new User(newUser)};
session_.add(std::move(user));
transaction.commit();
}
private:
mutable dbo::Session session_;
};