diff --git a/src/bot/commands/subscribe.rs b/src/bot/commands/subscribe.rs index c816d9ff..18bd7e45 100644 --- a/src/bot/commands/subscribe.rs +++ b/src/bot/commands/subscribe.rs @@ -5,6 +5,7 @@ use crate::config::Config; use crate::db::feeds; use crate::db::telegram; use crate::db::telegram::NewTelegramSubscription; +use crate::deliver::DeliverChatUpdatesJob; use crate::models::telegram_subscription::TelegramSubscription; use crate::sync::reader; use crate::sync::SyncFeedJob; @@ -12,6 +13,7 @@ use diesel::r2d2::ConnectionManager; use diesel::r2d2::Pool; use diesel::Connection; use diesel::PgConnection; +use fang::Runnable; use url::Url; static COMMAND: &str = "/subscribe"; @@ -25,6 +27,7 @@ enum SubscriptionError { UrlIsNotFeed, SubscriptionAlreadyExists, SubscriptionCountLimit, + SyncError, } impl From for SubscriptionError { @@ -52,6 +55,7 @@ impl Subscribe { Err(SubscriptionError::SubscriptionCountLimit) => { "You exceeded the number of subscriptions".to_string() } + Err(SubscriptionError::SyncError) => "Failed to sync your feed".to_string(), } } @@ -78,7 +82,11 @@ impl Subscribe { let subscription = telegram::create_subscription(db_connection, new_telegram_subscription).unwrap(); - SyncFeedJob::new(feed.id).enqueue(db_connection).unwrap(); + if let Err(_err) = SyncFeedJob::new(feed.id).run(db_connection) { + return Err(SubscriptionError::SyncError); + } + + DeliverChatUpdatesJob::new(chat.id).deliver(db_connection); Ok(subscription) }) diff --git a/src/deliver/deliver_chat_updates_job.rs b/src/deliver/deliver_chat_updates_job.rs index 40149cde..87d661ae 100644 --- a/src/deliver/deliver_chat_updates_job.rs +++ b/src/deliver/deliver_chat_updates_job.rs @@ -60,6 +60,10 @@ pub struct DeliverChatUpdatesJob { } impl DeliverChatUpdatesJob { + pub fn new(chat_id: i64) -> Self { + Self { chat_id } + } + pub fn deliver(&self, db_connection: &PgConnection) { let subscriptions = telegram::find_unread_subscriptions_for_chat(db_connection, self.chat_id).unwrap(); diff --git a/src/sync/sync_feed_job.rs b/src/sync/sync_feed_job.rs index 85ed6bf7..24739992 100644 --- a/src/sync/sync_feed_job.rs +++ b/src/sync/sync_feed_job.rs @@ -55,7 +55,7 @@ impl Runnable for SyncFeedJob { impl SyncFeedJob { pub fn new(feed_id: i64) -> Self { - SyncFeedJob { feed_id } + Self { feed_id } } pub fn enqueue(&self, connection: &PgConnection) -> Result {