Send notification to sender when subscription expires
Only if sender is local.
This commit is contained in:
parent
85899e020f
commit
6f247ad40d
5 changed files with 46 additions and 12 deletions
|
@ -842,6 +842,7 @@ components:
|
|||
- mention
|
||||
- reblog
|
||||
- subscription
|
||||
- subscription_expiration
|
||||
example: reply
|
||||
created_at:
|
||||
description: The timestamp of the notification.
|
||||
|
|
|
@ -13,9 +13,15 @@ use web3::{
|
|||
use crate::config::BlockchainConfig;
|
||||
use crate::database::{Pool, get_database_client};
|
||||
use crate::errors::{ConversionError, DatabaseError};
|
||||
use crate::models::notifications::queries::create_subscription_notification;
|
||||
use crate::models::notifications::queries::{
|
||||
create_subscription_notification,
|
||||
create_subscription_expiration_notification,
|
||||
};
|
||||
use crate::models::profiles::currencies::Currency;
|
||||
use crate::models::profiles::queries::search_profile_by_wallet_address;
|
||||
use crate::models::profiles::queries::{
|
||||
get_profile_by_id,
|
||||
search_profile_by_wallet_address,
|
||||
};
|
||||
use crate::models::relationships::queries::unsubscribe;
|
||||
use crate::models::subscriptions::queries::{
|
||||
create_subscription,
|
||||
|
@ -143,6 +149,11 @@ pub async fn check_subscriptions(
|
|||
&expires_at,
|
||||
&block_date,
|
||||
).await?;
|
||||
log::info!(
|
||||
"subscription updated: {0} to {1}",
|
||||
subscription.sender_id,
|
||||
subscription.recipient_id,
|
||||
);
|
||||
if expires_at > subscription.expires_at {
|
||||
// Subscription was extended
|
||||
create_subscription_notification(
|
||||
|
@ -151,11 +162,6 @@ pub async fn check_subscriptions(
|
|||
&subscription.recipient_id,
|
||||
).await?;
|
||||
};
|
||||
log::info!(
|
||||
"subscription updated: {0} to {1}",
|
||||
subscription.sender_id,
|
||||
subscription.recipient_id,
|
||||
);
|
||||
};
|
||||
},
|
||||
Err(DatabaseError::NotFound(_)) => {
|
||||
|
@ -168,16 +174,16 @@ pub async fn check_subscriptions(
|
|||
&expires_at,
|
||||
&block_date,
|
||||
).await?;
|
||||
create_subscription_notification(
|
||||
db_client,
|
||||
&sender.id,
|
||||
&recipient.id,
|
||||
).await?;
|
||||
log::info!(
|
||||
"subscription created: {0} to {1}",
|
||||
sender.id,
|
||||
recipient.id,
|
||||
);
|
||||
create_subscription_notification(
|
||||
db_client,
|
||||
&sender.id,
|
||||
&recipient.id,
|
||||
).await?;
|
||||
},
|
||||
Err(other_error) => return Err(other_error.into()),
|
||||
};
|
||||
|
@ -191,6 +197,14 @@ pub async fn check_subscriptions(
|
|||
subscription.sender_id,
|
||||
subscription.recipient_id,
|
||||
);
|
||||
let sender = get_profile_by_id(db_client, &subscription.sender_id).await?;
|
||||
if sender.is_local() {
|
||||
create_subscription_expiration_notification(
|
||||
db_client,
|
||||
&subscription.recipient_id,
|
||||
&subscription.sender_id,
|
||||
).await?;
|
||||
};
|
||||
};
|
||||
|
||||
if sync_state.update(&contract.address(), to_block) {
|
||||
|
|
|
@ -47,6 +47,8 @@ impl ApiNotification {
|
|||
EventType::Mention => "mention",
|
||||
EventType::Repost => "reblog",
|
||||
EventType::Subscription => "subscription",
|
||||
EventType::SubscriptionStart => "", // not supported
|
||||
EventType::SubscriptionExpiration => "subscription_expiration",
|
||||
};
|
||||
Self {
|
||||
id: notification.id.to_string(),
|
||||
|
|
|
@ -104,6 +104,17 @@ pub async fn create_subscription_notification(
|
|||
).await
|
||||
}
|
||||
|
||||
pub async fn create_subscription_expiration_notification(
|
||||
db_client: &impl GenericClient,
|
||||
sender_id: &Uuid,
|
||||
recipient_id: &Uuid,
|
||||
) -> Result<(), DatabaseError> {
|
||||
create_notification(
|
||||
db_client, sender_id, recipient_id, None,
|
||||
EventType::SubscriptionExpiration,
|
||||
).await
|
||||
}
|
||||
|
||||
pub async fn get_notifications(
|
||||
db_client: &impl GenericClient,
|
||||
recipient_id: &Uuid,
|
||||
|
|
|
@ -20,6 +20,8 @@ pub enum EventType {
|
|||
Mention,
|
||||
Repost,
|
||||
Subscription,
|
||||
SubscriptionStart,
|
||||
SubscriptionExpiration,
|
||||
}
|
||||
|
||||
impl From<&EventType> for i16 {
|
||||
|
@ -32,6 +34,8 @@ impl From<&EventType> for i16 {
|
|||
EventType::Mention => 5,
|
||||
EventType::Repost => 6,
|
||||
EventType::Subscription => 7,
|
||||
EventType::SubscriptionStart => panic!("not supported"),
|
||||
EventType::SubscriptionExpiration => 9,
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -48,6 +52,8 @@ impl TryFrom<i16> for EventType {
|
|||
5 => Self::Mention,
|
||||
6 => Self::Repost,
|
||||
7 => Self::Subscription,
|
||||
8 => Self::SubscriptionStart,
|
||||
9 => Self::SubscriptionExpiration,
|
||||
_ => return Err(ConversionError),
|
||||
};
|
||||
Ok(event_type)
|
||||
|
|
Loading…
Reference in a new issue