backend, mark item as read

master
Mathias Rothenhaeusler 2023-10-30 19:52:51 +01:00
parent abf9a1b818
commit 579fa1f7ca
3 changed files with 36 additions and 6 deletions

View File

@ -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 {

View File

@ -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<ReadItem>) -> impl Responder {
let mut connection = establish_connection();
log::info!("Id: {}", path.id);
let feed_items: Vec<FeedItem> = feed_item::table
.filter(id.eq(path.id))
.load::<FeedItem>(&mut connection)
.unwrap();
if feed_items.len() != 1 {
return HttpResponse::NotFound();
}
let feed_item: &FeedItem = feed_items.first().unwrap();
let result: Result<usize, diesel::result::Error> = diesel::update(feed_item)
.set(read.eq(true))
.execute(&mut connection);
log::info!("Mark as read: {:?}", result);
HttpResponse::Ok()
}

View File

@ -1,5 +1,5 @@
<script setup>
import { ref, onMounted, nextTick } from 'vue';
import { ref, unref, onMounted, nextTick } from 'vue';
import axios from 'axios';
import { Readability } from '@mozilla/readability';
@ -124,12 +124,19 @@ function handleIntersection(entries) {
if (entry.isVisible === false) {
console.log('Element is out of sight ' + entry.intersectionRatio);
//console.log(feeds.value[entry.target.id])
markRead(feeds.value[entry.target.id].id)
markRead(feeds.value[entry.target.id].id).await
removeFeed(entry.target.id)
// TODO viewport moves crazy
}
}
})
}
function removeFeed(index) {
const array = unref(feeds);
array.splice(index, 1);
}
let initialLoad = false
onMounted(() => {
initialLoad = false