Add a notification model

This commit is contained in:
Bat 2018-05-13 13:44:18 +01:00
parent c6b2560eb0
commit 780a51157f
5 changed files with 61 additions and 0 deletions

View File

@ -0,0 +1,2 @@
-- This file should undo anything in `up.sql`
DROP TABLE notifications;

View File

@ -0,0 +1,8 @@
-- Your SQL goes here
CREATE TABLE notifications (
id SERIAL PRIMARY KEY,
title VARCHAR NOT NULL DEFAULT '',
content TEXT,
link VARCHAR,
user_id INTEGER REFERENCES users(id) ON DELETE CASCADE NOT NULL
)

View File

@ -4,6 +4,7 @@ pub mod comments;
pub mod follows; pub mod follows;
pub mod instance; pub mod instance;
pub mod likes; pub mod likes;
pub mod notifications;
pub mod post_authors; pub mod post_authors;
pub mod posts; pub mod posts;
pub mod users; pub mod users;

View File

@ -0,0 +1,38 @@
use diesel::{self, PgConnection, RunQueryDsl, QueryDsl, ExpressionMethods};
use schema::notifications;
#[derive(Queryable, Identifiable)]
pub struct Notification {
pub id: i32,
pub title: String,
pub content: Option<String>,
pub link: Option<String>,
pub user_id: i32
}
#[derive(Insertable)]
#[table_name = "notifications"]
pub struct NewNotification {
pub title: String,
pub content: Option<String>,
pub link: Option<String>,
pub user_id: i32
}
impl Notification {
pub fn insert(conn: &PgConnection, new: NewNotification) -> Notification {
diesel::insert_into(notifications::table)
.values(new)
.get_result(conn)
.expect("Couldn't save notification")
}
pub fn get(conn: &PgConnection, id: i32) -> Option<Notification> {
notifications::table.filter(notifications::id.eq(id))
.limit(1)
.load::<Notification>(conn)
.expect("Couldn't load notification by ID")
.into_iter().nth(0)
}
}

View File

@ -66,6 +66,16 @@ table! {
} }
} }
table! {
notifications (id) {
id -> Int4,
title -> Varchar,
content -> Nullable<Text>,
link -> Nullable<Varchar>,
user_id -> Int4,
}
}
table! { table! {
post_authors (id) { post_authors (id) {
id -> Int4, id -> Int4,
@ -114,6 +124,7 @@ joinable!(comments -> posts (post_id));
joinable!(comments -> users (author_id)); joinable!(comments -> users (author_id));
joinable!(likes -> posts (post_id)); joinable!(likes -> posts (post_id));
joinable!(likes -> users (user_id)); joinable!(likes -> users (user_id));
joinable!(notifications -> users (user_id));
joinable!(post_authors -> posts (post_id)); joinable!(post_authors -> posts (post_id));
joinable!(post_authors -> users (author_id)); joinable!(post_authors -> users (author_id));
joinable!(posts -> blogs (blog_id)); joinable!(posts -> blogs (blog_id));
@ -126,6 +137,7 @@ allow_tables_to_appear_in_same_query!(
follows, follows,
instances, instances,
likes, likes,
notifications,
post_authors, post_authors,
posts, posts,
users, users,