about summary refs log tree commit diff
diff options
context:
space:
mode:
authorVincent Ambo <tazjin@gmail.com>2018-04-08T16·27+0200
committerVincent Ambo <tazjin@gmail.com>2018-04-08T16·30+0200
commit316036b0a89a428e850ea33e07f5fe2362f833c9 (patch)
tree489a4e6c8b7e8f117b054d0087981027f288aad3
parent6e56f8e729551ff14b7a72ca889b8dd38999fb2d (diff)
refactor(db): Establish Post->Thread association
This makes it possible to query posts by thread via Diesel.
-rw-r--r--migrations/2018-04-08-161017_joinable_posts/down.sql1
-rw-r--r--migrations/2018-04-08-161017_joinable_posts/up.sql1
-rw-r--r--src/db.rs8
-rw-r--r--src/models.rs8
-rw-r--r--src/schema.rs4
5 files changed, 15 insertions, 7 deletions
diff --git a/migrations/2018-04-08-161017_joinable_posts/down.sql b/migrations/2018-04-08-161017_joinable_posts/down.sql
new file mode 100644
index 000000000000..cc7874b410ee
--- /dev/null
+++ b/migrations/2018-04-08-161017_joinable_posts/down.sql
@@ -0,0 +1 @@
+ALTER TABLE posts RENAME COLUMN thread_id TO thread;
diff --git a/migrations/2018-04-08-161017_joinable_posts/up.sql b/migrations/2018-04-08-161017_joinable_posts/up.sql
new file mode 100644
index 000000000000..9713de6cfc4b
--- /dev/null
+++ b/migrations/2018-04-08-161017_joinable_posts/up.sql
@@ -0,0 +1 @@
+ALTER TABLE posts RENAME COLUMN thread TO thread_id;
diff --git a/src/db.rs b/src/db.rs
index c3a05a32372b..1aa6ff73c78c 100644
--- a/src/db.rs
+++ b/src/db.rs
@@ -47,11 +47,15 @@ impl Handler<GetThread> for DbExecutor {
 
     fn handle(&mut self, msg: GetThread, _: &mut Self::Context) -> Self::Result {
         use schema::threads::dsl::*;
+
         let conn = self.0.get().unwrap();
-        let result: Thread = threads
+        let thread_result: Thread = threads
             .find(msg.0).first(&conn)
             .expect("Error loading thread");
 
-        Ok((result, vec![]))
+        let post_list = Post::belonging_to(&thread_result)
+            .load::<Post>(&conn).expect("Error loading posts for thread");
+
+        Ok((thread_result, post_list))
     }
 }
diff --git a/src/models.rs b/src/models.rs
index 74b386a19cf9..42d8d11649ff 100644
--- a/src/models.rs
+++ b/src/models.rs
@@ -1,6 +1,7 @@
 use chrono::prelude::{DateTime, Utc};
+use schema::{threads, posts};
 
-#[derive(Queryable, Serialize)]
+#[derive(Identifiable, Queryable, Serialize)]
 pub struct Thread {
     pub id: i32,
     pub title: String,
@@ -8,10 +9,11 @@ pub struct Thread {
     pub posted: DateTime<Utc>,
 }
 
-#[derive(Queryable, Serialize)]
+#[derive(Identifiable, Queryable, Serialize, Associations)]
+#[belongs_to(Thread)]
 pub struct Post {
     pub id: i32,
-    pub thread: i32,
+    pub thread_id: i32,
     pub body: String,
     pub posted: DateTime<Utc>,
 }
diff --git a/src/schema.rs b/src/schema.rs
index a899f52ac2cc..8b05eb5461c3 100644
--- a/src/schema.rs
+++ b/src/schema.rs
@@ -1,7 +1,7 @@
 table! {
     posts (id) {
         id -> Int4,
-        thread -> Int4,
+        thread_id -> Int4,
         body -> Text,
         posted -> Timestamptz,
     }
@@ -16,7 +16,7 @@ table! {
     }
 }
 
-joinable!(posts -> threads (thread));
+joinable!(posts -> threads (thread_id));
 
 allow_tables_to_appear_in_same_query!(
     posts,