diff --git a/src/models/feed_item/rss_feed_item.rs b/src/models/feed_item/rss_feed_item.rs index b30a72a..a2f670f 100755 --- a/src/models/feed_item/rss_feed_item.rs +++ b/src/models/feed_item/rss_feed_item.rs @@ -1,8 +1,8 @@ use crate::models::feed::rss_feed::Feed; use crate::schema::feed_item; use chrono::NaiveDateTime; -use diesel::{Associations, Identifiable, Queryable}; -#[derive(Clone, Identifiable, Queryable, Associations)] +use diesel::{Associations, Identifiable, Queryable, Selectable}; +#[derive(Clone, Identifiable, Selectable, Queryable, Associations)] #[diesel(belongs_to(Feed))] #[diesel(table_name=feed_item)] pub struct FeedItem { diff --git a/src/reader/mark_read.rs b/src/reader/mark_read.rs index 4716b3d..22d49e4 100644 --- a/src/reader/mark_read.rs +++ b/src/reader/mark_read.rs @@ -1,8 +1,31 @@ +use crate::schema::feed_item::{id, read}; +use crate::{ + database::establish_connection, json_serialization::read_feed_item::ReadItem, + models::feed_item::rss_feed_item::FeedItem, schema::feed_item, +}; use actix_web::{web, HttpRequest, HttpResponse, Responder}; - -use crate::json_serialization::read_feed_item::ReadItem; +use diesel::RunQueryDsl; +use diesel::{ExpressionMethods, QueryDsl}; pub async fn mark_read(_req: HttpRequest, path: web::Path) -> impl Responder { + let mut connection = establish_connection(); log::info!("Id: {}", path.id); + let feed_items: Vec = feed_item::table + .filter(id.eq(path.id)) + .load::(&mut connection) + .unwrap(); + + if feed_items.len() != 1 { + return HttpResponse::NotFound(); + } + + let feed_item: &FeedItem = feed_items.first().unwrap(); + + let result: Result = diesel::update(feed_item) + .set(read.eq(true)) + .execute(&mut connection); + + log::info!("Mark as read: {:?}", result); + HttpResponse::Ok() } diff --git a/vue/src/components/RssFeeds.vue b/vue/src/components/RssFeeds.vue index d93eb8b..d97868c 100644 --- a/vue/src/components/RssFeeds.vue +++ b/vue/src/components/RssFeeds.vue @@ -1,5 +1,5 @@