summary refs log tree commit diff stats
path: root/lib/group.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lib/group.cpp')
-rw-r--r--lib/group.cpp44
1 files changed, 31 insertions, 13 deletions
diff --git a/lib/group.cpp b/lib/group.cpp index 8b6d985..d5790e9 100644 --- a/lib/group.cpp +++ b/lib/group.cpp
@@ -1,43 +1,61 @@
1#include "group.h" 1#include "group.h"
2#include <sqlite3.h> 2#include <sqlite3.h>
3#include "frame.h" 3#include <json.hpp>
4#include "database.h" 4#include "database.h"
5#include "query.h" 5#include "query.h"
6 6
7namespace verbly { 7namespace verbly {
8 8
9 const object group::objectType = object::group; 9 const object group::objectType = object::group;
10 10
11 const std::list<std::string> group::select = {"group_id", "data"}; 11 const std::list<std::string> group::select = {"group_id", "data"};
12 12
13 const field group::id = field::integerField(object::group, "group_id"); 13 const field group::id = field::integerField(object::group, "group_id");
14 14
15 const field group::frame = field::joinThrough(object::group, "group_id", object::frame, "groups_frames", "frame_id"); 15 const field group::frame = field::joinThrough(object::group, "group_id", object::frame, "groups_frames", "frame_id");
16 const field group::word = field::joinField(object::group, "group_id", object::word); 16 const field group::word = field::joinField(object::group, "group_id", object::word);
17 17
18 group::group(const database& db, sqlite3_stmt* row) : db_(&db), valid_(true) 18 group::group(const database& db, sqlite3_stmt* row) : db_(&db), valid_(true)
19 { 19 {
20 id_ = sqlite3_column_int(row, 0); 20 id_ = sqlite3_column_int(row, 0);
21 21
22 // TODO: Initialize role data from row. 22 std::string rolesJsonStr(reinterpret_cast<const char*>(sqlite3_column_blob(row, 1)));
23 nlohmann::json rolesJson = nlohmann::json::parse(std::move(rolesJsonStr));
24 for (const nlohmann::json& roleJson : rolesJson)
25 {
26 std::string roleName = roleJson["type"];
27 selrestr roleSelrestr;
28
29 if (roleJson.find("selrestrs") != roleJson.end())
30 {
31 roleSelrestr = selrestr(roleJson["selrestrs"]);
32 }
33
34 roles_[roleName] = role(roleName, std::move(roleSelrestr));
35 }
23 } 36 }
24 37
25 const std::vector<frame>& group::getFrames() const 38 const std::vector<frame>& group::getFrames() const
26 { 39 {
27 if (!valid_) 40 if (!valid_)
28 { 41 {
29 throw std::domain_error("Bad access to uninitialized group"); 42 throw std::domain_error("Bad access to uninitialized group");
30 } 43 }
31 44
32 if (!initializedFrames_) 45 if (!initializedFrames_)
33 { 46 {
34 frames_ = db_->frames(frame::group %= *this, false, -1).all(); 47 frames_ = db_->frames(frame::group %= *this, false, -1).all();
35 48
36 initializedFrames_ = true; 49 initializedFrames_ = true;
37 } 50 }
38 51
39 return frames_; 52 return frames_;
40 } 53 }
41 54
55 const role& group::getRole(std::string roleName) const
56 {
57 return roles_.at(roleName);
58 }
59
42}; 60};
43 61