Change get articles to read from database instead of dummy data.
This commit is contained in:
+27
-17
@@ -1,6 +1,9 @@
|
||||
use super::feeds;
|
||||
use crate::json_serialization::user::JsonUser;
|
||||
use crate::models::feed::rss_feed::Feed;
|
||||
use crate::models::feed_item::new_feed_item::NewFeedItem;
|
||||
use crate::models::feed_item::rss_feed_item::FeedItem;
|
||||
use crate::schema::feed_item::{feed_id, title};
|
||||
use crate::{
|
||||
database::establish_connection,
|
||||
schema::{
|
||||
@@ -12,15 +15,9 @@ use actix_web::{web, HttpRequest, HttpResponse, Responder};
|
||||
use diesel::prelude::*;
|
||||
use rss::Item;
|
||||
use scraper::{Html, Selector};
|
||||
use serde_derive::Deserialize;
|
||||
|
||||
#[derive(Deserialize)]
|
||||
pub struct JsonUser {
|
||||
user_id: String,
|
||||
}
|
||||
|
||||
fn create_feed_item(item: Item, feed: &Feed) {
|
||||
let title = item.title.unwrap();
|
||||
fn create_feed_item(item: Item, feed: &Feed, connection: &mut PgConnection) {
|
||||
let item_title = item.title.unwrap();
|
||||
let frag = Html::parse_fragment(&item.content.unwrap());
|
||||
let mut content = "".to_string();
|
||||
let frag_clone = frag.clone();
|
||||
@@ -38,20 +35,33 @@ fn create_feed_item(item: Item, feed: &Feed) {
|
||||
}
|
||||
});
|
||||
|
||||
let mut connection: diesel::PgConnection = establish_connection();
|
||||
let new_feed_item =
|
||||
NewFeedItem::new(feed.id, content.clone(), title.clone(), item.link.unwrap());
|
||||
let insert_result = diesel::insert_into(feed_item::table)
|
||||
.values(&new_feed_item)
|
||||
.execute(&mut connection);
|
||||
let existing_item: Vec<FeedItem> = feed_item::table
|
||||
.filter(feed_id.eq(feed.id))
|
||||
.filter(title.eq(&item_title))
|
||||
.load(connection)
|
||||
.unwrap();
|
||||
|
||||
log::info!("{:?}", insert_result);
|
||||
if existing_item.is_empty() {
|
||||
let new_feed_item = NewFeedItem::new(
|
||||
feed.id,
|
||||
content.clone(),
|
||||
item_title.clone(),
|
||||
item.link.unwrap(),
|
||||
);
|
||||
let insert_result = diesel::insert_into(feed_item::table)
|
||||
.values(&new_feed_item)
|
||||
.execute(connection);
|
||||
|
||||
log::info!("Insert Result: {:?}", insert_result);
|
||||
} else {
|
||||
log::info!("Item {} already exists.", feed.title);
|
||||
}
|
||||
}
|
||||
|
||||
pub async fn sync(_req: HttpRequest, data: web::Json<JsonUser>) -> impl Responder {
|
||||
let mut connection: diesel::PgConnection = establish_connection();
|
||||
|
||||
let req_user_id = data.user_id.parse::<i32>().unwrap();
|
||||
let req_user_id: i32 = data.user_id;
|
||||
|
||||
let feeds: Vec<Feed> = feed::table
|
||||
.filter(user_id.eq(req_user_id))
|
||||
@@ -67,7 +77,7 @@ pub async fn sync(_req: HttpRequest, data: web::Json<JsonUser>) -> impl Responde
|
||||
match result {
|
||||
Ok(channel) => {
|
||||
for item in channel.into_items() {
|
||||
create_feed_item(item, &feed)
|
||||
create_feed_item(item, &feed, &mut connection)
|
||||
}
|
||||
}
|
||||
Err(e) => log::error!("Could not get channel {}. Error: {}", feed.url, e),
|
||||
|
||||
Reference in New Issue
Block a user