From 93e095d46e7ba5a247eb23a649e24c1724e6fb5b Mon Sep 17 00:00:00 2001
From: Kevin Whitaker <eyecreate@gmail.com>
Date: Sat, 28 Jan 2017 14:41:08 -0500
Subject: [PATCH] Have GroovePlayer init music db on creation. Make fields
 correctly be fk.

---
 src/GroovePlayer.cpp | 18 ++++++++++++++++--
 src/GroovePlayer.h   |  9 +++++++--
 src/db/UserAction.h  |  8 ++++----
 3 files changed, 27 insertions(+), 8 deletions(-)

diff --git a/src/GroovePlayer.cpp b/src/GroovePlayer.cpp
index 3f20b1d..f72fe0a 100644
--- a/src/GroovePlayer.cpp
+++ b/src/GroovePlayer.cpp
@@ -18,8 +18,22 @@
  */
 
 #include "GroovePlayer.h"
+#include "db/User.h"
+#include "db/AudioTrack.h"
+#include "db/UserAction.h"
+#include <Wt/WLogger>
 
-GroovePlayer::GroovePlayer()
+GroovePlayer::GroovePlayer(std::string dbFile) : sqliteConnection(dbFile)
 {
+    sqlSession.setConnection(this->sqliteConnection);
+    sqlSession.mapClass<User>("user");
+    sqlSession.mapClass<AudioTrack>("tracks");
+    sqlSession.mapClass<UserAction>("actions");
+    try
+    {
+        sqlSession.createTables();
+    } catch(Wt::Dbo::Exception e) 
+    {
+        Wt::log("info") << "Using Existing DB.";
+    }
 }
-
diff --git a/src/GroovePlayer.h b/src/GroovePlayer.h
index 35e1233..3dc26eb 100644
--- a/src/GroovePlayer.h
+++ b/src/GroovePlayer.h
@@ -20,17 +20,22 @@
 #ifndef GROOVEPLAYER_H
 #define GROOVEPLAYER_H
 
+#include <Wt/Dbo/Session>
+#include <Wt/Dbo/backend/Sqlite3>
+
 class GroovePlayer
 {
 public:
     static GroovePlayer* getInstance() {
-        static GroovePlayer instance;
+        static GroovePlayer instance("music.db");
         return &instance;
     };
     GroovePlayer(GroovePlayer const&) = delete;
     void operator=(GroovePlayer const&) = delete;
 private:
-    GroovePlayer();
+    GroovePlayer(std::string dbFile);
+    Wt::Dbo::backend::Sqlite3 sqliteConnection;
+    Wt::Dbo::Session sqlSession;
 };
 
 #endif // GROOVEPLAYER_H
diff --git a/src/db/UserAction.h b/src/db/UserAction.h
index ec18747..93e5d0b 100644
--- a/src/db/UserAction.h
+++ b/src/db/UserAction.h
@@ -31,17 +31,17 @@ class UserAction
 public:
     enum UAction {Login = 0, Logout = 1, RequestTrack = 2, VoteTrack = 3, UploadTrack = 4, RequestSkip = 5, Pause = 6};
     
-    User user;
+    Wt::Dbo::ptr<User> user;
     UAction action;
-    AudioTrack trackInvolved;
+    Wt::Dbo::ptr<AudioTrack> trackInvolved;
     Wt::WDateTime datetime;
     
     template<class Action>
     void persist(Action& a)
     {
-        Wt::Dbo::field(a, user, "user");
+        Wt::Dbo::belongsTo(a, user, "user");
         Wt::Dbo::field(a, action, "action");
-        Wt::Dbo::field(a, trackInvolved, "track");
+        Wt::Dbo::belongsTo(a, trackInvolved, "track");
         Wt::Dbo::field(a, datetime, "datetime");
     }
     
-- 
GitLab