diff options
author | Vincent Ambo <tazjin@gmail.com> | 2018-04-08T16·27+0200 |
---|---|---|
committer | Vincent Ambo <tazjin@gmail.com> | 2018-04-08T16·30+0200 |
commit | 316036b0a89a428e850ea33e07f5fe2362f833c9 (patch) | |
tree | 489a4e6c8b7e8f117b054d0087981027f288aad3 | |
parent | 6e56f8e729551ff14b7a72ca889b8dd38999fb2d (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.sql | 1 | ||||
-rw-r--r-- | migrations/2018-04-08-161017_joinable_posts/up.sql | 1 | ||||
-rw-r--r-- | src/db.rs | 8 | ||||
-rw-r--r-- | src/models.rs | 8 | ||||
-rw-r--r-- | src/schema.rs | 4 |
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, |