101 lines
2.6 KiB
Rust
101 lines
2.6 KiB
Rust
use crate::feeds::Feed;
|
|
use crate::poll_utils::fetch_new_entries;
|
|
use crate::user::User;
|
|
use tracing::{info, warn};
|
|
|
|
struct DemoFeed {
|
|
name: &'static str,
|
|
url: &'static str,
|
|
category: Option<&'static str>,
|
|
}
|
|
|
|
const DEMO_FEEDS: [DemoFeed; 5] = [
|
|
DemoFeed {
|
|
name: "XKCD",
|
|
url: "https://xkcd.com/atom.xml",
|
|
category: Some("Webcomic"),
|
|
},
|
|
DemoFeed {
|
|
name: "Isidore & Friends",
|
|
url: "https://isidore.webcomic.ws/rss/",
|
|
category: Some("Webcomic"),
|
|
},
|
|
DemoFeed {
|
|
name: "Astral Codex Ten",
|
|
url: "https://www.astralcodexten.com/feed",
|
|
category: Some("Substack"),
|
|
},
|
|
DemoFeed {
|
|
name: "BBC News",
|
|
url: "https://feeds.bbci.co.uk/news/world/us_and_canada/rss.xml",
|
|
category: Some("News"),
|
|
},
|
|
DemoFeed {
|
|
name: "Astronomy Picture of the Day (APOD)",
|
|
url: "https://apod.nasa.gov/apod.rss",
|
|
category: None,
|
|
},
|
|
];
|
|
|
|
pub async fn setup_demo_data(pool: &sqlx::SqlitePool) {
|
|
// Create admin user
|
|
let mut admin = User::new(
|
|
"admin".to_string(),
|
|
bcrypt::hash("admin", bcrypt::DEFAULT_COST).unwrap(),
|
|
None,
|
|
None,
|
|
);
|
|
admin.admin = true;
|
|
admin
|
|
.write_to_database(pool)
|
|
.await
|
|
.expect("Failed to create admin user");
|
|
|
|
// Create demo user
|
|
let demo = User::new(
|
|
"demo".to_string(),
|
|
bcrypt::hash("demo", bcrypt::DEFAULT_COST).unwrap(),
|
|
None,
|
|
None,
|
|
);
|
|
demo.write_to_database(pool)
|
|
.await
|
|
.expect("Failed to create demo user");
|
|
|
|
let feeds: Vec<Feed> = DEMO_FEEDS
|
|
.iter()
|
|
.map(|demo_feed| {
|
|
let mut feed = Feed::new(
|
|
demo_feed.name.to_string(),
|
|
demo_feed.url.parse().unwrap(),
|
|
demo.id,
|
|
);
|
|
if let Some(category) = demo_feed.category {
|
|
feed.categorization = vec![category.to_string()];
|
|
}
|
|
feed
|
|
})
|
|
.collect();
|
|
|
|
for feed in feeds.iter() {
|
|
feed.write_to_database(pool)
|
|
.await
|
|
.expect("Failed to create demo feed");
|
|
}
|
|
|
|
for feed in feeds.iter() {
|
|
let url = &feed.url;
|
|
|
|
let entries = match fetch_new_entries(url).await {
|
|
Ok(entries) => entries,
|
|
Err(e) => {
|
|
warn!(error=%e, feed_url=url.as_str(), "Error populating feed");
|
|
continue;
|
|
}
|
|
};
|
|
//update_entry_db(&entries, &feed_id, &mut db).await?;
|
|
}
|
|
|
|
info!("Successfully set up demo data");
|
|
}
|