diff options
author | Vincent Ambo <tazjin@gmail.com> | 2018-05-01T18·49+0200 |
---|---|---|
committer | Vincent Ambo <github@tazj.in> | 2018-05-01T22·33+0200 |
commit | 9b1f6d3628884059753169f4dd6e018bab74c40f (patch) | |
tree | 5d608b4fa35cc935a7372985d211e2f9835ff2b5 /src/models.rs | |
parent | 9d5830e9a724d04b2f6fd410c7ae2b56ceea576f (diff) |
refactor(db/render/schema): Use SimplePost type for thread views
This uses the simplified view for querying posts instead of the post table directly to display posts.
Diffstat (limited to 'src/models.rs')
-rw-r--r-- | src/models.rs | 61 |
1 files changed, 42 insertions, 19 deletions
diff --git a/src/models.rs b/src/models.rs index 26985394cbd1..5c7bbb12d36a 100644 --- a/src/models.rs +++ b/src/models.rs @@ -17,51 +17,75 @@ // <http://www.gnu.org/licenses/>. use chrono::prelude::{DateTime, Utc}; -use schema::{threads, posts}; +use schema::{users, threads, posts, simple_posts}; use diesel::sql_types::{Text, Integer}; +/// Represents a single user in the Converse database. Converse does +/// not handle logins itself, but rather looks them up based on the +/// email address received from an OIDC provider. #[derive(Identifiable, Queryable, Serialize)] +pub struct User { + pub id: i32, + pub name: String, + pub email: String, + pub admin: bool, +} + +#[derive(Identifiable, Queryable, Serialize, Associations)] +#[belongs_to(User)] pub struct Thread { pub id: i32, pub title: String, pub posted: DateTime<Utc>, - pub author_name: String, - pub author_email: String, pub sticky: bool, + pub user_id: i32, } -/// This struct is used as the query type for the thread index view, -/// which lists the index of threads ordered by the last post in each -/// thread. -#[derive(Queryable, Serialize)] -pub struct ThreadIndex { +#[derive(Identifiable, Queryable, Serialize, Associations)] +#[belongs_to(Thread)] +#[belongs_to(User)] +pub struct Post { + pub id: i32, pub thread_id: i32, - pub title: String, - pub thread_author: String, - pub created: DateTime<Utc>, - pub sticky: bool, - pub post_id: i32, - pub post_author: String, + pub body: String, pub posted: DateTime<Utc>, + pub user_id: i32, } +/// This struct is used as the query result type for the simplified +/// post view, which already joins user information in the database. #[derive(Identifiable, Queryable, Serialize, Associations)] #[belongs_to(Thread)] -pub struct Post { +pub struct SimplePost { pub id: i32, pub thread_id: i32, pub body: String, pub posted: DateTime<Utc>, + pub user_id: i32, pub author_name: String, pub author_email: String, } +/// This struct is used as the query result type for the thread index +/// view, which lists the index of threads ordered by the last post in +/// each thread. +#[derive(Queryable, Serialize)] +pub struct ThreadIndex { + pub thread_id: i32, + pub title: String, + pub thread_author: String, + pub created: DateTime<Utc>, + pub sticky: bool, + pub post_id: i32, + pub post_author: String, + pub posted: DateTime<Utc>, +} + #[derive(Deserialize, Insertable)] #[table_name="threads"] pub struct NewThread { pub title: String, - pub author_name: String, - pub author_email: String, + pub user_id: i32, } #[derive(Deserialize, Insertable)] @@ -69,8 +93,7 @@ pub struct NewThread { pub struct NewPost { pub thread_id: i32, pub body: String, - pub author_name: String, - pub author_email: String, + pub user_id: i32, } /// This struct models the response of a full-text search query. It |